クラスファイルを逆コンパイルするには、どのプログラムを使用できますか? 実際に Java コードを取得できますか、それとも単なる JVM アセンブリ コードですか?
このサイトの Java パフォーマンスに関する質問に対して、Java クラス ファイルを「逆コンパイル」して、コンパイラが特定のものをどのように最適化するかを確認した人からの回答をよく目にします。
クラスファイルを逆コンパイルするには、どのプログラムを使用できますか? 実際に Java コードを取得できますか、それとも単なる JVM アセンブリ コードですか?
このサイトの Java パフォーマンスに関する質問に対して、Java クラス ファイルを「逆コンパイル」して、コンパイラが特定のものをどのように最適化するかを確認した人からの回答をよく目にします。
2016 年 2 月の更新:
www.javadecompilers.comでは、JAD を次のようにリストしています。
最も人気のある Java 逆コンパイラですが、主にこの時代だけのものです。C++ で書かれているため、非常に高速です。
古い、サポートされていない、正しく逆コンパイルされない Java 5 以降
そのため、マイレージは最近の jdk (7、8) によって異なる場合があります。
同じサイトに他のツールがリストされています。
また、 Salvador Valenciaがコメントで指摘したように (2017 年 9 月)、javadecompiler は、.class
ファイルをクラウドにアップロードすると逆コンパイルされたコードを返す SaaS を提供します。
元の回答: 2008 年 10 月
Java Decompiler (Yet another Fast Java decompiler) には次の機能があります。
JDK 1.1.8 から JDK 1.7.0 までのコンパイラ、およびその他 ( Jikes、JRockitなど) で動作します。
実際に完全に機能するオンラインライブ デモ バージョンを備えています。ページに jar ファイルをドロップするだけで、何もインストールせずに逆コンパイルされたソース コードを表示できます。
Java ソース コードを表示するには、一部の逆コンパイラを確認してください。jadを検索します。
バイトコードを表示したい場合は、JDK に付属のjavapを使用してください。
いくつか試してみましたが、Procyonが一番うまくいったようです。これは活発に開発されており、Java の最新バージョンの多くの機能をサポートしています。
これらは私が試した他のものです:
-skip
エラーで停止しないように、コマンドライン フラグを使用する必要がありました。活発に開発されており、興味深いことに Python で書かれています。JAD Decompilerを使用しています。
そのためのEclipseプラグインjadeclipseがあります。それはかなりいいです。
Procyonには逆コンパイラが含まれています。フォスです。
すすは、新しい Java コードのオプションです。少なくとも、最近維持されているという利点があります...
また、Java Decompilerは、スタンドアロン GUI と Eclipse 統合の両方を備えた逆コンパイラーです。
最後に、Jdecについては言及されていませんが、他のオプションほど洗練されていません。
Java のほとんどの逆コンパイラはJADに基づいています。これは優れたツールですが、残念ながらしばらく更新されておらず、Java 1.5 以降のクラスをうまく処理できません。1.5 以上のクラスを適切に処理するツールは見たことがありません。
カヴァージを見てください。
JADは機能し、シンプルなものです。
また、メソッドを確認したいだけの場合は、javapを使用してください。
Java コンパイラが特定のことをどのように行うかを見たい場合は、逆コンパイルではなく、逆アセンブルが必要です。逆コンパイルには、バイトコードを Java ソースに変換することが含まれます。つまり、多くの低レベルの情報が失われます。コンパイラの最適化について知りたい場合は、おそらくこれがまさにあなたが興味を持っている情報です。
とにかく、私はたまたまオープンソースの Java 逆アセンブラーを作成しました。Javap とは異なり、これは非常に異常なクラスでも機能するため、難読化ツールがクラスに対して行っていることも確認できます。逆コンパイルもできますが、お勧めしません。
JAD が機能しない (Ubuntu 11.10 の問題) ため、先に進んでJODOを使用しました。少なくとも Open Java ソース コードがあり、.classを適切に逆コンパイルできました。
最初に「branches/generic」ブランチをチェックアウトすることをお勧めします。幹が安定しない。
IntelliJ IDEA プラットフォームでは、 Java Decompiler IntelliJ Pluginを使用できます。すべての Java ソースがなくても、デバッグ プロセス中にすべての Java ソースを表示できます。これは、有名なツールJD-GUIに基づいています。
AndroChef Java Decompilerを使用すると、apk、dex、jar、および Java クラス ファイルを逆コンパイルできます。シンプルで簡単です。AndroChef JD はFernFlowerに基づいています。10回の無料利用で評価できます。
AndroChef は、ジェネリック、列挙型、注釈などの Java 言語機能をサポートしています。いくつかの調査によると、AndroChef Java Decompiler は、従来の Java コンパイラで生成された Java アプリケーションの 98.04% を逆コンパイルできます。これは非常に高い回復率です。Java および Dalvik バイトコード (DEX、APK) を読み取り可能な Java ソースに逆コンパイルできる、シンプルですが強力なツールです。
OSX の場合は、jarzilla または JD-GUI をお勧めします。
どちらもjar、warなどを表示できます。ファイルの内容を削除し、その中のクラス ファイルを逆コンパイルします。
Jarzilla: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/