2011-01-29 32 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