ART下的脱壳原理
Android源码
1 | http://androidxref.com |
ART下的脱壳点
ART是在Android 5.0之后解释执行dex的虚拟机,Android 5.0之前是Darvlik虚拟机
这里列出四种脱壳点
在dex的加载流程中进行脱壳
通过mCookie
脱壳
通过openCommen
函数脱壳
通过DexFile
构造函数脱壳
youpk:通过ClassLinker
来得到DexFile
缺点是有的加固不走系统函数,也就是壳的dex在解密dex的时候不走系统的函数,走的是自定义的函数
在dex2oat的编译流程中进行脱壳
dex在art中是解释执行的,存在效率问题,这就出现了oat
dex在首次加载的时候会转成oat文件
可以通过修改dex2oat
脱壳
缺点是有的加固不走dex2oat,而且对于Android 10上面不支持dex2oat
,默认不会调用dex2oat
,只接受系统生成的oat文件,所以这种方法只有9.0之前可以
还有一个问题是,加载class的方式不一样的话,dex2oat
也不一定会走,都是在Android 9.0上面,InMemoryClassLoader
就不走dex2oat
,而DexClassLoader
会走dex2oat
在类的加载和初始化流程中进行脱壳
最终dex文件在使用的时候绝大部分都是会加载类,就会有类的加载和初始化
DexHunter
在defineClass
进行类解析,这个一般针对抽取壳,前两个方法是针对整体加固的
函数执行过程中的脱壳点
目前的主流方法
FART:Execute
整体脱壳
FART:ArtMethod::invoke
函数中进行dump CodeItem
youpk:直接到了解释执行的函数中进行dump CodeItem