加固加壳脱壳分析(2)_脱壳原理和一些脱壳机分析

脱壳原理

基于静态分析的源代码失效,脱壳的核心就是在于动态运行时候的把源代码dex文件dump下来。

所以最重要的几个点包括:

1.找到合适的脱壳点,也就是dex被解密加载进内存的点。
2.分析出dex文件的内存大小以及起始地址。

当然所有的操作要在运行期间读取出来这些信息

为了做到这一点我们需要一些特殊的方式

思路上的具体表现

为了能够找到dex文件的内存大小和地址,我们可以用两种方式:

1.找到解密并且将dex文件加载到内存的点,在此刻将dex文件记录并dump下来
2.直接从内存里搜索出已经加载好的dex文件,直接dump下来。

显然方法2优点明显,具体可以参考

《深入 FRIDA-DEXDump 中的矛与盾》

dex修复

应对类抽取的加固方式

最后还差什么呢,也许dex直接脱下来是及其重要的一个步骤。但是将dex文件修复是更加核心的一个步骤。否则拉下来一个全是空方法的dex文件没有什么意义。

关于修复dex文件这个步骤比较复杂,后面直接遇到了分析过程。

这个过程需要对dex的文件格式非常熟悉,因此对dex的文件需要有个完整的解析过程了解。

脱壳方式

主流的脱壳方式,包括脱壳机

1.基于hook

包括xposed/frida的方式来读取
典型的案例有github的开源脱壳机框架

参考案例
Xposed
https://github.com/WrBug/dumpDex
https://github.com/WrBug/DeveloperHelper

Frida
https://github.com/dstmath/frida-unpack
https://github.com/hluwa/FRIDA-DEXDump

2.基于源码定制

对系统源码进行修改,在关键位置插入代码把dex文件dump下来

经典的案例FART以及其变种

https://github.com/Youlor/Youpk
https://github.com/hanbinglengyue/FART
https://github.com/Youlor/unpacker

3.基于虚拟机

最近出来一种基于虚拟机的 也就是基于VA的脱壳机

https://github.com/Youlor/unpacker

基于这种类似虚拟机的结构 可以应对很多厂商的壳,而且不用刷机和root

在使用上难度较小但是在开发上难度要大一点。要对VA研究足够多

总结

参考资料

https://mp.weixin.qq.com/s/n2XHGhshTmvt2FhxyFfoMA

https://github.com/hanbinglengyue/FART