我知道Java,也学过C,但从未使用过。我不知道任何形式的组装,无论是虚拟机还是真实的。
学习如何破解 Smali 的最佳方法是什么?
更新:正如我昨天承诺的那样,我在列表中添加了更多链接。
乌夫。周围没有太多文档!最好的建议?反编译、阅读、调整,看看它是怎么做的,然后一次又一次地开始循环。但你没有征求那个建议,对吧?;)
现在,有几个地方会有所帮助:
http://androidcracking.blogspot.com/search/label/smali 这是最好的。我什至问了那个人一个问题,他回答得很快,所以去看看。
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html 非常全面的表格-很好的参考!
http://webchat.freenode.net/?channels=smali 我从未尝试过,但它在 baksmali 作者的 google 代码页上(http://code.google.com/p/smali/)
http://forum.xda-developers.com/showthread.php?t=777707 最后,这是我前段时间发表的一篇文章,描述了对 Captivate 相机的一些黑客攻击。当我对每个 .diff 文件的作用进行一些评论时,您可以关注其中的差异。好东西从帖子#20开始。
http://www.slideshare.net/paller/understanding-the-dalvik-bytecode-with-the-dedexer-tool 带有一些基本概念的有趣幻灯片。开始的好方法。
http://sites.google.com/site/haynesmathew/home/projects/dalvik-notes 比典型的 .smali 还要低级。供以后参考,但很好读。
http://jasmin.sourceforge.net/guide.html Smali 语法基于 Jasmin,因此提供了很好的概念。
http://groups.google.com/group/apktool?pli=1 那里的一些讨论值得一读。当您陷入困境时,这也是一个搜索的好地方。
最后但并非最不重要的是,我使用的最有用的技巧:开始用 Java 编写非常基本的类和方法,编译它们,然后 baksmali 编写你自己的代码。你确切地知道它的作用,所以它会更容易理解。
祝你好运!
我仍然对人们不使用官方的 Dalvik 格式文档作为主要参考感到惊讶。在旧版本中,Dalvik 文档位于 dalvik/docs 下的 Android 源代码中。您要查看的特定文件称为 dalvik-bytecode.html。一些版本返回字节码定义成为 android.com 开发者文档的一部分:
source.android.com 上的 dalvik-bytecode.html
为了方便起见,我偶尔会在我的个人网站上镜像这些文档。在这种情况下:
我在 smali 网站上有几个 wiki 页面,其中包含一些信息:
https://github.com/JesusFreke/smali/wiki/Registers
https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields
还有一些 smali 代码示例,它们在 smali/baksmali 的集成测试中使用每个操作码: