Android DEX(VMバイトコード)ファイルを対応するJavaソースコードに逆コンパイルするにはどうすればよいですか?
これらのツールを入手してください。
1) dex2jar dexファイルをjarファイルに変換する
2) jd-gui jar内のJavaファイルを表示する
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
注: Windowsマシンでは、すべての
.sh
スクリプトが.bat
スクリプトに置き換えられています。
JD-GUIでjarを開く
やや明確にするために、達成したいことに応じて、ここで取ることができる2つの主要なパスがあります。
Dalvikバイトコード(dex)を読み取り可能なJavaソースに逆コンパイルします。あなたが言及したように、あなたは dex2jar と jd-gui を使ってこれを簡単に行うことができます。結果として得られるソースは、アプリの機能を読んで理解するのに役立ちますが、100%使用可能なコードを生成することはおそらくないでしょう。言い換えれば、あなたはソースを読むことができますが、実際にそれを修正して再パッケージすることはできません。ソースがproguardで難読化されている場合、結果のソースコードは解読するのが実質的に困難になります。
もう1つの主な方法は、この目的のために設計されたアセンブリ言語である Smalli にバイトコードを逆アセンブルすることです。これを行う最も簡単な方法は apktool を使うことです。 apktoolをインストールした後は、apkファイルを指定するだけで、アプリケーションに含まれる各クラスのsmalliファイルが返されます。新しいJavaソースからsmaliを生成することで、Smalliを読んで変更したり、クラスを完全に置き換えたりすることができます(これを行うには、javacを使用して.Javaソースを.classファイルにコンパイルし、Androidの.classファイルを.dexファイルに変換します) この質問 で説明されているように、dxコンパイラを使用してから、baksmali(smali disassembler)を使用して.dexを.smaliファイルに変換します。ここにショートカットがある可能性があります)。完了したら、再びapkをapktoolで簡単にパッケージ化することができます。 apktoolは結果のapkに署名しないので、 他のAndroidアプリケーションと同じように の面倒を見る必要があります。
Smalliルートを利用するなら、 APK Studio 、an IDE を試してみるとよいでしょう。デバイス。
つまり、Javaにコンパイルすると読みやすくなりますが元に戻せない場合もありますし、Smalliに逆アセンブルするというよりも読みやすくなりますが、変更して変更したアプリケーションを柔軟に変更することができます。どのアプローチを選択するかは、達成しようとしているものによって異なります。
最後に、 dare の提案も注目に値します。 .dexファイルと.apkファイルをJavaの.classファイルに変換して、一般的なJavaの静的分析ツールを使用して分析できるようにするためのリターゲティングツールです。
私は実際にここに行くことをお勧めします: https://github.com/JesusFreke/smali
それはDEXファイルのための最も優れたリバースエンジニアリングツールであるBAKSMALIを提供します。これは、Android用の有名なROMを作成した、JesusFrekeによって作られました。
まず、DEX上の extract すべての(コンパイルされた)クラスをJARにするためのツールが必要です。
dex2jar という名前のものがあり、これは中国人の学生によって作られたものです。
そうすれば、 jd-gui to decompile を使ってJAR上のクラスをソースコードにすることができます。
結果のソースは、dex2jarがいくつかの最適化を適用するため、非常に読みやすくなります。
APKTool を使用できます。それは自動的にすべてのクラス(.dex
)、リソース(.asrc
)を抽出し、それからバイナリXMLを人間が読めるXMLに変換します。 逆アセンブル あなたのためのクラス。
逆アセンブルは逆コンパイルよりも常にロバストになります。特に with
JARはPro Guardで難読化されました。
APKToolにAPKをディレクトリにdecodeしてからmodifyしたいものを指定するだけです。
そして最後にエンコードそれをAPKに返します。それで全部です。
重要: APKTool 逆アセンブル 。 逆コンパイル ではありません。
生成されたコードはJavaのソースにはなりません。
しかし、 jasmin に慣れている場合は、それを読んで編集することもできます。
Javaのソースが欲しいなら、Manual wayに進んでください。
dex2jar
/apktool
を使用すると、特にループでコードが破損する場合があります。これを回避するには、 jadx を使用します。これは、.jar
/.class
ファイルをdex2jar
のように最初に作成せずに、dalvikバイトコードをJavaソースコードに逆コンパイルします。また、オープンソースであり、活発に開発されています。 GUIファンのためのGUIもあります。それを試してみてください!
誰もこれを述べなかったので、もう一つのツールがあります: DEDホームページ
ハウツーといくつかの説明をインストールしてください: インストール 。
トップマーケットのアプリのセキュリティに関する非常に興味深い研究で使用されました(興味がある場合は関係ありません): Androidアプリケーションセキュリティの調査
APKファイルをダウンロードしたら、編集可能なJavaコード/文書を取得するために次の手順を実行する必要があります。
Androidリバースエンジニアリングが可能です 。 apkファイルから.Javaファイルを取得するには、次の手順を実行します。
Step1。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
Apk + Decompileからclasses.dex
を抽出します。
$ androdd -i app.apk -o ./dir-for-output
Apkファイルは、Javaアーカイブ(JAR)以上のものではありません。アーカイブからファイルを抽出することができます。
$ unzip app.apk -d ./dir-for-output
これらの答えのほとんどが投稿されてから、多くのことが変わりました。今日では、GUIを使った簡単なツールがたくさんあります。
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
それらを見つけるのに最適な場所はXDA開発者フォーラムにあります。
あなたはJADX( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler )を試すかもしれません、これはDEX逆コンパイルのための完璧なツールです。
そして、はい、それはまた(my:0))新しいサイトでオンラインで利用可能です: http://www.javadecompilers.com/apk/
Androidアプリを逆コンパイルする最も簡単な方法は、playstoreから ShowJava という名前のアプリをダウンロードすることです。アプリケーションのリストから逆コンパイルする必要があるアプリケーションを選択するだけです。あなたがすなわちアプリを逆コンパイルするために使用できる3つの異なる逆コンパイラがあります -
CFR 0.110、JaDX 0.6.1、またはFernFlower(分析デコンパイラー)。
これは、次の5つのステップで実行できます。
この宝石はあなたのために必要なツールのインストールさえも自動的に行います
Dheeraj Bhaskar
の答えは何年も経つにつれて比較的古くなっています。
これが私の最新の(2019年)答えです:
dex
name__からJava sourcecode
まで、現在2種類の解決策があります。
One Step
:dex
name__を直接Java sourcecode
に変換するTwo Step
:最初にdex
name__をjar
name__に変換し、2番目のjar
name__をJava sourcecode
に変換しますdex
name__から直接Java sourcecode
へbin
name__フォルダーにコマンドラインjadx
name__またはGUIバージョンjadx-gui
を表示するには、ダブルクリックしてGUIバージョンを実行します。jadx-gui
dex
name__ファイルを開くその後、Javaのソースコードを表示することができます。
File
- > save as gradle project
それからJavaのソースコードを手に入れた:
dex
name__からjar
name__ダウンロード dex2jar Zip 、解凍してd2j-dex2jar.sh
、そして:
apk
name__からjar
name__:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
name__からjar
name__: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
name__からJava sourcecode
many
name__コードはエラーを逆コンパイルしますminor
name__コードはエラーを逆コンパイルしますno
name__コードの逆コンパイルエラーProcyon
nameに基づくGUIツール__ ここでデモ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
name__> Procyon
name__> CRF
name__> JD-GUI
使用をお勧めします:(ワンステップソリューション)Jadx
name__
より詳細な説明については、私のオンラインChinese ebookを参照してください。 安卓アプリケーション用安全和解
Dex2jarをダウンロードしたくない場合は、 apk_grabber
pythonスクリプト を使用して、apkをjarファイルに逆コンパイルしてください。それからあなたはjd-guiでそれらを読みました。