web-dev-qa-db-ja.com

dEXをJavaソースコードに逆コンパイルする

Android DEX(VMバイトコード)ファイルを対応するJavaソースコードに逆コンパイルするにはどうすればよいですか?

677
Will

それは簡単です

これらのツールを入手してください。

1) dex2jar dexファイルをjarファイルに変換する

2) jd-gui jar内のJavaファイルを表示する

Dex2jarが最適化を行うので、ソースコードは非常に読みやすくなっています。

手順:

そして、これはどのように逆コンパイルするかの手順です:

ステップ1:

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スクリプトに置き換えられています。

dex2jarドキュメント

ステップ2:

JD-GUIでjarを開く

The decompiled source

848
fred

やや明確にするために、達成したいことに応じて、ここで取ることができる2つの主要なパスがあります。

Dalvikバイトコード(dex)を読み取り可能なJavaソースに逆コンパイルします。あなたが言及したように、あなたは dex2jarjd-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の静的分析ツールを使用して分析できるようにするためのリターゲティングツールです。

127
Zach Lipton

私は実際にここに行くことをお勧めします: https://github.com/JesusFreke/smali

それはDEXファイルのための最も優れたリバースエンジニアリングツールであるBAKSMALIを提供します。これは、Android用の有名なROMを作成した、JesusFrekeによって作られました。

60
reflog

fredanswer のより完全なバージョン。

手動による方法

まず、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に進んでください。

28
Alba Mendez

dex2jar/apktoolを使用すると、特にループでコードが破損する場合があります。これを回避するには、 jadx を使用します。これは、.jar/.classファイルをdex2jarのように最初に作成せずに、dalvikバイトコードをJavaソースコードに逆コンパイルします。また、オープンソースであり、活発に開発されています。 GUIファンのためのGUIもあります。それを試してみてください!

24
polym

誰もこれを述べなかったので、もう一つのツールがあります: DEDホームページ

ハウツーといくつかの説明をインストールしてください: インストール

トップマーケットのアプリのセキュリティに関する非常に興味深い研究で使用されました(興味がある場合は関係ありません): Androidアプリケーションセキュリティの調査

15
phaethon

APKファイルをダウンロードしたら、編集可能なJavaコード/文書を取得するために次の手順を実行する必要があります。

  1. 次のようにすることで、あなたのapkファイルをZipに変換します(ダウンロードを開始する間は、「保存」オプションを付けずに「名前を付けて保存」をクリックし、拡張子に.Zipを付けてください)。
  2. Zipファイルを解凍すると、somefilename.dexが見つかります。だから今我々はdex - > .classを変換する必要がある
  3. そのためには、 "dex2jar"が必要です( http://code.google.com/p/dex2jar/ からダウンロードできます。抽出後、[コマンドプロンプト]で、以下のように記述する必要があります、[D:\ dex2jar-0.09> dex2jar somefilename.dex](somefilename.dexは、dex2jarと同じフォルダ内になければならないことに注意してください。)
  4. http://www.viralpatel.net/blogs/download/jad/jad.Zip からjadをダウンロードして解凍します。解凍すると、 "jad.exe"と "Readme.txt"のような2つのファイルが表示されます( "jad.exe"の代わりに "jad.txt"が表示される場合があるため、拡張子をas.exeに変更して実行します)。
  5. 最後に、Promptコマンドで[D:¥jad> jad -sjava yourfilename.class]のようにクラスファイルを編集可能なJava文書に解析します。
13
Kamal

利用した

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. 総括
  4. Apktool

しかし、Google独自のツールに勝るものはない

1) Android Studio 2.x: build>分析apk enter image description here

2) アンドロイドスタジオ3.0: プロファイルまたはデバッグAPK enter image description here enter image description here

13
ishandutta2007

Androidリバースエンジニアリングが可能です 。 apkファイルから.Javaファイルを取得するには、次の手順を実行します。

Step1。dex2jarを使う

  • .apkファイルから.jarファイルを生成する
  • コマンド:dex2jar sampleApp.apk

ステップ2. JD-GUIを使用して.jarを逆コンパイルする

  • つまり、.classファイルを逆コンパイルします。つまり、apkから難読化 .Javaが返されます。
8
gtiwari333

Dedexer を使用すると、.dexファイルをdalvikバイトコード(.ddx)に逆アセンブルできます。

私の知る限り、Javaへの逆コンパイルは不可能です。
dalvik bytecode ここ について読むことができます。

8
hcpl

最近の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
6
gavenkoa

これらの答えのほとんどが投稿されてから、多くのことが変わりました。今日では、GUIを使った簡単なツールがたくさんあります。

APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit

それらを見つけるのに最適な場所はXDA開発者フォーラムにあります。

5
MPaulo

あなたはJADX( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler )を試すかもしれません、これはDEX逆コンパイルのための完璧なツールです。

そして、はい、それはまた(my:0))新しいサイトでオンラインで利用可能です: http://www.javadecompilers.com/apk/

3
Andrew Rukin

Androidアプリを逆コンパイルする最も簡単な方法は、playstoreから ShowJava という名前のアプリをダウンロードすることです。アプリケーションのリストから逆コンパイルする必要があるアプリケーションを選択するだけです。あなたがすなわちアプリを逆コンパイルするために使用できる3つの異なる逆コンパイラがあります -

CFR 0.110、JaDX 0.6.1、またはFernFlower(分析デコンパイラー)。

2
Rishabh Maurya

これは、次の5つのステップで実行できます。

この宝石はあなたのために必要なツールのインストールさえも自動的に行います

  1. apkファイルをZipに変換
  2. ファイルを解凍する
  3. それからclasses.dexを抽出します
  4. dexをjarに使用してclasses.dexをjarファイルに変換する
  5. jadx guiを使ってjarファイルをJavaソースコードとして開く
2
Ajit Singh

Dheeraj Bhaskarの答えは何年も経つにつれて比較的古くなっています。

これが私の最新の(2019年)答えです:

メインロジック

dexname__からJava sourcecodeまで、現在2種類の解決策があります。

  • One Stepdexname__を直接Java sourcecodeに変換する
  • Two Step:最初にdexname__をjarname__に変換し、2番目のjarname__をJava sourcecodeに変換します

ワンステップソリューション:dexname__から直接Java sourcecode

道具

プロセス

  1. ダウンロード jadx-0.9.0.Zip 、解凍して、binname__フォルダーにコマンドラインjadxname__またはGUIバージョンjadx-guiを表示するには、ダブルクリックしてGUIバージョンを実行します。jadx-gui

  1. dexname__ファイルを開く

その後、Javaのソースコードを表示することができます。

  1. File - > save as gradle project

それからJavaのソースコードを手に入れた:


ツーステップソリューション

ステップ1:dexname__からjarname__

道具

プロセス

ダウンロード dex2jar Zip 、解凍してd2j-dex2jar.sh、そして:

  • apkname__からjarname__:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
  • dexname__からjarname__: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

ステップ2:jarname__からJava sourcecode

道具

プロセス

ここでデモProcyonjarを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 を使用してエクスポートされたソースコードを開くには、次のようにします。

結論

変換の正確性:Jadxname__> Procyonname__> CRFname__> JD-GUI

使用をお勧めします:(ワンステップソリューション)Jadxname__


より詳細な説明については、私のオンラインChinese ebookを参照してください。 安卓アプリケーション用安全和解

2
crifan

Dex2jarをダウンロードしたくない場合は、 apk_grabber pythonスクリプト を使用して、apkをjarファイルに逆コンパイルしてください。それからあなたはjd-guiでそれらを読みました。

1
Jeff Brateman