如何将Android DEX(虚拟机字节码)文件反编译成相应的Java源代码?


当前回答

Android逆向工程是可能的 . 按照以下步骤从apk文件中获取.java文件。

步骤1。使用dex2jar

从。apk文件生成。jar文件 命令:dex2jar sampleApp.apk

步骤2。使用JD-GUI反编译.jar

它会反编译。class文件,也就是说,我们会从apk中得到模糊的。java文件。

其他回答

Android逆向工程是可能的 . 按照以下步骤从apk文件中获取.java文件。

步骤1。使用dex2jar

从。apk文件生成。jar文件 命令:dex2jar sampleApp.apk

步骤2。使用JD-GUI反编译.jar

它会反编译。class文件,也就是说,我们会从apk中得到模糊的。java文件。

很容易

获取这些工具:

Dex2jar将dex文件转换为jar文件 以查看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

注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添加执行权限。例如sudo chmod -R + X dex2jar-2.0

dex2jar文档

步骤2:

在JD-GUI中打开罐子

自从这些答案被发布以来,很多事情都发生了变化。现在有很多简单的GUI工具,比如:

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

找到他们最好的地方是在XDA开发者论坛上。

反编译android应用程序最简单的方法是从playstore下载一个名为ShowJava的应用程序。只需从应用程序列表中选择需要反编译的应用程序。你可以使用三种不同的反编译器来反编译应用程序,即-

CFR 0.110, JaDX 0.6.1或FernFlower(分析反编译器)。

最近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 +反编译中提取classes.dex:

$ androdd -i app.apk -o ./dir-for-output

Apk文件就是Java的JAR文件,你可以通过以下方法从JAR文件中提取文件:

$ unzip app.apk -d ./dir-for-output