JD-GUI を使用してJavaJARファイルを逆コンパイルしていますが、問題は自分で修正し、プログラムがまだ機能するかどうかを確認する必要がある重複変数など、多くのエラーが残ること(エラーを正しく修正した場合)。
Fernflowerも試しましたが、空白のままです。依存関係が欠落している場合はクラス。
どのデコンパイラーを知りたい:
- エラーの量を最小限に抑える
- 難読化を解除するほとんど。
コメント
- 興味がありますが、逆コンパイラーが提供すると期待する機能は何ですか。変数の名前を手動で変更する以外に、'実際にコードの難読化を解除する方法がわかりません。
回答
返信が遅れたことをお詫びします。
私は新しいオープンソースの Javaデコンパイラーに取り組んでいます。気軽にチェックしてください。
難読化されたコードに対してテストしたことはありませんが、JD-GUIが処理できなかった多くのメソッドを逆コンパイルするのを見てきました。 「作業中です。逆コンパイルに失敗するコードがたくさんあると思います。
コメント
- まず、彼の逆コンパイラーは、他の回答に見られるプロキオンです。第二に、私は通常、"これを行うライブラリを見てください!"と答えますが、ここでは間違いです。上記のリンク先のStrobel ' s readme はよく読む価値があります。それ自体はすばらしい答えだったでしょうが、おそらくSEには少し長すぎるでしょう。
- +10000これは本当にすばらしい作業であり、私が費やしたクラスを逆コンパイルしただけです。 JD-GUIが半分しか得られなかった後に再構築を試みる時間。
- 私は個人的に+1のコメントが嫌いですが、'それを言わなければなりません'そこに行く良いプロジェクトがあり、狭い場所で私を助けてくれました。続けてください!
- @Signusありがとうございます。'私の仕事がお役に立ててうれしいです:)
- @DavidGomesああ、 BitBucketはついにMercurialリポジトリを削除するという約束を果たしました。修正されました。
回答
古いエントリと不足しているエントリ
JAD 少し前、みんなの逆コンパイラー選択はjadでした。現在、プロジェクトは終了しています(さらに、オープンソースではありませんでした)が、それでも多くの人がプロジェクトを参照しています。
Java DeObfuscator fileoffset.comの古いツールでもありますが、多かれ少なかれ機能します。インターフェースは大規模なプロジェクトに使用するにはかなり扱いにくいですが、ツールはオープンソースです。
JODE JODE は、Java用の逆コンパイラーとオプティマイザーを含むJavaパッケージです。このパッケージはGNUGPLの下で無料で入手できます。しばらくの間更新されていません。
AndroChef Androidプログラムを逆コンパイルするための独自のツールとJavaファイル。こちらで入手できます。 DJデコンパイラーのように、代替案を考えるとお金の価値はありません。
キャンドル BradDavisによるオープンソースの逆コンパイラ。完全を期すために言及していますが、機能が完全であるとはほど遠いです。
最新のツール
JD-Gui おそらくJava逆コンパイルで最も広く使用されているツールの1つであり、使いやすく、クラスファイルまたはJARをすばやく開いて検査できるグラフィカルユーザーインターフェイスを提供するためです。 ここにあります。
FernFlower 非常に新しく有望な分析Javaデコンパイラー(IntelliJ 14の不可欠な部分になります)。
これはコマンドラインツールです。これは、Unicodeパラメータをフルネームで表示できます。
ここからダウンロードします。これはコマンドラインツールです。これは、Unicodeパラメータをフルネームで表示できます。
これもIntelliJにデフォルトですでに統合されていることに注意してください。
CFR
無料のオープンソース。これは、最新のJava機能を逆コンパイルすることを目的としています。 、Java 12スイッチ式、Java 8ラムダ(Javaベータ103の変更前後)、Java 7文字列スイッチなどが含まれますが、それ自体はJava6で記述されています。
コマンドラインツールでもあります。これはさらに優れた仕事をし、わずかに高速です。
Procyon
オープンソースであり、Java 8の機能(ラムダ、::演算子)の処理も目的としています。実行するにはJava7が必要です。
Krakatau Krakatau は、Pythonで記述されているため、興味深いものです。現在、Javaクラスファイル用の逆コンパイラと逆アセンブラ、およびクラスファイルを作成するためのアセンブラの3つのツールが含まれています。
Java8の機能はまだサポートされていません。
Soot
Sootは、JavaおよびAndroidアプリケーションを分析および変換するためのフレームワークであり、元々はMcGill大学のSable ResearchGroupによって開発されました。中間バイトコード言語も定義するため、逆コンパイラとして「単に」使用されることはあまりありません。
Recaf
直感的に使用できるようにすることを目的とした、Javaバイトコードエディタおよびリバースエンジニアリングツール。複数の逆コンパイラ(CFR、FernFlower、Procyon)を介して、またはテーブルレイアウトでバイトコードを提示し、標準の逆コンパイラでは解読できないクラス要素を表示できるようにします。 Recafは、状況依存のメニューを使用してクラス、メソッド、フィールドを操作し、ユーザーがユースケースの検索、アイテムの名前変更、逆アセンブル形式での定義の編集を行えるようにします。
jar、wars、classes、実行中のJavaプロセスからクラスを抽出します。
完全にJavaで記述されており、完全にオープンソースです。
Konlochのバイトコードビューア
高度な軽量Javaバイトコードビューア、GUI Javaデコンパイラ、GUIバイトコードエディタ、GUI Smali、GUI Baksmali、GUI APKエディター、GUI Dexエディター、GUI APKデコンパイラー、GUI DEXデコンパイラー、GUI Procyon Javaデコンパイラー、GUI Krakatau、GUI CFR Javaデコンパイラー、GUI FernFlower Javaデコンパイラー、GUI DEX2Jar、GUI Jar2DEX、GUI Jar-Jar、 Hex Viewer、Code Searcher、Debuggerなど。
完全にJavaで記述されており、オープンソースです。
逆コンパイルにFernFlower、Procyon、CFRを使用し、これを最先端の逆コンパイラーを使用した素晴らしいビジュアルツール:
Enigma
元々はMinecraftバージョンの難読化解除に使用されていました。内部でProcyonを使用します。
最新のフォークはここにあります
楽しいですJavaの逆コンパイラーと難読化解除ツールへの多大な努力は、Javaで実装された最も人気のあるゲームの1つであるMinecraft周辺の改造シーンの結果であることに注意してください。
出典: http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html
コメント
- この回答更新が必要な場合があります。 JD-Guiは2019年3月の時点で活発に開発されているようです。 java-decompiler.github.io
- java7がいくつかあります'がいくつかの側面を書き込もうとしているコード。組み込みのintellijデコンパイラーの変数名が正しくない場合があり、コードのブロックが省略される可能性があります。 JD-Guiはこれらのブロックを表示し、より正確な変数名のように見えるものも表示します。また、JD-Guiの古いバージョンと新しいバージョンの違いを並べて示しています。 '深刻な逆転をしている場合は'一見の価値があります。
回答
これらのどれが最適かはわかりませんが、この SOの質問。これらの逆コンパイラーはいずれも、難読化を積極的に処理しようとはしていないようですが、これらのプロジェクトの多くは放棄されています。
Krakatau ですが、探しているものに役立つようです。
- readmeから:「Krakatauデコンパイラーは、ほとんどのJavaデコンパイラ。これは、入力言語がJavaバイトコードであり、ターゲット言語がたまたまJavaソースコードであるコンパイラと考えることができます。 Krakatauは任意のバイトコードを取り込み、それを同等のJavaコードに変換しようとします。これにより、マイナーな難読化に対して堅牢になりますが、「元の」ソースを再構築しないという欠点があり、パターンマッチング逆コンパイラーが難読化されていないJavaクラスに対して生成するよりも読みにくい出力になります。」
- これはオープンです。ソースであり、(この記事の執筆時点で)積極的に維持されているようです。
コメント
- これは、実際には逆アセンブラーの出力です。デコンパイラーはJava出力に逆コンパイルします。(PS私は'開発者です)
- JD-GUIは現時点で最高のJava逆コンパイラーの1つですが、上の難読化解除ツールと組み合わせて使用する必要があります。コードを逆コンパイルする前のバイトコード。私が知っているJavaの最高の逆コンパイラーは、 rune-server.org または moparscape.org/のいずれかです。 smf または moparisthebest.org/smf は、完全にJavaで記述され、非常に難読化されたRunescapeGameのコミュニティをハッキングしています。
回答
バイトコードビューアを見てみてください https://github.com/Konloch/bytecode-viewer 5つの異なる逆コンパイラを使用して逆コンパイルするオプションがあります。
- FernFlower
- Procyon
- CFR
- クラカタウ
- JD-GUI
コメント
- これは本当に良い提案でした-おかげで、単にシダの花のcliを使用するよりもはるかに優れています!
回答
まず、修正がありますクラスが欠落しているFernflowerの問題についてはこちら。これについてはagaricusbに感謝します。
今のところ、Fernflowerは過去数年間維持されていなくても最高のJava逆コンパイラーのままです。私は最近作者に連絡しようとしましたが、それでも運がありません。
AndroChef Java Decompilerに関しては、作者の許可を得てエンジンとしてFernflowerを使用しています。パッチ/変更を使用しているかどうかはまだわかりませんバージョンまたはそれは単なるGUIです。
@ mike-strobelによって開発されたProcyon逆コンパイラは優れているようですが、Fernflowerは依然として大きな利点があり、アプリケーションの約95%(〜3000)を逆コンパイルできました。クラス)procyonは60%しか処理できませんでした(2014年1月にチェック済み)。
コメント
- アプリケーションは" native " Javaですか、それともAndroid形式から変換されましたか?前者の場合、私はあなたのバイナリを手に入れて、プロキオンがファーンフラワーと比較してどこで故障するかを確認することに非常に興味があります。
- @MikeStrobel It ' s "ネイティブ" Javaアプリケーション。 'は内部使用のみなので、'とにかく共有することはできません。
- ドロップする可能性がありますあなたが遭遇した問題の種類を説明するメールを私に送ってください。私は常にプロキオンがどのように改善されるかを聞きたいと思っています。私の連絡先情報は、プロジェクトの'のBitBucketサイトにあります。
- @MikeStrobel関心をお寄せいただきありがとうございます。 '拡張情報とサンプルクラスを提供しようとしますが、約束はありません。
回答
私は https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine を使用しています。これはIntelliJの逆コンパイラです。 JD-GUIが失敗したコードを逆コンパイルします。
ダウンロードする非公式ミラー: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/
回答
お勧めします AndroChef Java Decompiler AndroChef Java Decompilerは、難読化されたJava6およびJava7の.classファイルと.jarファイルを正常に逆コンパイルします。
コメント
- ANDROCHEFに注意してください! AndroChefは、放棄されたシダの花逆コンパイラのラッパーにすぎません。'それでお金を無駄にしないでください!