我目前正在研究 Dalvik 字节码,但由于我缺乏编译器背景,我发现它的设计有点难以掌握。我很确定没有人写过关于 Dalvik 的书(或者我可能是错的),所以有人可以建议我引用 Java VM,其中包含一些实践示例吗?具体来说,我感兴趣的是:
- 了解如何解释生成的字节码
- 使用 VM 规范(Dalvik 或 Java)将字节码反编译为中间表示,然后再编译回来
简而言之,我正在寻找的可能是学习逆向工程字节码,以便我可以分析它的漏洞。有什么建议吗?
最佳答案
对于引用资料,没有比 dalvik 文档更好的了。您可以在 AOSP 的 dalvik 子项目中找到它们,或者现在可以在 http://s.android.com/tech/dalvik/index.html 在线获得它们。
Bytecode format (或 dalvik 项目中的 dalvik-bytecode.html)可能是您最感兴趣的。.Dex Format (dex-format.html) 也很有用,因为 Instruction Formats (指令格式.html)
有关字节码的更多一般信息,请查看 http://code.google.com/p/smali/wiki/Registers和 http://code.google.com/p/smali/wiki/TypesMethodsAndFields
您肯定需要一些工具。我自然很偏爱smali/baksmali ,这是目前唯一可用的汇编器/反汇编器对。还有一个名为 dedexer 的反汇编程序(但没有汇编程序)和 dexdump,它随 AOSP 代码库一起提供,并提供 dex 文件的低级转储 - 不仅是字节码,还有所有 dex 结构(baksmali 具有类似的输出,带有 -D 选项) .
您可能还对 apktool 感兴趣,它使用 smali/baksmali,但也有能力在 apk 中反转“已编译”的 xml 文件。
有一些工具可以将 dalvik 字节码转换回 java 字节码,但我认为它们还不是 100% - undx和 dex2jar
关于java - 引用 Dalvik 或 Java 虚拟机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4839371/