《防止应用程序被篡改的方法及装置.pdf》由会员分享,可在线阅读,更多相关《防止应用程序被篡改的方法及装置.pdf(13页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104123481A43申请公布日20141029CN104123481A21申请号201310146217922申请日20130424G06F21/12201301G06F21/5420130171申请人贝壳网际(北京)安全技术有限公司地址100041北京市石景山区八大处高科技园区西井路3号3号楼1100A房间申请人北京金山网络科技有限公司北京金山安全软件有限公司珠海市君天电子科技有限公司可牛网络技术(北京)有限公司72发明人熊丽兵傅盛徐鸣卢云飞74专利代理机构北京银龙知识产权代理有限公司11243代理人许静黄灿54发明名称防止应用程序被篡改的方法及装置57摘要本发明提供一。
2、种防止应用程序被篡改的方法及装置,属于智能移动终端安全领域。其中,该防止应用程序被篡改的方法应用于ANDROID系统的移动终端中,所述方法包括对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值;利用所述校验值生成用于校验所述存储文件的验证文件;对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。本发明的技术方案能够验证应用程序是否被篡改,从而增加应用程序的安全性。51INTCL权利要求书2页说明书7页附图3页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书7页附图3页10申请公布号CN104123481ACN104123481A1/2页21一种防止应。
3、用程序被篡改的方法,应用于ANDROID系统的移动终端中,其特征在于,所述方法包括对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值;利用所述校验值生成用于校验所述存储文件的验证文件;对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。2根据权利要求1所述的防止应用程序被篡改的方法,其特征在于,所述对应用程序的存储文件进行文件校验之前还包括对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提取出源程序文件;所述对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值包括对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。3根据权利要求1所述的防。
4、止应用程序被篡改的方法,其特征在于,所述对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值包括对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值。4根据权利要求2或3所述的防止应用程序被篡改的方法,其特征在于,所述利用所述校验值生成用于校验所述存储文件的验证文件包括利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行编译得到所述验证文件。5根据权利要求4所述的防止应用程序被篡改的方法,其特征在于,所述对所述存储文件和验证文件进行编译打包之前还包括在所述验证文件中添加预设可执行代码;所述对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包包括对。
5、所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应用程序的安装包。6根据权利要求1所述的防止应用程序被篡改的方法,其特征在于,所述安装包为APK文件。7一种防止应用程序被篡改的装置,应用于ANDROID系统的移动终端中,其特征在于,所述装置包括校验模块,用于对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值;验证模块,用于利用所述校验值生成用于校验所述存储文件的验证文件;编译模块,用于对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。8根据权利要求7所述的防止应用程序被篡改的装置,其特征在于,所述装置还包括提取模块,用于对应用程序的代码进行编译,形成。
6、可执行文件,从所述可执行文件中提取出源程序文件;所述校验模块具体用于对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。9根据权利要求7所述的防止应用程序被篡改的装置,其特征在于,权利要求书CN104123481A2/2页3所述校验模块具体用于对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值。10根据权利要求8或9所述的防止应用程序被篡改的装置,其特征在于,所述验证模块具体用于利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行编译得到所述验证文件。11根据权利要求7所述的防止应用程序被篡改的装置,其特征在于,所述装置还包括添加模块,用于在所述验证文件。
7、中添加预设可执行代码;所述编译模块具体用于对所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应用程序的安装包。权利要求书CN104123481A1/7页4防止应用程序被篡改的方法及装置技术领域0001本发明涉及智能移动终端安全领域,特别是指一种防止应用程序被篡改的方法及装置。背景技术0002ANDROID是一种基于LINUX的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑。现在的安卓操作系统中,应用程序通常使用JAVA语言编写。使用该语言编写的应用程序可以打包为后缀为APK的程序包,将该程序包在移动终端上运行即可安装对应的安卓应用。但是将应用程序打包为后。
8、缀为APK的程序包有其致命的缺陷,因为APK程序包比较容易被篡改,影响了应用程序的安全性。其中APK是ANDROIDPACKAGE的缩写,即ANDROID安装包APK。APK是一种文件格式,通过将APK文件直接传到ANDROID模拟器或ANDROID手机中执行即可实现安装。0003为了防止APK程序包被篡改,目前最常使用的解决方式有代码混淆、签名验证和在线验证等三种方式。不过这三种方式都有其缺点代码混淆方式是将部分代码进行替换,如把1(数字一)替换为L(字母L),但是这样会使得代码阅读难度增加;签名验证方式可在应用运行的时候验证签名是否正确,如果非官方签名则停止程序运行,但是此种方式依然要依靠。
9、JAVA代码进行验证,如果源程序被破解,即可删除验证相关代码;在线验证方式是比较可靠的验证方式,不过需要连接网络时才能使用。发明内容0004本发明要解决的技术问题是提供一种防止应用程序被篡改的方法及装置,能够验证应用程序是否被篡改,从而增加应用程序的安全性。0005为解决上述技术问题,本发明的实施例提供技术方案如下0006一方面,提供一种防止应用程序被篡改的方法,应用于ANDROID系统的移动终端中,所述方法包括0007对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值;0008利用所述校验值生成用于校验所述存储文件的验证文件;0009对所述存储文件和验证文件进行编译打包,生成所述。
10、应用程序的安装包。0010具体地,所述安装包可以为APK文件。0011进一步地,所述对应用程序的存储文件进行文件校验之前还包括0012对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提取出源程序文件;0013所述对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值包括0014对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。0015进一步地,所述对应用程序的存储文件进行文件校验,得到所述存储文件的唯一说明书CN104123481A2/7页5校验值包括0016对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值。0017进一步地,所述利用所述校验值生成。
11、用于校验所述存储文件的验证文件包括0018利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行编译得到所述验证文件。0019进一步地,所述对所述存储文件和验证文件进行编译打包之前还包括0020在所述验证文件中添加预设可执行代码;0021所述对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包包括0022对所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应用程序的安装包。0023本发明实施例还提供了一种防止应用程序被篡改的装置,应用于ANDROID系统的移动终端中,包括0024校验模块,用于对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验。
12、值;0025验证模块,用于利用所述校验值生成用于校验所述存储文件的验证文件;0026编译模块,用于对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。0027进一步地,所述装置还包括0028提取模块,用于对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提取出源程序文件;0029所述校验模块具体用于对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。0030进一步地,所述校验模块具体用于对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值。0031进一步地,所述验证模块具体用于利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行编译得。
13、到所述验证文件。0032进一步地,所述装置还包括0033添加模块,用于在所述验证文件中添加预设可执行代码;0034所述编译模块具体用于对所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应用程序的安装包。0035本发明的实施例具有以下有益效果0036上述方案中,首先对应用程序的存储文件进行文件校验,得到存储文件的唯一校验值,利用该校验值生成用于校验该存储文件的验证文件,再对存储文件和验证文件进行编译打包,生成应用程序的安装包。如果应用程序存储文件中的代码有任何变化,存储文件的校验值都会改变。这样在使用安装包安装应用程序时,通过对存储文件的校验值进行验证,即可判断出存储文件是否被。
14、篡改,如果发现存储文件被篡改,则可以提示用户停止安装过程。本发明的技术方案能够验证应用程序是否被篡改,从而增加应用程序的安全性。说明书CN104123481A3/7页6附图说明0037图1为本发明实施例防止应用程序被篡改的方法的流程示意图;0038图2为本发明实施例防止应用程序被篡改的装置的结构框图;0039图3为本发明实施例一防止应用程序被篡改的方法的流程示意图;0040图4为本发明实施例二防止应用程序被篡改的方法的流程示意图。具体实施方式0041为使本发明的实施例要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。0042本发明的实施例针对现有技术中验证应用程。
15、序是否被篡改比较困难的问题,提供一种防止应用程序被篡改的方法及装置,能够验证应用程序是否被篡改,从而增加应用程序的安全性。0043图1为本发明实施例防止应用程序被篡改的方法的流程示意图,如图1所示,本实施例包括0044步骤101对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值;0045步骤102利用所述校验值生成用于校验所述存储文件的验证文件;0046步骤103对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。0047具体地,应用程序的安装包可以为应用程序的APK文件。0048进一步地,本发明的另一实施例中,包括上述步骤101103的基础上,步骤101之前还包括00。
16、49对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提取出源程序文件,其中源程序文件可以为CLASSESDEX文件;0050所述步骤101包括0051对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。0052进一步地,本发明的另一实施例中,包括上述步骤101103的基础上,所述步骤101包括0053对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值,其中,所述资源文件可以为ARSC格式文件。0054进一步地,本发明的另一实施例中,包括上述步骤101103的基础上,所述步骤102包括0055利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行。
17、编译得到所述验证文件,所述程序代码包括采用C程序或C程序编写的代码,具体地,可以将所述C程序或C程序编写的代码编译成为SO格式文件。0056进一步地,本发明的另一实施例中,包括上述步骤101103的基础上,所述步骤103之前还包括0057在所述验证文件中添加预设可执行代码;0058所述步骤103包括说明书CN104123481A4/7页70059对所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应用程序的安装包。0060本发明的防止应用程序被篡改的方法,首先对应用程序的存储文件进行文件校验,得到存储文件的唯一校验值,利用该校验值生成用于校验该存储文件的验证文件,再对所述存储文。
18、件和验证文件进行编译打包,生成应用程序的安装包。如果应用程序存储文件中的代码有任何变化,存储文件的校验值都会改变。这样在使用安装包安装应用程序时,通过对存储文件的校验值进行验证,即可判断出存储文件是否被篡改,如果发现存储文件被篡改,则可以提示用户停止安装过程。本发明的技术方案能够验证应用程序是否被篡改,从而增加应用程序的安全性。0061图2为本发明实施例防止应用程序被篡改的装置的结构框图,如图2所示,本实施例包括0062校验模块20,用于对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值;0063验证模块21,用于利用所述校验值生成用于校验所述存储文件的验证文件;0064编译模块2。
19、2,用于对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。0065进一步地,所述装置还包括0066提取模块23,用于对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提取出源程序文件;0067所述校验模块20具体用于对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。0068进一步地,所述校验模块20具体用于对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值。0069进一步地,所述验证模块21具体用于利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行编译得到所述验证文件。0070进一步地,所述装置还包括0071添加模块24,用于。
20、在所述验证文件中添加预设可执行代码;0072所述编译模块22具体用于对所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应用程序的安装包。0073本发明的防止应用程序被篡改的装置,首先对应用程序的存储文件进行文件校验,得到存储文件的唯一校验值,利用该校验值生成用于校验该存储文件的验证文件,再对所述存储文件和验证文件进行编译打包,生成应用程序的安装包。如果应用程序存储文件中的代码有任何变化,存储文件的校验值都会改变。这样在使用安装包安装应用程序时,通过对存储文件的校验值进行验证,即可判断出存储文件是否被篡改,如果发现存储文件被篡改,则可以提示用户停止安装过程。本发明的技术方案能够。
21、验证应用程序是否被篡改,从而增加应用程序的安全性。0074下面结合具体的实施例对本发明的防止应用程序被篡改的方法进行详细介绍0075实施例一0076一般对应用程序的恶意篡改都是通过修改应用程序中的JAVA语言代码来实现。说明书CN104123481A5/7页8黑客可以通过在原有代码中添加广告、病毒等恶意代码,或者删掉某些验证相关的代码来实现恶意目的。所以只要避免代码被修改,就可以从根本上防止应用程序被恶意篡改。0077如图3所示,本实施例包括以下步骤0078步骤A1在应用程序开发完毕后,先将应用程序的代码进行编译,形成可执行的APK文件,从APK文件中提取出名为CLASSESDEX的文件。00。
22、79步骤A2该CLASSESDEX文件包括了所有的JAVA语言代码,对该文件使用现有的文件校验方法进行校验,并得出该文件的唯一校验码。比如可使用CRC校验对该文件进行校验,得到该文件的CRC值。其中,CRC即循环冗余校验码(CYCLICREDUNDANCYCHECK)是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。0080通过CRC校验可以确保文件不会被修改。因为对一个文件进行计算可以得到唯一的CRC值,如果对这个文件进行细微修改(哪怕只修改一个字节),该文件的CRC值都会变得完全不同,所以使用CRC校验可确保对CLASSESDEX文件的任何修改都能被及时。
23、发现。0081步骤A3计算出CRC值后,需要编写一个用来验证CRC值的C程序或C程序,并将该C程序或C程序编译成为SO格式文件,如“TESTSO“文件。该“TESTSO“文件在应用程序运行的时候,会重新计算CLASSESDEX文件的CRC值,并与之前计算出来的CRC值进行比对。如果两个CRC值一致,代表该CLASSESDEX文件没有被篡改过,可以正常运行;如果两个CRC值不一致,则该CLASSESDEX文件可能已经被篡改,此时需要提示用户该应用程序有风险,建议下载官方版本。0082步骤A4重新对包括上述“TESTSO”文件和CLASSESDEX文件的所有代码进行编译打包,形成一个带有验证机制的。
24、APK文件。用户可以使用该APK文件安装应用程序,在运行该APK文件后,会首先调用“TESTSO”文件,“TESTSO”文件中的代码会对CLASSESDEX文件进行CRC校验,得到一CRC值并与之前的CRC值对比,从而得到应用程序是否被篡改的结论,避免用户受到损失。0083由于破解SO格式文件的难度远远高于破解普通JAVA代码的难度,因此,本实施例的技术方案可以有效避免应用程序被恶意篡改,保证应用程序的完整性与安全性。本实施例中,由于验证部分代码使用C编写,增加了破解的难度;另外通过二次编译来完成对CLASSESDEX文件的CRC校验,这种方式即巧妙的获取到CLASSESDEX文件的校验码,又。
25、可以防止黑客了解验证逻辑,从而防止了黑客对代码的篡改。0084本实施例通过检测CLASSESDEX文件的校验码是否变化来分析该文件是否被篡改,虽然无法阻止应用程序被反编译,但是可以使得他人无法私自对代码进行修改,使得应用程序的安全性大大增加。0085实施例二0086由于调用SO格式文件的代码仍然是用JAVA语言编写,这样有些黑客可以通过删除调用“TESTSO”文件的代码来避过验证。因此,本实施例在“TESTSO”文件中添加预设可执行代码,如果应用程序没有调用“TESTSO”文件,那么预设可执行代码无法运行,应用程序获取错误信息给用户相关提示,从而避免应用程序被恶意修改的情况发生。0087如图4。
26、所示,本实施例包括以下步骤0088步骤B1在应用程序开发完毕后,先将应用程序的代码进行编译,形成可执行的说明书CN104123481A6/7页9APK文件,从APK文件中提取出名为CLASSESDEX的文件。0089步骤B2该CLASSESDEX文件包括了所有的JAVA语言代码,对该文件使用现有的文件校验方法进行校验,并得出该文件的唯一校验码。比如可使用CRC校验对该文件进行校验,得到该文件的CRC值。0090通过CRC校验可以确保文件不会被修改。因为对一个文件进行计算可以得到唯一的CRC值,如果对这个文件进行细微修改(哪怕只修改一个字节),该文件的CRC值都会变得完全不同,所以使用CRC校验。
27、可确保对CLASSESDEX文件的任何修改都能被及时发现。0091步骤B3计算出CRC值后,需要编写一个用来验证CRC值的C程序或C程序,并将该C程序或C程序编译成为SO格式文件,如“TESTSO“文件。该“TESTSO“文件在应用程序运行的时候,会重新计算CLASSESDEX文件的CRC值,并与之前计算出来的CRC值进行比对。如果两个CRC值一致,代表该CLASSESDEX文件没有被篡改过,可以正常运行;如果两个CRC值不一致,则该CLASSESDEX文件可能已经被篡改,此时需要提示用户该应用程序有风险,建议下载官方版本。0092步骤B4在“TESTSO”文件中添加预设可执行代码,比如可以在。
28、“TESTSO”文件中添加一些程序初始化的代码,如申请内存空间,加载动画等等。如果“TESTSO”文件没有运行这些代码,则应用程序没有初始化,会导致应用程序运行失败,避免用户损失。0093这样即使黑客通过某些手段阻止了SO格式文件对APK文件进行校验,由于很难知道关键代码的内容,使得应用程序无法正常运行,从而给用户相关提示,避免应用程序被恶意修改给用户造成损失。0094步骤B5重新对包括上述“TESTSO”文件和CLASSESDEX文件的所有代码进行编译打包,形成一个带有验证机制的APK文件。用户可以使用该APK文件安装应用程序,在运行该APK文件后,会首先调用“TESTSO”文件,“TEST。
29、SO”文件中的代码会对CLASSESDEX文件进行CRC校验,得到一CRC值并与之前的CRC值对比,从而得到应用程序是否被篡改的结论,避免用户受到损失。0095本实施例通过检测CLASSESDEX文件的校验码是否变化来分析该文件是否被篡改,虽然无法阻止应用程序被反编译,但是可以使得他人无法私自对代码进行修改,使得应用程序的安全性大大增加。0096进一步地,还可以利用本发明的技术方案来防止应用程序的资源文件被替换。应用程序的资源文件是存储在一个ARSC格式文件中,例如RESOURCESARSC文件。如果对应用程序中的资源进行替换,会导致该ARSC格式文件的CRC值发生改变。用实施例一所述的方案对。
30、该ARSC格式文件进行CRC校验,即可判断资源文件是否被替换。0097本发明实施例中,在采用文件校验方法对文件进行校验时,除了采用CRC校验,还可以使用其他校验方式,如MD5校验、SHA1校验、哈希校验等校验方式。只要是通过某种算法,可以得到文件唯一的校验值的文件校验方法均可应用于本发明的技术方案中。另外,除了采用单一的校验方式对文件进行校验,还可混合使用这些校验方式,即同时利用两种或两种以上的校验方式对文件进行校验。0098本发明的防止应用程序被篡改的方法及装置,操作简单,破解难度大,安全性高,并且不需要网络支持,随时都可以对应用程序安装包的安全性进行验证,适应能力好。0099此说明书中所描。
31、述的许多功能部件都被称为模块,以便更加特别地强调其实现方说明书CN104123481A7/7页10式的独立性。0100本发明实施例中,模块可以用软件实现,以便由各种类型的处理器执行。举例来说,一个标识的可执行代码模块可以包括计算机指令的一个或多个物理或者逻辑块,举例来说,其可以被构建为对象、过程或函数。尽管如此,所标识模块的可执行代码无需物理地位于一起,而是可以包括存储在不同物理上的不同的指令,当这些指令逻辑上结合在一起时,其构成模块并且实现该模块的规定目的。0101实际上,可执行代码模块可以是单条指令或者是许多条指令,并且甚至可以分布在多个不同的代码段上,分布在不同程序当中,以及跨越多个存储。
32、器设备分布。同样地,操作数据可以在模块内被识别,并且可以依照任何适当的形式实现并且被组织在任何适当类型的数据结构内。所述操作数据可以作为单个数据集被收集,或者可以分布在不同位置上(包括在不同存储设备上),并且至少部分地可以仅作为电子信号存在于系统或网络上。0102在模块可以利用软件实现时,考虑到现有硬件工艺的水平,所以可以以软件实现的模块,在不考虑成本的情况下,本领域技术人员都可以搭建对应的硬件电路来实现对应的功能,所述硬件电路包括常规的超大规模集成(VLSI)电路或者门阵列以及诸如逻辑芯片、晶体管之类的现有半导体或者是其它分立的元件。模块还可以用可编程硬件设备,诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等实现。0103在本发明各方法实施例中,所述各步骤的序号并不能用于限定各步骤的先后顺序,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,对各步骤的先后变化也在本发明的保护范围之内。0104以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。说明书CN104123481A101/3页11图1图2说明书附图CN104123481A112/3页12图3说明书附图CN104123481A123/3页13图4说明书附图CN104123481A13。