java - 引用 Dalvik 或 Java 虚拟机?

标签 java android security reverse-engineering bytecode

我目前正在研究 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/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

关于java - 引用 Dalvik 或 Java 虚拟机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4839371/

相关文章:

java - 查询多态 Hibernate 属性

java - 在 servlet 或托管 bean 处连接到数据库

Java 安全策略 : granting access depending on classloader

java.security.Provider.getService(String, String) Java 监视器被阻止

javascript - Chrome 不允许向允许的域发出 Ajax 请求

java - CodingBat sameEnds 处理字符串

javascript - 如何将 hashmap 值从 java 文件传递​​到 Javascript

android - 向 float 操作按钮添加菜单选项

android - 如何检测android中的颠倒方向?

java - 原生 Android 前台定位服务崩溃 Flutter 应用