加固加壳脱壳分析(2)_脱壳原理和一些脱壳机分析
脱壳原理
基于静态分析的源代码失效,脱壳的核心就是在于动态运行时候的把源代码dex文件dump下来。
所以最重要的几个点包括:
1.找到合适的脱壳点,也就是dex被解密加载进内存的点。
2.分析出dex文件的内存大小以及起始地址。
当然所有的操作要在运行期间读取出来这些信息
为了做到这一点我们需要一些特殊的方式
思路上的具体表现
为了能够找到dex文件的内存大小和地址,我们可以用两种方式:
1.找到解密并且将dex文件加载到内存的点,在此刻将dex文件记录并dump下来
2.直接从内存里搜索出已经加载好的dex文件,直接dump下来。
显然方法2优点明显,具体可以参考
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研究足够多