如何将 Android DEX(VM 字节码)文件反编译为相应的 Java 源代码?
原文由 Will 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何将 Android DEX(VM 字节码)文件反编译为相应的 Java 源代码?
原文由 Will 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了稍微澄清一下,根据您想要完成的任务,您可以在此处选择两条主要路径:
将 Dalvik 字节码 (dex) 反编译为可读的 Java 源代码。正如 fred 提到的,您可以使用 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,可以自动执行上述一些步骤,帮助你反编译和重新编译 apk 并将其安装到设备上。
简而言之,您的选择几乎要么反编译为 Java,后者可读性更强但可能不可逆,要么反汇编为 smali,这更难阅读但更灵活地进行更改和重新打包修改后的应用程序。您选择哪种方法取决于您希望实现的目标。
最后, dare 的建议也值得注意。它是一个重定向工具,将 .dex 和 .apk 文件转换为 java .class 文件,以便可以使用典型的 java 静态分析工具对其进行分析。
原文由 Zach Lipton 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
这很简单
获取这些工具:
dex2jar 将 dex 文件转换为 jar 文件
jd-gui 查看jar中的java文件
由于 dex2jar 做了一些优化,源代码非常可读。
程序:
下面是如何反编译的过程:
步骤1:
将test_apk-debug.apk中的classes.dex转换为test_apk-debug_dex2jar.jar
dex2jar 文档
第2步:
在 JD-GUI 中打开 jar