Android dex的加载流程以及加固脱壳时机点简单总结

来源:互联网 发布:ubuntu英文改中文 编辑:程序博客网 时间:2024/05/22 17:36
1.Dex文件优化与验证:
 把dex文件转化为odex的过程,填补一些加载依赖的类。这里存在一代脱壳时机点,比如早期的爱加密在dvmdexfileopen函数下断点。
 
2.Dex文件解析:
将优化后得dex文件(也就是odex文件)通过mmap映射到内存中,并通过mprotect修改它的映射内存为只读权限,映射为只读的这块dex数据中的内容全部提取到DexFile这个数据结构中去,然后开始解析dex文件。
这里存在二代脱壳的时机点:在dvmDexFileOpenFromFd下断点,比如百度加固,参考链接:http://bbs.pediy.com/thread-218891.htm
或者在dexFileParse下断点。


3.Dex的类加载过程:
主要是完成整个类的加载过程,返回一个ClassObject结构体。
这里存在着第三代的脱壳时机点:比如在dvmDefineClass()类加载的时候,进行主动的类加载并完成重构然后进行dump,可以通过HOOK这个关键函数或者patch系统源码来完成。


4.实际指令执行:
主要寻找对应的类方法进行实际的指令运行解释。
这里要进行第四代加固的话也就是目前比较热的VMP,抽取指令,变形,映射然后进行自解释。


总结:
其实可以看到加固和脱壳是相对应的,加固从修改早期的上层系统函数到目前比较火热的代码抽取自解释,也可以说是从整体加解密到部分加解密到虚拟解释的过程,都是从上层到底层的一个过程,越往底层加固的效果会好一些,但是随之带来的兼容性问题可能就比较大。
原创粉丝点击