Android DEX(VMバイトコード)ファイルを対応するJavaソースコードに逆コンパイルするにはどうすればよいですか?
Android DEX(VMバイトコード)ファイルを対応するJavaソースコードに逆コンパイルするにはどうすればよいですか?
回答:
これらのツールを入手してください:
1)dexファイルをjarファイルに変換するdex2jar
2)jar内のJavaファイルを表示するためのjd-gui
dex2jarがいくつかの最適化を行うため、ソースコードは非常に読みやすくなっています。
そして、これは逆コンパイルする方法の手順です:
test_apk-debug.apkのclasses.dexをtest_apk-debug_dex2jar.jarに変換します
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
注1: Windowsマシンでは、すべての
.sh
スクリプトが置き換えられている.bat
スクリプト注2: linux / macでは、
sh
またはを忘れないでくださいbash
。完全なコマンドは次のようになります。
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
注3:また、
dex2jar-X.X
ディレクトリに実行権限を追加することを忘れないでください。sudo chmod -R +x dex2jar-2.0
JD-GUIでjarを開きます
多少明確にするために、達成したいことに応じて、次の2つの主要な方法があります。
Dalvikバイトコード(dex)を読み取り可能なJavaソースに逆コンパイルします。fredが言及しているように、これはdex2jarとjd-guiで簡単に実行できます。結果のソースは、アプリの機能を読んで理解するのに役立ちますが、100%使用可能なコードは生成されない可能性があります。つまり、ソースを読み取ることはできますが、実際にソースを変更して再パッケージ化することはできません。ソースがproguardで難読化されている場合、結果のソースコードのもつれを解くのがかなり困難になることに注意してください。
他の主要な代替手段は、バイトコードをsmaliに逆アセンブルすることです。これは、まさにこの目的のために設計されたアセンブリ言語です。これを行う最も簡単な方法はapktoolを使用することです。apktoolをインストールしたら、apkファイルをポイントするだけで、アプリケーションに含まれる各クラスのsmaliファイルが返されます。新しいJavaソースからsmaliを生成することにより、smaliを読み取って変更したり、クラスを完全に置き換えることもできます(これを行うには、javacを使用して.javaソースを.classファイルにコンパイルし、Androidで.classファイルを.dexファイルに変換します。この質問で説明されているように、dxコンパイラー、次にbaksmali(smali逆アセンブラー)を使用して.dexを.smaliファイルに変換します。ここにショートカットがあるかもしれません)。完了したら、apktoolを使用してapkを簡単にパッケージ化できます。apktoolは結果のapkに署名しないため、他のAndroidアプリケーションと同じように処理する必要があることに注意してください。
smaliルートを使用する場合、APKの逆コンパイルと再コンパイル、およびデバイスへのインストールを支援するために上記の手順の一部を自動化するIDEであるAPK Studioを試してみるとよいでしょう。
要するに、あなたの選択は、より読みやすくはあるが不可逆的である可能性が高いJavaに逆コンパイルするか、変更が容易で、変更されたアプリを再パッケージ化するのがはるかに柔軟であるsmaliに逆アセンブルするかのどちらかです。どのアプローチを選択するかは、達成しようとしていることに依存します。
最後に、あえての提案も注目に値します。これは、.dexファイルと.apkファイルをjava .classファイルに変換するためのリターゲッティングツールであり、一般的なjava静的分析ツールを使用して分析できます。
私は実際にここに行くことをお勧めします:https : //github.com/JesusFreke/smali
DEXファイル用の最も優れたリバースエンジニアリングツールであるBAKSMALIを提供します。Android用の有名なROMを作成した人、JesusFrekeによって作成されました。
まず、DEX上のすべての(コンパイルされた)クラスをJAR に抽出するツールが必要です。dex2jar
と呼ばれるものがあります中国の学生が作ったます。
次に、jd-guiを使用して、JARのクラスをソースコードに逆コンパイルできます。
dex2jarはいくつかの最適化を適用するため、結果のソースは非常に読みやすいはずです。
APKToolを使用できます。すべてのクラス()、リソース()を自動的に抽出し、バイナリXMLを人間が読めるXMLに 変換し、クラスを逆アセンブルします。分解常に、逆コンパイルよりも堅牢になり、特にで
プロガードと難読化のJAR!.dex
.asrc
APKToolにAPKをディレクトリにデコードし、必要なものを変更し
、最後にエンコードしてAPKに戻すように指示するだけです。それで全部です。
重要: APKToolは逆アセンブルします。逆コンパイルはしません。
生成されたコードはJavaソースにはなりません。
しかし、それを読んだり、jasminに慣れていれば編集したりできるはずです。
Javaソースが必要な場合は、手動の方法を参照してください。
dex2jar
/ を使用するとapktool
、特にループ内でコードが壊れることがあります。この、使用しないようにするにjadx作成することなく、Javaのソースコードに逆コンパイルのDalvikバイトコードを、.jar
/の.class
ように最初のファイルをdex2jar
(apktoolの用途は、私が考えてdex2jar)ん。また、オープンソースであり、活発に開発されています。GUI狂信者のために、GUIさえ備えています。それを試してみてください!
javac "$(find . -name '*.java')"
?
利用した
しかし、Google独自のツールに勝るものはありません
以来Dheeraj Bhaskar
の答えは、過去何年もの間などの比較的古いです。
これが私の最新(2019年)の回答です。
からdex
までjava sourcecode
、現在2種類のソリューションがあります。
One Step
:直接変換dex
するjava sourcecode
Two Step
:最初の変換dex
にjar
、第二変換jar
しますjava sourcecode
dex
直接java sourcecode
bin
ます。フォルダにコマンドラインjadx
またはGUIバージョンが表示されます。GUIバージョンjadx-gui
を実行するにはダブルクリックします。jadx-gui
dex
ファイルを開く次に、Javaソースコードを表示できます。
File
-> save as gradle project
その後、Javaソースコードを取得しました:
dex
へjar
dex2jar zipをダウンロードし、展開してからd2j-dex2jar.sh
、
apk
へjar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
へjar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
例:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
jar
にjava sourcecode
many
ますが、コードは逆コンパイルエラーになりますminor
コードはエラーを逆コンパイルしますno
コード逆コンパイルエラー
Procyon
こちらのデモ Procyon
jarをjavaソースコードに変換します。
procyon-decompiler-0.5.34.jarをダウンロード
次に構文を使用します:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
例:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
エディタVSCodeを使用して、エクスポートされたソースコードを開くと、次のようになります。
変換正し:Jadx
> Procyon
> CRF
>JD-GUI
使用をお勧めします:(ワンステップソリューション) Jadx
詳細な説明については、私のオンライン中国語電子ブックを参照してください:安卓应用的安全和破解
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
例外が発生します。java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
ませんか?大丈夫ですか?
>d2j-dex2jar.bat file.dex
が、大丈夫ではありません。多分それ.dex
は私のファイルがからコピーされたためdalvik-cache
ですか?
dex is copied from dalvik-cache
であるはずですdex is decompiled from apk
APKファイルをダウンロードしたら、編集可能なJavaコード/ドキュメントを取得するために次の手順を実行する必要があります。
Androidリバースエンジニアリングが可能 です。次の手順に従って、apkファイルから.javaファイルを取得します。
ステップ1 。dex2jarの使用
dex2jar sampleApp.apk
ステップ2 。JD-GUIを使用した.jarの逆コンパイル
最近のDebianにはPythonパッケージがありますandroguard
:
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
対応するパッケージをインストールします。
sudo apt-get install androguard python-networkx
DEXファイルを逆コンパイルします。
$ androdd -i classes.dex -o ./dir-for-output
classes.dex
APK +逆コンパイルから抽出:
$ androdd -i app.apk -o ./dir-for-output
ApkファイルはJavaアーカイブ(JAR)にすぎません。次の方法でアーカイブからファイルを抽出できます。
$ unzip app.apk -d ./dir-for-output
JADX(https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler)を試してみてください。これはDEX逆コンパイルに最適なツールです。
そして、はい、(my:0))の新しいサイト(http://www.javadecompilers.com/apk/)からオンラインで入手することもできます。
これは、次の5つのステップで実行できます。
このgemは、必要なツールのインストールでさえこれらのことを自動的に行います
dex2jarをダウンロードしたくない場合は、apk_grabber
pythonスクリプトを使用してapkをjarファイルに逆コンパイルします。次に、jd-guiを使用してそれらを読み取ります。