App加固技术功能发展
通过这几年的发展APP加固技术,不断得到快速迭代发展,加固的强度也在不断的提升。加固技术的发展主要经历:动态加载、内存不落地加载、指令抽取、指令转换、虚拟机保护。下面就分别对这些技术实现进行解析。
动态加载
Android动态加载加固技术用于保护App应用的逻辑不被逆向与分析,最早普遍在恶意软件中使用,它主要基于Java虚拟机提供的动态加载技术。由于动态加载技术主要依赖于java的动态加载机制,所以要求关键逻辑部分必须进行解压,并且释放到文件系统。这种动态加载技术不足之处在于:1.这一解压释放机制就给攻击者留下直接获取对应文件的机会;2.可以通过hook虚拟机关键函数,进行dump出原始的dex文件数据。
不落地加载
Android不落地加载技术,它是在动态加载技术的基础进行改进。它通过借鉴第一代加固的动态加载技术中,关键逻辑部分必须释放到文件系统的缺陷,它主要新增文件级别的加解密。文件级别的加解密技术主要有两种实现方案:1.通过拦截系统的IO相关函数,在这些系统的函数中进行透明加解密。2.直接调用虚拟机提供的函数,进行不落地的加载。这种文件级别的加解密不足之处在于:1.由于在App启动时需处理大量加解密操作,它会造成App启动卡顿假死或黑屏现象,用户体验感较差;2.由于它的内存是连续的,通过hook关键函数就可以获取到连续完整的dex数据。
指令抽取
android的指令抽取,主要在于函数基本的抽取保护。通过使用android虚拟机自带的解释器进行执行代码。将原始App中dex文件的函数内容进行清除,并将单独移动到一个加密文件中,在App运行的时候,再将函数内容重新恢复到对应的函数体。这一指令抽取技术的不足之处在于:1.使用大量的虚拟机内部结构,会出现兼容性问题;2.使用android虚拟机进行函数内容的执行,无法对抗自定义虚拟机;3.它跟虚拟机的JIT优化出现冲突,达不到最佳的性能表现。
指令转换/VMP
它主要通过实现自定义Androi