どうすれば“逆コンパイル” Javaクラスファイル? [閉まっている]
-
07-07-2019 - |
質問
クラスファイルを逆コンパイルするために使用できるプログラムは何ですか?実際にJavaコードを取得しますか、それとも単なるJVMアセンブリコードですか?
このサイトのJavaパフォーマンスに関する質問では、「逆コンパイル」した人からの回答がよく見られます。コンパイラが特定のものを最適化する方法を確認するには、Javaクラスファイルを参照してください。
解決
2016年2月更新:
www.javadecompilers.com はJADを次のようにリストします。
最も人気のあるJava逆コンパイラですが、主にこの時代のものです。 C ++で記述されているため、非常に高速です。
古く、サポートされておらず、Java 5以降を正しく逆コンパイルしません
したがって、走行距離は最近のjdk(7、8)によって異なる場合があります。
同じサイトに他のツールがリストされています。
そしてjavadecompiler、 Salvador Valencia でコメント(2017年9月)は、 .class
ファイルをクラウドに保存すると、逆コンパイルされたコードが返されます。
元の回答:2008年10月
- J2SE 5.0(Java SE 5)の主要な機能を定義するJSR 176の最終リリースは、2004年9月30日に公開されました。
- JADがサポートする最新のJavaバージョンは、Pavel Kouznetsov氏が作成した有名なJavaデコンパイラです。 JDK 1.3 。
- “ DJ Java Decompiler”など、今日インターネットからダウンロード可能なJavaデコンパイラのほとんど。または“ Cavaj Java Decompiler”はJADを搭載しています。Java5ソースを表示できません。
Java Decompiler (さらに別のFast Java Decompiler)には次のものがあります。
- Java 5 + “ .class”の逆コンパイルと分析の明示的なサポートファイル。
- 優れたGUI:
JDK 1.1.8からJDK 1.7.0までのコンパイラ、およびその他( Jikes 、 JRockit など)。
実際には完全に機能するオンラインのライブデモバージョンを備えています! jarファイルをページにドロップするだけで、何もインストールせずに逆コンパイルされたソースコードを表示できます。
他のヒント
Javaソースコードを表示するには、逆コンパイラを確認してください。 jad を検索します。
バイトコードを表示する場合は、JDKに付属の javap を使用します。
いくつか試してみましたが、 Procyon が最適であると思われました。現在開発中であり、最新バージョンのJavaの多くの機能をサポートしています。
これらは私が試した他のものです:
- CFR
- 有望ですが、メソッドの逆コンパイルに失敗することがよくありました。これに目を光らせておきます。最新のJava機能のサポートも積極的に開発されています。
- クラカタウ
- オリジナルのソースを再構築しようとするのではなく、同等のJavaコードを出力しようとするため、難読化されたコードの方が改善される可能性があるという点で、異なるアプローチを取ります。私のテストからは、Procyonとほぼ同等でしたが、何か違うものを持っているのはいいことです。エラーで停止しないように、
-skip
コマンドラインフラグを使用する必要がありました。積極的に開発され、興味深いことにPythonで書かれています。
- オリジナルのソースを再構築しようとするのではなく、同等のJavaコードを出力しようとするため、難読化されたコードの方が改善される可能性があるという点で、異なるアプローチを取ります。私のテストからは、Procyonとほぼ同等でしたが、何か違うものを持っているのはいいことです。エラーで停止しないように、
- JD-GUI
- 動作しましたが、Procyonの出力ははるかに優れていました。以下は、 Procyonの出力を元のJD-GUIと比較するページです。 JD-GUIは Eclipseプラグインとしても利用できますが、まったく機能しませんでした。オープンソースではないようで、開発は散発的です。
- JAD
- 動作しましたが、Java 1.4以下のみをサポートしています。 Eclipseプラグインとしても利用できます。もはや開発中です。
JADデコンパイラを使用しています。
Eclipse プラグインがあり、 jadeclipse 。とてもいいです。
Procyon には逆コンパイラが含まれています。 FOSSです。
So は、新しい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/シダの花、
JAD –歴史的な理由でのみここに記載されています。無料、ソースコードなし、 http://varaneckas.com/jad/ 時代遅れで、サポートされておらず、Java 5以降を正しく逆コンパイルしません。
上記の逆コンパイラをオンラインでテストできます。インストールは不要で、知識に基づいた選択を行うことができます。
クラウド内のJava逆コンパイラー: http://www.javadecompilers.com/
Javaのほとんどの逆コンパイラは、 JAD に基づいています。これは素晴らしいツールですが、残念ながらしばらく更新されておらず、Java 1.5+クラスをうまく処理していません。 1.5+クラスを適切に処理するツールを見たことはありません。
cavaj をご覧ください。
これまでにリストされたすべてのJADリンクは壊れているように見えるため、このサイトを見つけました。 (少なくともLinuxの場合)素晴らしい動作です! Ubuntu 11.10では、何らかの理由で静的なものをダウンロードする必要がありました。
-
JADは機能し、シンプルなものです。
-
また、メソッドを表示するだけの場合は、javapを使用します。
Javaコンパイラが特定の処理を実行する方法を確認したい場合は、逆コンパイルが不要で、逆アセンブリが必要です。逆コンパイルには、バイトコードのJavaソースへの変換が含まれます。つまり、多くの低レベルの情報が失われます。コンパイラーの最適化について疑問がある場合は、おそらくこれがまさに興味のある情報です。
とにかく、オープンソースのJava逆アセンブラーを書いたことがあります。 Javapとは異なり、これは非常に病理学的なクラスでも機能するため、難読化ツールがクラスに対して行っていることも確認できます。推奨しませんが、逆コンパイルもできます。
JADは私には機能しません(Ubuntu 11.10の問題)。 >。少なくとも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/