论文部分内容阅读
伴随着移动互联网的高速发展、移动终端不断普及,移动应用广泛使用,但同时也伴随着出现各种安全问题。借助终端用户基数大、应用平台访问量大,Android应用不断遭受重新打包以及其他威胁,造成Android应用市场充斥着大量恶意软件和盗版软件,扰乱应用市场正常秩序,严重威胁用户个人财产和隐私信息的安全,并且侵犯了应用所有者版权。保护Android应用所有者的所有权不被侵犯,加大软件保护力度,成为近些年软件版权保护的重要方向。面对应用重新打包的广泛传播,当前的技术主要有应用混淆技术,但是混淆只能增加逆向分析Android应用程序的难度,不能阻止攻击者通过人工分析来达到分析Android程序的目的。还有应用重打包的检测技术,主要基于图论和散列的方法,但是检测率会因为使用了混淆方法而降低;而且目前的检测技术关注点在于已经传播的重打包应用的可行的检测机制,所以通常在检测之前,应用已经被重打包。另外和应用重打包的低消耗相比,重打包应用的检测需要高投入。考虑到应用重打包的广泛传播和严重威胁,迫切需要一个有效、健壮的机制来预防和阻止应用重打包。软件水印技术在桌面软件已经有了广泛的研究与应用,而Android应用程序重新打包问题与软件盗版过程相似,因此将软件水印技术应用于Android应用程序是行得通的。目前对于Android应用水印的研究很少,并且大多数的载体都是源代码,由于Android系统本身的特殊性,从Android应用反编译得到的源代码会造成大量的信息丢失,而且反编译为源代码所需的时间长,执行效率低下。而Smali作为中间语言,不仅能够比较完整的保留软件中的信息,而且花费的时间少很多。基于上述软件水印技术存在的局限性和通用性不好的问题,本文提出了基于Smali代码的Android应用动态水印方案。其主要贡献如下:第一,针对基于Java源代码的软件水印技术,容易造成编译复杂、执行效率低的问题,以及Android应用反编译为源代码,存在反编译时间长、不能完全得到原始代码的问题,本文选择Smali代码作为水印嵌入的载体,不仅不需要提供源代码,而且缩短了 Android应用程序反编译处理的时间和解决了编译困难的问题。第二,针对Java动态水印技术需要广泛的人工参与水印的嵌入和提取,为了减少人工参与,本文根据Android的事件驱动性,生成执行序列作为动态水印嵌入和水印提取的输入序列,能够大大提高水印嵌入的效率,使得向Android应用嵌入水印广泛使用。第三,综合第一点和第二点,本文提出基于Smali代码的Android应用动态水印方案,该水印方案的载体是Smali代码,分析Android应用后来生成事件序列作为水印嵌入和提取的输入序列,使用动态图水印并编写生成Smali代码,然后将水印代码嵌入到Android应用中事件序列对应的节点处理函数中,最后重新打包生成Android应用程序。第四,设计并实现面向Android应用的动态水印系统,经过实验测试表明,嵌入水印后的应用和原应用在功能上一致,空间过载和时间过载较少增加,具有一定的抗攻击性和隐蔽性,证明该方案能有效地保护Android应用程序,保护应用程序的版权。