欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[分享]某壳分析学习过程-修复

[分享]某壳分析学习过程-修复

在这篇https://bbs.pediy.com/thread-223223.htm文章里的代码基础上修改的。

这篇文章里的映射表是算准了各个解释指令代码的偏移。最新的壳里面代码位置看着很乱。然后我想,不管怎么乱,总要算出switch的跳转参数。然后拿两个应用试了下,即使它加密代码,算跳转的表变了,那个跳转参数是不变的。然后我新生成的映射表就是通过这个参数去还原指令。


一.生成映射表的思路就是:

1.动态调试拿到加密后的指令,算跳转的表。我自己写的app里的加密前指令,dalvik所有指令

2.加密前的指令和dalvik指令表对比(主要用来取指令长度,方便读下一条指令),然后加密指令根据跳转表,算出跳转位置,就知道加密前指令,加密指令,跳转位置的关系了。


最后效果如下,分别是加密前指令,指令长度,加密后指令,跳转位置,指令描述


二.还原指令

       还原指令时,主要问题是没想到好办法获取它跳转时的值。动态自动下断点也很慢。我是hook了它解释之前的函数,拿到了进解释器函数时的栈指针,因为栈里固定偏移有那个算跳转的表。之后就调用parse_tree(看这个博客https://bbs.pediy.com/thread-223223.htm),算出key,就算出跳转位置了。

获取栈代码如下:

里面的-0x38是因为刚进函数会保存参数,整个过程是sp-0x14-0x7c+0x58


+0x58是看代码发现这儿会保存那张表



拿到算跳转的表之后,基本就可以接着https://bbs.pediy.com/thread-223223.htm这位大佬的代码去还原了。

三.附件中一个app是包含基本大部分的dalvik指令。还有一个做了点补充,比如retrunobj,mov exception这些。大部分指令来自http://www.freebuf.com/articles/terminal/152617.html这篇文字里的。但是因为app链接失效,就补充了一下。

四.应用重打包时的一些问题。希望路过的大佬能解答一下

多dex修复时还会出问题。老提示找不到一些类。这些类就在第二个dex里,而且application也继承了multidex。难道非要它缺什么,再移动类到主dex里?

最后. 代码写的太差了。而且 https://bbs.pediy.com/thread-223223.htm在这个博客上修改的,改动不太大,就不放了。感谢这位大佬,哈哈。

这个映射表对应上个月的壳,好多应用还没更新壳,就不放练手的应用了。

上传的附件 map.txt
allopcode.apk
otherop.apk

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功