我正在研究Dalvik字节码,但由于我缺乏编译器背景,我发现它有点难以掌握设计。我很确定没有人写过关于Dalvik的书(或者我可能是错的)所以有人可以建议我在Java VM上提供一些包含一些动手实例的参考吗?具体来说,我感兴趣的是:
简而言之,我正在寻找的可能是学习逆向工程字节码,以便我可以分析它的漏洞。有什么建议吗?
答案 0 :(得分:9)
对于参考资料,没有什么比dalvik文档更好。您可以在AOSP的dalvik子项目中找到这些,或者现在可以在http://s.android.com/tech/dalvik/index.html在线获取
Bytecode format(或dalvik项目中的dalvik-bytecode.html)可能是您最感兴趣的那个。.Dex Format(dex-format.html)也很有用,因为Instruction Formats(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选项。
您可能也对使用smali / baksmali的apktool感兴趣,但也可以反转apk中的“已编译”xml文件。
答案 1 :(得分:3)
已经有用于逆向工程.dex文件的工具,用于生成字节代码的人类可读表示。其中最受欢迎的是baksmali,你可以在这里找到:http://code.google.com/p/smali/。
Googling可以轻松找到字节码本身的描述。以下是第三个结果:http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html。
如果您是逆向工程布局,则还需要二进制xml-to-xml转换器。还有另一个堆栈溢出问题提到了一些工具:Parse versionCode from android apk files