556

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

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

4

19 に答える 19

588

2016 年 2 月の更新:

www.javadecompilers.comでは、JAD を次のようにリストしています。

最も人気のある Java 逆コンパイラですが、主にこの時代だけのものです。C++ で書かれているため、非常に高速です。
古い、サポートされていない、正しく逆コンパイルされない Java 5 以降

そのため、マイレージは最近の jdk (7、8) によって異なる場合があります。

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

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


元の回答: 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 を利用しています。Java 5 ソースを表示することはできません。

Java Decompiler (Yet another Fast Java decompiler) には次の機能があります。

  • Java 5+「.class」ファイルの逆コンパイルと分析の明示的なサポート。
  • 素敵な GUI:

スクリーンショット

JDK 1.1.8 から JDK 1.7.0 までのコンパイラ、およびその他 ( JikesJRockitなど) で動作します。

実際に完全に機能するオンラインライブ デモ バージョンを備えています。ページに jar ファイルをドロップするだけで、何もインストールせずに逆コンパイルされたソース コードを表示できます。

于 2008-11-07T16:18:48.140 に答える
101

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

  1. Procyon : オープンソース (Apache 2) であり、積極的に開発されています
  2. Krakatau : オープンソース (GPLv3) であり、積極的に開発されています
  3. CFR : オープンソース (MIT) であり、活発に開発されています
  4. ジャッド
  5. DJ Java デコンパイラ
  6. モカ

などなど。

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

于 2008-11-07T16:03:59.403 に答える
51

Java ソース コードを表示するには、一部の逆コンパイラを確認してください。jadを検索します。

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

于 2008-11-07T16:03:51.650 に答える
29

いくつか試してみましたが、Procyonが一番うまくいったようです。これは活発に開発されており、Java の最新バージョンの多くの機能をサポートしています。

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

  • CFR
    • 有望ですが、メソッドの逆コンパイルに失敗することがよくあります。私はこれに注目します。また、最新の Java 機能をサポートして積極的に開発されています。
  • クラカタウ
    • 元のソースを再構築しようとするのではなく、同等の Java コードを出力しようとするという点で、別のアプローチを採用しています。私のテストでは、おおむね Procyon と同等でしたが、それでも何か違うものがあるのはうれしいことです。-skipエラーで停止しないように、コマンドライン フラグを使用する必要がありました。活発に開発されており、興味深いことに Python で書かれています。
  • JD-GUI
    • うまくいきましたが、Procyon の出力ははるかに優れていました。これは、Procyonの出力を元の JD-GUI と比較したページです。JD-GUI はEclipse プラグインとしても利用できますが、これはまったく機能しませんでした。オープンソースではないようで、開発は散発的です。
  • ジャッド
    • 動作しましたが、Java 1.4 以下のみをサポートします。Eclipse プラグインとしても利用できます。もはや開発中です。
于 2013-10-02T19:00:30.453 に答える
18

JAD Decompilerを使用しています。

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

于 2008-11-07T16:07:09.833 に答える
14

Procyonには逆コンパイラが含まれています。フォスです。

于 2013-06-10T14:02:51.750 に答える
13

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

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

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

于 2009-09-18T23:53:09.317 に答える
12

JD-GUIは本当に良いです。JARファイルを開いて、IDE で作業しているかのようにコードをブラウズするだけです。いい物。

于 2011-07-01T09:33:33.300 に答える
10

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

DJ デコンパイラ モカ

于 2008-11-07T16:04:02.540 に答える
9

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

于 2008-11-07T16:18:26.253 に答える
6

カヴァージを見てください。

于 2008-11-07T16:02:55.710 に答える
5
  • JADは機能し、シンプルなものです。

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

于 2011-03-13T05:41:45.493 に答える
5

Java コンパイラが特定のことをどのように行うかを見たい場合は、逆コンパイルではなく、逆アセンブルが必要です。逆コンパイルには、バイトコードを Java ソースに変換することが含まれます。つまり、多くの低レベルの情報が失われます。コンパイラの最適化について知りたい場合は、おそらくこれがまさにあなたが興味を持っている情報です。

とにかく、私はたまたまオープンソースの Java 逆アセンブラーを作成しました。Javap とは異なり、これは非常に異常なクラスでも機能するため、難読化ツールがクラスに対して行っていることも確認できます。逆コンパイルもできますが、お勧めしません。

于 2012-11-30T03:13:59.493 に答える
4

JAD が機能しない (Ubuntu 11.10 の問題) ため、先に進んでJODOを使用しました。少なくとも Open Java ソース コードがあり、.classを適切に逆コンパイルできました。

最初に「branches/generic」ブランチをチェックアウトすることをお勧めします。幹が安定しない。

于 2013-06-25T17:52:07.810 に答える
4

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

ここに画像の説明を入力

于 2015-08-04T09:04:41.810 に答える
1

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 ソースに逆コンパイルできる、シンプルですが強力なツールです。

于 2015-08-04T08:22:30.387 に答える
1

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

どちらもjar、warなどを表示できます。ファイルの内容を削除し、その中のクラス ファイルを逆コンパイルします。

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

于 2015-06-18T16:54:54.197 に答える