Javaクラスファイルを「逆コンパイル」する方法を教えてください。[閉まっている]


556

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

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


4
「逆コンパイル」の技術は、リバースエンジニアリングと考えることもできます。時には何かをリバースエンジニアリングするときに、常にバイナリにアクセスできるとは限りません。
マカッチ2009年

javaソースとバイトコードに逆コンパイルできるbytecodeviewer.comについては誰も言及していません(JavaソースはJADに基づいています)。
フェルナンドゴンザレスサンチェス

回答:


588

2016年2月の更新:

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

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

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

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

で述べたようにそしてjavadecompiler、サルバドールバレンシアでのコメント(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(さらに別のFast Java decompiler)には次の機能があります。

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

スクリーンショット

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

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


5
+1これもモジュール化されているため、コア(C ++で実装)を他の場所で活用できることは言及に値します。
クインテイラー、

1
jd-gui-0.3.3もこちらから
メイドの

1
Eclipse JunoにEclipse Javaデコンパイラープラグインをインストールし、EclipseがMarketplace DNDの初期化にハングアップし始めた場合、プロセス全体を強制終了させます。
LSerni 2013

4
@Rishiは、あらゆる言語やプラットフォームでIPを保護するのと同じように、優れた弁護士です。DRMは絆創膏にすぎません。
アンチモン2013年

1
.classファイルをクラウドにアップロードするSaaSを提供し、逆コンパイルされたコードを返します。単純なPOJOのために働いた。
サルバドールバレンシア

101

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

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

などなど。

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


2
:私はまた、プロキオン、CFR、JADとDJは、Webサービスとして利用可能であることを、追加することがjavadecompilers.com
アンドリューRukin

javadecompilers.com-命の恩人の仲間!
MarcoZen、2016

kpdus.com/jad.htmlはいくつかのADリンクです
marcinj

@marcinjに感謝します。それをダウンロードするためのリンクがある別のリンクを見つけました。
billjamesdev 2016年

51

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

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


5
積極的に開発されているので、代わりにオープンソースの逆コンパイラの1つをお勧めします。代わりに、CFRデコンパイラーであるProcyonまたはKrakatau(Python)を使用してください。
Janus Troelsen 2013

29

私はいくつか試してみましたが、プロキオンは私にとって最もうまく機能するようでした。現在開発が進んでおり、Javaの最新バージョンの多くの機能をサポートしています。

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

  • CFR
    • 有望ですが、しばしばメソッドの逆コンパイルに失敗しました。私はこれを見守っていきます。また、最新のJava機能をサポートして積極的に開発されています。
  • クラカタウ
    • 元のソースを再構築しようとするのではなく、同等のJavaコードを出力しようとするという点で別のアプローチをとります。私のテストから、それは大体Procyonと同等でしたが、それでも何か違うものを持っていて良かったです。-skipエラーで停止しないように、コマンドラインフラグを使用する必要がありました。活発に開発されており、興味深いことにPythonで書かれています。
  • JD-GUI
  • JAD
    • 動作しましたが、Java 1.4以下のみをサポートしています。Eclipseプラグインとしても利用できます。開発中です。

1
IGNORE_EXCEPTIONS事柄がコマンドラインフラグに変更されていることに注意してください-skip
アンチモン2014年



13

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

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

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


スートで具象クラスファイルを逆コンパイルする方法を知っていますか?それが可能かどうか
Janus Troelsen

12

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


11

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/


1
プロキオンは最高に機能します!!!!
MarcoZen、2016

10

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

DJ Decompiler Mocha


9

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


3
ここに行きます:私はあなたの答えへの答えを投稿しました;)JDK1.5以上がサポートされています!
VonC 2008年

「1.5以上のクラスを適切に処理するツールを見たことがありません」-Procion、Fernflower、JDCore、CFR(これはJava 8を処理します!)
Andrew Rukin


6

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

http://www.varaneckas.com/jad



5

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

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


4

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

最初に「ブランチ/ジェネリック」ブランチをチェックすることをお勧めします。トランクは安定していません。


1
JODOは散発的に維持され、CFRとProcyonは活発に開発されており、JDK 8をサポートしています。
Janus Troelsen 2013

4

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

ここに画像の説明を入力してください


@ NoOP's Are you a robot?または、レビュー対象に注意を払っていないだけですか?
naXa 2015年

申し訳ありませんが、一見するとリンクのみの回答のようです。多分あなたはより多くの詳細を追加するべきであり、またあなたの答えは質問のタイトルにのみ従うべきであり、質問の内容には従わない。
ashiquzzaman33

これは質問に対する答えを提供しません。批評したり、著者に説明を求める場合は、投稿の下にコメントを残してください。
Kristijan Iliev

@クリスは提案された解決策を試しましたか?質問読んだことがありますか?
-naXa

1
。NOOPさん失礼=あるために申し訳ありません(私は注意を払っていないのレビューの数で圧倒しています@
NAXA

1

AndroChef Javaの逆コンパイラあなたはAPK、DEX、jarファイルとJavaクラスファイルを逆コンパイルすることができます。シンプルで簡単です。AndroChef JDはFernFlowerに基づいています。10回の無料使用で評価できます。

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


1
@Dimitrius、レビュー中に回答を注意深くお読みください。ここにFernFlowerやAndroChefを含めることをどう思いますか?
naXa 2015年

1

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

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

ジャージラ:https ://code.google.com/p/jarzilla/
JD-GUI:http ://jd.benow.ca/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.