学习 Smali 的最佳方式是啥(以及如何/何时使用 Dalvik VM 操作码)?
Posted
技术标签:
【中文标题】学习 Smali 的最佳方式是啥(以及如何/何时使用 Dalvik VM 操作码)?【英文标题】:What's the best way to learn Smali (and how/when to use Dalvik VM opcodes)?学习 Smali 的最佳方式是什么(以及如何/何时使用 Dalvik VM 操作码)? 【发布时间】:2011-08-05 03:15:08 【问题描述】:我知道 Java,也学过 C,但从未使用过。我不知道任何形式的组装,无论是虚拟机还是真实的。
学习如何破解 Smali 的最佳方法是什么?
【问题讨论】:
【参考方案1】:更新:正如我昨天承诺的那样,我在列表中添加了更多链接。
呃。周围没有太多文档!最好的建议?反编译、阅读、调整,看看它是怎么做的,然后一次又一次地开始循环。但你没有征求那个建议,对吧? ;)
现在,有几个地方会有点帮助:
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 编写你自己的代码。你确切地知道它的作用,所以它会更容易理解。
祝你好运!
【讨论】:
【参考方案2】:我仍然对人们不使用官方 Dalvik 格式文档作为主要参考感到惊讶。在旧版本中,Dalvik 文档位于 dalvik/docs 下的 Android 源代码中。您要查看的特定文件称为 dalvik-bytecode.html。一些版本返回字节码定义成为 android.com 开发者文档的一部分:
dalvik-bytecode.html on source.android.com
为了方便起见,我偶尔会在我的个人网站上镜像这些文档。在这种情况下:
dalvik-bytecode.html on milk.com
【讨论】:
你打败了我! :) 另外:您可以只获取 dalvik git,而不是查看完整的 android 源代码。 git clone git://android.git.kernel.org/platform/dalvik.git 这方面的搜索太多了,我从来没有登陆过 dalvik git 页面...感谢您的链接! 感兴趣的人可以更新一下:dalvik-bytecode 文档现在可以在 android 网站上找到。 source.android.com/tech/dalvik/dalvik-bytecode.html 文章中的链接已更新。 (注意:之前评论中的 URL 不再直接指向页面。)【参考方案3】:我在 smali 网站上有几个 wiki 页面,其中包含一些信息:
https://github.com/JesusFreke/smali/wiki/Registers
https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields
还有一些在 smali/baksmali 的集成测试中使用每个操作码的 smali 代码示例:
smali integration tests
【讨论】:
以上是关于学习 Smali 的最佳方式是啥(以及如何/何时使用 Dalvik VM 操作码)?的主要内容,如果未能解决你的问题,请参考以下文章