2011-01-29 28 views
11

我正在研究Dalvik字节码,但由于缺乏编译器背景,我发现它很难掌握设计。我很确定没有人写过一本关于Dalvik的书(或者我可能是错的),所以有人可以给我一个关于Java VM的参考,其中包含一些实际操作的示例?具体来说,我感兴趣的是:有关Dalvik或Java虚拟机的参考?

  • 了解如何解释生成的字节码
  • 使用VM规格(Dalvik的或Java)反编译字节码到中间表示,然后编译回来

总之,也许正是我期待的是要学会逆向工程字节码,这样我可以分析它的漏洞。有什么建议么?

+0

对于普通的Java`.class`文件有反编译器生成非常可读的java源代码。 – CodesInChaos 2011-01-29 20:56:09

回答

9

有关参考资料,没有什么比这个Dalvik文档。您可以在AOSP在Dalvik子项目找到这些,或者他们现在在http://s.android.com/tech/dalvik/index.html

Bytecode format(在Dalvik的项目或达尔维克bytecode.html)可在网上可能是一个你会最感兴趣。.Dex Format(DEX-format.html)也是有用的,因为是Instruction Formats(指令formats.html)

有关字节码的一些更一般的信息,请查看http://code.google.com/p/smali/wiki/Registershttp://code.google.com/p/smali/wiki/TypesMethodsAndFields

你肯定会想一些工具。我自然相当偏向smali/baksmali,这是目前唯一的汇编/反汇编器对。还有一个名为dedexer(但不包含汇编程序)的反汇编程序和dexdump,它与AOSP代码库一起提供,并提供dex文件的低级别转储 - 不仅包括字节码,还包括所有dex结构(baksmali具有类似的输出,带-D选项)。

您可能也有兴趣apktool,它使用smali/baksmali,但也有能力反转apk中的“编译”XML文件。

有一对夫妇的工具,有转换的Dalvik字节码回Java字节码,但我不认为他们是100%,但 - undxdex2jar

3

已经有反向工程.dex文件的工具来生成字节代码的人类可读表示。其中最受欢迎的是baksmali,你可以在这里找到:http://code.google.com/p/smali/

谷歌搜索可以很容易地找到字节代码本身的描述。这是第三个结果:http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html

如果你是逆向工程布局,你还需要一个binary-xml-to-xml转换器。有这么提到了一些工具做另一个堆栈溢出问题:Parse versionCode from android apk files