论文部分内容阅读
近年来随着移动互联网的发展,手机应用的产量呈指数式的增长,据统计,目前我国主要应用商店的APP(应用程序)已累计超过1000万,这些APP一方面给我们平时的生活带来了便利,同时也给了恶意逆向人员可乘之机,这些恶意逆向者通过逆向分析合法的APP得到程序的结构和执行逻辑,然后实施进一步的攻击,比如篡改加一些恶意的广告,进行二次打包,或者将APP中的核心功能加以重现。这给APP开发厂商和用户都造成了巨大的经济损失,严重影响APP产业的健康发展。为了延缓和阻止以上这种趋势,学术界提出一系列Android应用程序的保护方法,与此同时,国内各种加固厂商也应运而生,对Android应用程序中的核心Dex文件进行安全防护。目前主流的保护方法是通过转换真实的指令为虚拟指令集,结合自定义的解释器进行功能等价转换,从而增大攻击者对应用的逆向分析成本,进而阻断了重打包的流程。但是目前这种Dex虚拟防重打包保护还只是单重性的,针对于Dex文件的保护,攻击者可以通过分析在本地层的虚拟解释壳来找到虚拟指令的映射表和解密函数点,然后结合映射表来进行还原,可以看出Dex文件保护方法比较单一。因此本文针对以上这些问题提出一种基于多重指令虚拟的Android应用程序保护方法,该方法把目前保护手段所呈现的问题进行了规避。最后攻击测试实验表明,在性能开销可接受的情况下,该保护方法可以有效地阻止当前UNPACKER的逆向攻击工作,使得大多数的逆向分析起不到相应的效果和作用。本文主要研究工作包括三个方面:1)对于Dex文件保护:提出了一种兼顾JNI反射下沉和Dex多样化虚拟的Android应用程序保护方法。其中多样性虚拟可以增大攻击者进行虚拟指令还原的难度,同时部分方法的Native化下沉能够防止自动还原得到完整的Dex文件。2)对于本地层So文件的虚拟保护:针对目前So文件保护中加密和加壳存在易于在内存Dump出完整的So文件的缺点,提出基于栈的ARM指令虚拟保护方法。自定义虚拟指令可以有效地防止内存Dump得到有效指令。3)对于本地层文件的编译虚拟保护:针对So文件虚拟保护中出现的兼容性问题,提出编译虚拟保护,其主要应用于一些重要的函数,从而有效的保障兼容性和性能。