クラスファイルを逆コンパイルするには、どのプログラムを使用できますか?実際にJavaコードを取得しますか、それとも単なるJVMアセンブリコードですか?
このサイトのJavaパフォーマンスに関する質問で、コンパイラーが特定のことを最適化する方法を確認するためにJavaクラスファイルを「逆コンパイル」した人からの応答をよく目にします。
クラスファイルを逆コンパイルするには、どのプログラムを使用できますか?実際にJavaコードを取得しますか、それとも単なるJVMアセンブリコードですか?
このサイトのJavaパフォーマンスに関する質問で、コンパイラーが特定のことを最適化する方法を確認するためにJavaクラスファイルを「逆コンパイル」した人からの応答をよく目にします。
回答:
2016年2月の更新:
www.javadecompilers.comはJADを次のようにリストしています。
最も人気のあるJavaデコンパイラーですが、主にこの時代のものです。C ++で書かれているため、非常に高速です。
古く、サポートされておらず、Java 5以降が正しく逆コンパイルされない
したがって、マイレージは最近のjdk(7、8)によって異なる場合があります。
同じサイトに他のツールがリストされています。
で述べたようにそしてjavadecompiler、サルバドールバレンシアでのコメント(2017年9月)、申し出アップロードのSaaS .class
クラウドにファイルを、それはあなたの逆コンパイルコードを返します。
元の回答:2008年10月
Java Decompiler(さらに別のFast Java decompiler)には次の機能があります。
JDK 1.1.8からJDK 1.7.0までのコンパイラー(Jikes、JRockitなど)で動作します。
実際に完全に機能するオンラインライブデモバージョンが特徴です。jarファイルをページにドロップするだけで、何もインストールせずに逆コンパイルされたソースコードを表示できます。
そこにはいくつかの逆コンパイラがあります...簡単な検索で得られるもの:
などなど。
これらはJavaコードを生成します。Javaには、JVMバイトコード(javap)を表示できるものが付属しています。
私はいくつか試してみましたが、プロキオンは私にとって最もうまく機能するようでした。現在開発が進んでおり、Javaの最新バージョンの多くの機能をサポートしています。
これらは私が試した他のものです:
-skip
エラーで停止しないように、コマンドラインフラグを使用する必要がありました。活発に開発されており、興味深いことにPythonで書かれています。IGNORE_EXCEPTIONS
事柄がコマンドラインフラグに変更されていることに注意してください-skip
。
JAD Decompilerを使用しています。
そのためのEclipseプラグイン、jadeclipseがあります。それはかなりいいです。
Procyonには逆コンパイラが含まれています。FOSSです。
Sootは新しいJavaコードのオプションです。少なくともそれはまだ最近維持されているという利点があります...
また、Java Decompilerは、スタンドアロンGUIとEclipse統合の両方を備えた逆コンパイラです。
最後に、Jdecは言及されていませんが、他のオプションほど洗練されていません。
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/
使用できるプログラムがいくつかあります。実際のJavaコードを取得しますが、コードが難読化されている場合があるため、メソッドには1つの文字または数字、あるいは文字と数字のランダムな組み合わせで名前が付けられます。
Java用のほとんどの逆コンパイラはJADに基づいています。これは素晴らしいツールですが、残念ながらしばらく更新されておらず、Java 1.5以上のクラスをうまく処理できません。1.5以上のクラスを適切に処理するツールを見たことがありません。
これまでにリストされたJADリンクはすべて壊れているように見えるので、このサイトを見つけました。(少なくともLinuxでは)うまく動作します!Ubuntu 11.10では、何らかの理由で静的なものをダウンロードする必要がありました。
Javaコンパイラーが特定のことをどのように行うかを確認したい場合は、逆コンパイルではなく、逆アセンブリが必要です。逆コンパイルには、バイトコードをJavaソースに変換することが含まれます。つまり、多くの低レベルの情報が失われます。コンパイラーの最適化について疑問に思っている場合、これはおそらくまさに興味のある情報です。
とにかく、私はたまたまオープンソースのJava逆アセンブラーを作成しました。Javapとは異なり、これは非常に病理学的なクラスでも機能するため、難読化ツールがクラスに対して行っていることも確認できます。逆コンパイルも可能ですが、お勧めしません。
JADが機能しない(Ubuntu 11.10の問題)ので、JODOに乗り換えました。少なくともOpen Javaソースコードがあり、.classを適切に逆コンパイルできました。
最初に「ブランチ/ジェネリック」ブランチをチェックすることをお勧めします。トランクは安定していません。
IntelliJ IDEAプラットフォームでは、Java Decompiler IntelliJ Pluginを使用できます。これにより、デバッグプロセス中にすべてのJavaソースを表示することができます。それは有名なツールJD-GUIに基づいています。
AndroChef Javaの逆コンパイラあなたはAPK、DEX、jarファイルとJavaクラスファイルを逆コンパイルすることができます。シンプルで簡単です。AndroChef JDはFernFlowerに基づいています。10回の無料使用で評価できます。
AndroChefは、ジェネリック、列挙型、注釈などのJava言語機能をサポートしています。いくつかの研究によると、AndroChef Java Decompilerは、従来のJavaコンパイラーで生成されたJavaアプリケーションの98.04%を逆コンパイルできます-非常に高い回復率。これは、JavaとDalvikバイトコード(DEX、APK)を読み取り可能なJavaソースに逆コンパイルできるようにするシンプルですが強力なツールです。