Android源码

1
2
3
4
http://androidxref.com
http://aospxref.com
https://android-opengrok.bangnimang.net
https://cs.android.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文件在使用的时候绝大部分都是会加载类,就会有类的加载和初始化

DexHunterdefineClass进行类解析,这个一般针对抽取壳,前两个方法是针对整体加固的

函数执行过程中的脱壳点

目前的主流方法

FART:Execute整体脱壳

FART:ArtMethod::invoke函数中进行dump CodeItem

youpk:直接到了解释执行的函数中进行dump CodeItem