将DEX反编译成Java源代码

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


这很容易

获取这些工具:

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

注意:在Windows机器中,所有.sh脚本都被替换为.bat脚本

dex2jar文档

第2步:

在JD-GUI中打开jar

反编译的源代码


澄清一点,根据你想要完成的事情,你可能会采取两种主要的途径:

将Dalvik字节码(dex)反编译为可读的Java源代码。 正如弗雷德提到的那样,你可以用dex2jar和jd-gui轻松做到这一点。 生成的源代码可用于阅读和理解应用程序的功能,但很可能不会生成100%可用的代码。 换句话说,你可以阅读源代码,但是你不能真正修改和重新打包它。 请注意,如果源代码已被proguard混淆,则生成的源代码将更难以解决。

另一个主要的替代方案是将字节码反汇编为smali,这是一个专为此目的而设计的汇编语言。 我发现最简单的方法是使用apktool。 一旦你安装了apktool,你可以将它指向一个apk文件,并且你会为应用程序中包含的每个类取回一个smali文件。 您可以阅读和修改smali,甚至可以通过从新的Java源代码生成smali来完全替换类(为此,您可以使用javac将.java源代码编译为.class文件,然后使用Android的代码将.class文件转换为.dex文件。 dx编译器,然后使用baksmali(smali反汇编程序)将.dex转换为.smali文件,如此问题中所述。这里可能有一个快捷方式)。 一旦你完成了,你可以很容易地使用apktool重新打包apk。 请注意,apktool不会签署生成的apk,因此您需要像处理其他任何Android应用程序一样来处理。

如果你使用smali路线,你可能想试试APK Studio,一个可以自动执行上述步骤的IDE Studio,以帮助你反编译和重新编译apk并将其安装到设备上。

简而言之,您的选择几乎或者是反编译为Java,它更易读,但可能不可逆,或者反汇编为smali,这很难阅读,但更灵活地对修改后的应用程序进行更改和重新打包。 你选择哪种方法取决于你想要达到的目标。

最后,敢于提出的建议也值得注意。 这是一个将.dex和.apk文件转换为java .class文件的重定向工具,以便可以使用典型的Java静态分析工具对它们进行分析。


我实际上建议去这里:https://github.com/JesusFreke/smali

它提供了BAKSMALI,它是DEX文件最优秀的反向工程工具。 它是由JesusFreke制作的,这个人为Android创造了流行的ROM。

链接地址: http://www.djcxy.com/p/86559.html

上一篇: decompiling DEX into Java sourcecode

下一篇: Why doesn't the JVM cache JIT compiled code?