web-dev-qa-db-ja.com

Javaクラスファイルを「逆コンパイル」する方法

クラスファイルを逆コンパイルするためにどのプログラムを使用できますか?実際にJavaコードを入手するのでしょうか、それとも単にJVMアセンブリコードなのでしょうか。

このサイトのJavaパフォーマンスに関する質問では、Javaクラスファイルを「逆コンパイル」してコンパイラが特定のものを最適化する方法を確認した人からの回答がよく見られます。

556
Kip

2016年2月に更新:

www.javadecompilers.com はJADを以下のようにリストします。

最も人気のあるJavaデコンパイラーですが、主にこの時代のものです。 C++で書かれているのでとても速いです。
古い、サポートされておらず、Java 5以降を正しく逆コンパイルできません

だからあなたの走行距離は最近のjdk(7、8)で変わるかもしれません。

同じサイトに他のツールがリストされています。

そして、javadecompilerは、 コメントSalvador Valencia (2017年9月)で指摘されているように、SaaSを提供し、そこで.classファイルをクラウドにアップロードして返します。逆コンパイルされたコード.


オリジナルの答え:2008年10月

  • J2SE 5.0(Java SE 5)の主な機能を定義するJSR 176の最終リリースは、2004年9月30日に公開されました。
  • Pavel Kouznetsov氏によって書かれた有名なJavaデコンパイラーであるJADがサポートする最新のJavaバージョンは、JDK 1.3です。
  • 「DJ Java Decompiler」や「Cavaj Java Decompiler」など、今日インターネットからダウンロード可能なほとんどのJavaデコンパイラーは、JADを使用しています。Java5のソースを表示することはできません。

Java Decompiler (さらにもう1つのFast Java逆コンパイラ)は次のものを持ちます。

  • Java 5+ “ .class”ファイルの逆コンパイルおよび分析に対する明示的なサポート。
  • いいGUI

screenshot

JDK 1.1.8からJDK 1.7.0までのコンパイラ( JikesJRockit など)で動作します。

それは実際に完全に機能的であるオンライン ライブデモ版 を備えています!あなたはただ何もインストールせずにページにjarファイルをドロップして逆コンパイルされたソースコードを見ることができます。

588
VonC

そこにいくつかの逆コンパイラがあります...簡単な検索結果が得られます:

  1. Procyon :オープンソース(Apache 2)と積極的に開発された
  2. クラカタウ :オープンソース(GPLv3)と積極的に開発された
  3. _ cfr _ :オープンソース(MIT)と積極的に開発された
  4. _ jad _
  5. DJ Javaデコンパイラー
  6. モカ

などなど。

これらはJavaコードを生成します。 JavaにはJVMのバイトコード( javap )を見ることができるものが付属しています。

101
billjamesdev

Javaのソースコードを見るには、逆コンパイラをチェックしてください。 jad を検索してください。

バイトコードを見たい場合は、JDKに付属の javap を使用してください。

51
Marko

私はいくつか試してみました、そして Procyon は私のために最もうまくいくようでした。現在活発に開発中で、最新バージョンのJavaの多くの機能をサポートしています。

これらは私が試した他の人です:

  • _ cfr _
    • 有望ですが、多くの場合、メソッドの逆コンパイルに失敗しました。私はこれを見守ります。また、最新のJava機能をサポートして積極的に開発されました。
  • クラカタウ
    • 元のソースを再構築するのではなく、同等のJavaコードを出力しようとするという点で別のアプローチを取ります。これにより、難読化されたコードに適したものになります。私のテストでは、Procyonとほぼ同等でしたが、それでも違いがあるのはいいことです。エラーが発生しても停止しないように、-skipコマンドラインフラグを使用する必要がありました。積極的に開発され、そして興味深いことにそれはPythonで書かれています。
  • JD-GUI
    • 動作しましたが、Procyonの出力はずっと良くなりました。これはProcyonの出力を元のものと比較した ページで、JD-GUI です。 JD-GUIは Eclipseプラグイン としても利用できますが、これは私にはまったく機能しませんでした。オープンソースではないようで、開発は散発的です。
  • _ jad _
29
bmaupin

JAD Decompiler を使います。

Eclipse それのためのプラグイン、 jadeclipse があります。なかなかいいですね。

18
sakana

Procyonには逆コンパイラが含まれます。 FOSSです。

14
Janus Troelsen

Soot は、新しいJavaコード用のオプションです。少なくともそれはまだ最近維持されているという利点があります...

また、 Java Decompiler は、スタンドアロンのGUIとEclipse統合の両方を備えたデコンパイラーです。

最後に、 Jdec は言及されていませんが、他のオプションほど洗練されていません。

13
Quinn Taylor

JD-GUI は本当に良いです。 _ jar _ ファイルを開いて、IDEで作業しているかのようにコードを参照するだけです。良いもの。

13
G Kumar

これが2015年2月現在の逆コンパイラのリストです。

Procyon 、オープンソース、 https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

_ cfr _ 、無料、ソースコードなし、 http://www.benf.org/other/cfr/

_ jd _ 、非営利目的に限り無料、 http://jd.benow.ca/

Fernflower 、オープンソース、 https://github.com/fesh0r/fernflower

_ jad _ - ここでは歴史的な理由でのみ与えられています。無料、ソースコードなし、 http://varaneckas.com/jad/ 古い、サポートされていない、およびJava 5以降を正しく逆コンパイルしない。

あなたは上記の逆コンパイラをオンラインでテストすることができます。インストールは不要ですし、あなた自身の賢い選択をすることもできます。

クラウド内のJavaデコンパイラー: http://www.javadecompilers.com/ /

11
Andrew Rukin

使用できるプログラムはいくつかあります。実際のJavaコードを入手することができますが、場合によってはコードが難読化されているため、メソッドには1文字または数字、あるいは文字と数字をランダムに組み合わせた名前が付けられます。

DJデコンパイラーMocha

10
Mike Pone

Java用のほとんどの逆コンパイラは _ jad _ に基づいています。これは素晴らしいツールですが、残念ながらしばらくの間更新されておらず、Java 1.5以降のクラスをうまく処理できません。 1.5以上のクラスを適切に処理するツールは見たことがありません。

9
John Meagher

cavaj を見てください。

6
Paulo Guedes

これまでにリストされたJADリンクはすべて壊れているように思われるので、このサイトを見つけました。うまく動作します(少なくともLinuxの場合)。 Ubuntu 11.10では、何らかの理由で静的なものをダウンロードしなければなりませんでした。

http://www.varaneckas.com/jad

6
kdazzle
  • JADは機能するもので単純なものです。

  • また、メソッドを見たいだけの場合は、javapを使用してください。

5
Berlin Brown

Javaコンパイラがどのように動作するのかを知りたいのであれば、逆コンパイルはしたくない、逆アセンブリは必要です。逆コンパイルでは、バイトコードをJavaソースに変換する必要があります。つまり、多くの低レベルの情報が失われます。コンパイラの最適化について疑問に思っている場合は、おそらくこれが非常に興味深い情報です。

とにかく、 オープンソースのJava逆アセンブラ を書いたことがあります。 Javapとは異なり、これは非常に病理学的なクラスでも機能するので、難読化ツールが自分のクラスに対しても何をしているのかがわかります。お勧めしませんが、逆コンパイルもできます。

5
Antimony

IntelliJ IDEAプラットフォームでは、 Java Decompiler IntelliJ Plugin を使用できます。デバッグプロセス中にすべてのJavaソースを表示できない場合でも、それらをすべて表示することができます。それは有名なツール JD-GUI に基づいています。

enter image description here

4
naXa

JADは私には機能しません(Ubuntu 11.10の問題)ので、私は先に進み、 _ jodo _ を使用しました。少なくともOpen Javaのソースコードがあり、my .class を正しく逆コンパイルできました。

最初に 'branches/generic' branchをチェックアウトすることをお勧めします。トランクは安定していません。

4
alexander.box

AndroChef Java Decompiler を使うと、apk、dex、jar、およびJavaクラスファイルを逆コンパイルできます。それはシンプルで簡単です。 AndroChef JDは FernFlower に基づいています。 10回の無料使用で評価できます。

AndroChefは、総称、列挙型、注釈などのJava言語機能をサポートしています。いくつかの研究によると、AndroChef Java Decompilerは伝統的なJavaコンパイラで生成されたJavaアプリケーションの98.04%を逆コンパイルすることができます - 非常に高い回復率。それはあなたが読みやすいJavaソースにJavaとDalvikバイトコード(DEX、APK)を逆コンパイルすることを可能にするシンプルだが強力なツールです。

1
naXa

OSXの場合、私はお勧めします:jarzillaまたはJD-GUI

それらは両方ともあなたが瓶や戦争などを見ることを可能にします。内容をファイル化し、その中のクラスファイルをすべて逆コンパイルします。

Jarzilla: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/ /

1
cjackson