APP 加固发展到现在已经好几代了,从整体加固到代码抽取到虚拟机保护,加固和脱壳的方案也逐渐趋于稳定。随着保护越来越强,脱壳机们也变得越来越费劲,繁琐。
不过对于我来说,很多时候其实并不需要那些被强保护起来的代码,我只是想单纯的看看这个地方的业务逻辑。所以,我追求的是更加快速、简便的脱壳方法。
得益于FRIDA, 在 PC 上面进行内存搜索、转储都变得十分方便,再也不需要考虑什么Xposed、什么Android开发、什么代码注入,只需要关注如何去搜索想要的东西,于是依赖一个几十行代码的小脚本,就可以将大部分内存中的 dex 脱下来。在过去的一年,我几乎所有脱壳的工作都是由此脚本来完成,目前已经随手开源:FRIDA-DEXDump, 欢迎star。
对于完整的 dex,采用暴力搜索 dex035 即可找到。而对于抹头的 dex,通过匹配一些特征来找到。
有人问我无头dex的匹配原理是什么,这里补充一下: 因为许多加固抹头的时候只会抹掉dex035
这个magic bytes, 但是其实 DexHeader
里很多其他的字段也是可以当作特征来匹配: 比如 header
的长度、string\type\field\proto
表的索引,索引指向的位置顺序等等。
虽然单一一个字段拿出来无法作为准确的特征,但如果有多条规则进行匹配,那么就完成了一个相对精确的模糊搜索,这样就能搜到 dex035
的dex了。代码里我仅仅只加了一条string_id_off的规则,所以加了个 improve
的 TODO
, 不过我觉得基本上够用,有兴趣的补全可以过来提 pr 鸭。
目前基本上我遇到的大部分 tx、bb、ijm、360、baidu 很多都是可以 dump 的,毕竟现代壳的核心功能并不是为了保护整体 DEX
(不会安装使用 FRIDA 的,请先自行百度学会..)
或者可以将脚本封装成命令,就像这样:
首发、搬运自:
[招生]科锐逆向工程师培训(3月6日远程教学班首开特惠, 第37期) !
最后于 12小时前 被葫芦娃编辑 ,原因: