参考: https://www.jb51.net/article/133834.htm
1. 动态加载
动态加载是Dex加壳、插件化、热更新的基础
比如阿里的AndFix和HotFix,腾讯的tinker、美团的Robust等热修复框架的基础
什么是动态加载? 为什么要动态加载?
动态加载就是用到的时候再去加载,也叫懒加载,也就意味着用不到的时候不会去加载。
2. ClassLoader修正
动态加载的dex不具备生命周期特征,App中的Activity、Service等组件无法正常工作,只能完成一半函数的调用;
需要对ClassLoader进行修正,App才能够正常运行,两种修正手段;
解决手段1:反射替换成DexClassLoader
修改系统组件类的ClassLoader(mClassLoader),通过反射的方式进行替换,替换成DexClassLoader.
解决手段2:插入DexClassLoader
在PathClassLoader和BootClassLoader中间插入DexClassLoader(双亲委派)
3. 壳史
第一代壳 Dex加密
Dex字符串加密资源加密对抗反编译反调试自定义DexClassLoader
第二代壳 Dex抽取与So加固
对抗第一代壳常见的脱壳法Dex Method代码抽取到外部(通常企业版)Dex动态加载So加密

本文围绕Android加壳技术展开,介绍了动态加载这一基础,阐述了ClassLoader修正的两种手段。回顾了壳的发展历程,列举了加固厂商特征。还讲述了加壳技术的发展、识别方法,以及针对不同类型壳的解决方案,如Dex整体加壳、函数抽取、VMP和Dex2C等。

6831

被折叠的 条评论
为什么被折叠?



