论文部分内容阅读
安卓系统平台的成功基于它的开源和Linux内核的可移植性,安卓的开源为它的成功提供了助力,也导致安卓成为移动终端系统中最容易被攻击的操作系统。攻击者可以利用一系列攻击手段对安卓应用程序进行分析和篡改。随着篡改和病毒数量的增加,安卓平台应用软件的保护受到越来越多的关注。近年来无论是研究机构还是科技公司,都投入了一定的资源致力于安卓平台软件保护的研究。本文在分析现有软件保护技术的基础上结合自己所学知识,设计和实现了一套基于防逆向篡改技术的安卓应用软件保护系统。本文的主要工作有以下内容:(1)dex文件的保护本文通过分析dex文件的结构和加载方式,结合常用的软件保护方法,实现了一种通过代码集替换之后再进行加密的dex文件保护解决方案。该方案可以有效抵抗反编译和静态分析,程序不运行就不恢复原始的dex文件,即使攻击者解压或者反编译apk都获取不到原始文件,能够很好地保护dex文件。(2)SO文件的保护当程序员把关键逻辑代码编写到SO库文件,攻击也随之转移到了SO文件。本文在分析安卓调用jni代码执行的流程之后发现,SO文件加载过程中真正将文件载入内存之前可以进行预处理,开发者可以在预处理函数中加入自定义逻辑。运用这一发现实现了对SO文件头字段进行替换再加密SO库文件的保护方案,该方案可以有效杜绝攻击者对SO文件的静态分析。(3)远程保护关键信息现有保护方案都将密钥信息经过加密或者变形存放于本地文件中,这种方法的缺陷是密钥信息无论是编写在SO文件中还是加密或变形之后单独存放于apk文件的其它位置,都有被破解和找到的可能。本文将Axis2提供远程服务的功能加入到保护系统中,通过这个方法可以实现密钥信息和其他需要保护的关键信息和程序完全解耦,能进一步提高软件的安全性。(4)防止动态调试防动态分析与防静态分析是相辅相成的,一个安卓软件保护系统既要考虑防静态分析的保护,还需要加入抵抗动态调试的功能。本文在分析动态调试运行机制之后,发现调试器调试安卓设备必须与android_server连接才能进行,并且二者是利用面向连接的TCP协议进行连接的。根据这两个特点,实现了一个基于android_server连接资源占用的反动态调试解决方案,该方案通过被保护应用软件与android_server进行TCP连接阻止调试器的连接,进而阻止动态调试的进行,该方案比目前使用的反调试解决方案更高效且状态更持久。