如何将Android DEX (VM bytecode)文件反编译成相应的Java源码?
发布于 2010-11-14 21:02:54
很简单
获取这些工具:
用于将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.X
目录添加执行权限,例如sudo chmod -R +x dex2jar-2.0
dex2jar documentation
第2步:
在JD-GUI中打开jar
发布于 2011-11-05 07:40:46
为了澄清一下,这里有两条主要路径,具体取决于您想要完成的任务:
将Dalvik字节码(dex)反编译成可读的Java源代码。您可以使用dex2jar和jd-gui轻松做到这一点,就像弗雷德提到的那样。由此产生的源代码对于阅读和理解应用程序的功能很有用,但可能不会产生100%可用的代码。换句话说,您可以阅读源代码,但不能真正修改和重新打包它。请注意,如果源代码已经使用proguard进行了混淆,那么所得到的源代码将更加难以解开。
另一种主要的替代方法是将字节码反汇编为smali,这是一种专门为此目的而设计的汇编语言。我发现最简单的方法是使用apktool。一旦你安装了apktool,你只需要将它指向一个apk文件,你就会得到应用程序中包含的每个类的一个smali文件。您可以通过从新的Java源生成smali来读取和修改smali,甚至完全替换类(为此,您可以使用javac将您的.java源代码编译为.class文件,然后使用Android的dx编译器将.class文件转换为.dex文件,然后使用baksmali (smali反汇编程序)将.dex转换为.smali文件,如this question中所述。这里可能有一条捷径)。一旦你完成了,你可以很容易的用apktool重新打包apk。请注意,apktool不会对生成的apk进行签名,因此您需要处理该just like any other Android application。
如果你走的是smali路线,你可能想试试APK Studio,它可以自动执行上面的一些步骤,帮助你反编译和重新编译apk,并将其安装在设备上。
简而言之,你的选择很大程度上要么是反编译成Java,它更具可读性,但可能是不可逆的;要么是反汇编成smali,它更难阅读,但更灵活地进行更改和重新打包修改后的应用程序。您选择哪种方法将取决于您希望实现的目标。
最后,dare的建议也值得注意。它是一个重定目标工具,可以将.dex和.apk文件转换为java .class文件,这样它们就可以使用典型的java静态分析工具进行分析。
发布于 2009-08-09 10:48:17
实际上,我推荐在这里使用:https://github.com/JesusFreke/smali
它提供了BAKSMALI,这是一个非常优秀的DEX文件逆向工程工具。它是由JesusFreke制作的,他为安卓创造了著名的ROM。
https://stackoverflow.com/questions/1249973
复制相似问题