Android平台上已安装软件保护方法

文档序号:8259360阅读:253来源:国知局
Android平台上已安装软件保护方法
【技术领域】
[0001]本发明涉及软件安全领域,具体涉及一种Android (安卓)平台上已安装软件保护方法。
【背景技术】
[0002]随着智能手机的迅速发展,智能手机在人们生活中扮演着越来越重要的角色,如通信、交易、资讯等可以被方便快捷的满足,其中Android以其开源的特点受到各厂商、开发者以及用户的青睐。与此同时,由于Android系统代码开源的特点以及其自身特有的安全机制使其成为恶意软件攻击的主要目标。Android平台上软件的安全是至关重要的,目前针对Android平台上软件的保护方法主要有以下几种方法:
[0003]I)利用代码混淆技术;
[0004]2) NDK 保护;
[0005]3)外壳保护技术;
[0006]4)防止重编译的签名技术。
[0007]前三种是当前开发人员在开发应用程序时防止自己的作品被反编译采用的方式,但实际使用过程中却各有各的不足:1)在Android平台上经过混淆的文件中的类会“面目全非”,造成程序在运行时找不到特定的类而抛出异常,需要再针对异常信息进行解决,t匕较耗费精力。2)NDK保护中使用NDK编写Native代码实现软件的功能会增加代码量,调试难度增大,灵活性略显不足。3)外壳保护主要是针对使用Android NDK编写的Native代码,因此其不足性与2)中相同。
[0008]最后一种方法使用比较多,开发者可以对应用程序进行签名,但基于Android本身的安全机制由开发者对应用程序进行签名后仍然不能保证其应用程序被反编译重新打包。Android平台上只是在应用程序安装时进行其完整性验证,当应用程序安装以后再次启动运行过程中便不再进行完整性验证,只是简单的比对.apk文件与class, dex文件的时间戳以及.apk文件的保存路径,当这三者通过比对验证以后便认为应用程序在安装后并没有被篡改重新打包,事实上,很多攻击者会在获得root权限后利用Android在安装应用程序后再次启动时并不进行完整性验证的这一安全隐患对已安装到Android上的应用程序进行解压反汇编注入恶意代码后再重新打包生成APK文件来实行攻击,针对应用程序再次启动时需要验证的时间戳以及文件的保存路径只需修改相应的时间戳及文件保存路径即可。
[0009]另外,当前也有采用加载各种安全模块的方法,这些方法对Android本身修改比较大,所需要编译加载的模块多,对应用程序的开发者也可能会造成不方便。
[0010]Android上的应用程序运行在Dalvik虚拟机上,其可执行文件是dex文件。Android上应用程序的重编译实质上就是重新编译class, dex文件,应用程序被重新编译后其dex文件的Hash值会发生改变。当应用程序安装后会将class, dex文件优化保存,应用程序在后续的启动时便会直接提取出优化后的dex文件运行。然而优化后的dex文件在保存后可以被手动删除,当再次启动应用程序时若优化代码文件不存在,则系统会在启动时从apk文件中直接提取class, dex文件再次优化保存。因此若要保护已经安装的应用程序不被重新编译打包就应该在应用程序启动时对其可执行文件进行度量验证,可以通过检验class, dex文件的Hash值来判断应用程序是否被重编译过。

【发明内容】

[0011]本发明所要解决的技术问题是现有的保护方法的不足及Android本身验证机制的安全隐患,提供一种Android平台上已安装软件保护方法,其能够在应用程序启动时进行验证。
[0012]为解决上述问题,本发明是通过以下技术方案实现的:
[0013]—种Android平台上已安装软件保护方法,包括如下步骤:
[0014](I)应用程序安装阶段:
[0015]( 1.1)调取应用程序安装完成后的优化代码文件即可执行文件,并对可执行文件进行单向散列函数运算,得到可执行文件的摘要值;
[0016](1.2)利用加密函数触发密钥生成器,生成加密密钥对可执行文件的摘要值进行加密,且调出提示信息让用户输入一个保护密钥的口令,最后将由口令保护的加密密钥保存到应用程序资源文件目录中;
[0017](1.3)对加密后的摘要值再进行单向散列函数运算,得到最终的摘要值,并将最终的摘要值保存到应用程序资源文件目录中;
[0018](2)启动过程验证阶段:
[0019](2.1)启动时由单向散列函数对可执行文件进行单向散列运算,得到可执行文件的摘要值;
[0020](2.2)由加密函数对得到的摘要值进行加密,并调用应用程序资源文件目录中的加密密钥,提示用户输入口令获得密钥;
[0021](2.3)对加密后的摘要值再进行单向散列函数运算,得到最终需要比对的摘要值;
[0022](2.4)由对比函数对步骤(1.3)所得的最终的摘要值和(2.3)所得到的最终需要比对的摘要值进行比较;若比较结果相同,则应用程序没有被篡改,继续启动应用程序;若比对结果不同,则应用程序被篡改,终止应用程序的启动。
[0023]上述方法中,所述单向散列函数、密钥生成器函数、加密函数、提示用户输入保护密钥的函数和对比函数均已预先加载在应用程序所属的类中。
[0024]由于Android上没有安全的可存储结构,仅将可执行文件生成的摘要值保存在本地同样会被攻击者删除并生成其需要的摘要值文件。因此,参照应用程序包中签名的生成过程,当应用程序在安装时,应给优化后的可执行代码文件的摘要值利用私钥进行加密,最后将加密后的文件的摘要值存储即可。当应用程序在安装时对优化后的可执行文件的做单向散列运算生成的摘要值文件再利用密钥(其中由用户输入一个口令对密钥进行保护)给生成的摘要值加密,最后再次给加密后的摘要值做单向散列运算得到摘要值,作为验证的根文件。并将文件的摘要值保存到远端服务器或本地(保存到应用程序的资源文件目录下即可),这样即使加密后文件的摘要值保存在本地被攻击者删除,攻击者也无法生成其需要的摘要值。具体过程是在加载这个应用程序的类中添加单向散列函数及加密函数完成。
[0025]与现有技术相比,本发明运用了两次单向散列函数及对称加密技术,
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1