CN104393992A - 应用程序包的验证方法及装置 - Google Patents
应用程序包的验证方法及装置 Download PDFInfo
- Publication number
- CN104393992A CN104393992A CN201410557106.1A CN201410557106A CN104393992A CN 104393992 A CN104393992 A CN 104393992A CN 201410557106 A CN201410557106 A CN 201410557106A CN 104393992 A CN104393992 A CN 104393992A
- Authority
- CN
- China
- Prior art keywords
- application package
- signature key
- plaintext
- sample
- modified
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Storage Device Security (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种应用程序包的验证方法及装置,在上述方法中,从接收到的当前应用程序包中获取已经被分为多段的签名公钥的样本;对所述样本重新组合并执行解密处理;对所述样本执行反乱序处理还原为所述签名密钥的明文;将所述明文与所述当前应用程序包对应的签名密钥进行对比,验证所述所述应用程序包是否被修改。根据本发明提供的技术方案,签名密钥的样本难以被获取并被修改替换,从而使得验证准确性大大提高。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种应用程序包的验证方法及装置。
背景技术
安卓(Android)应用程序包文件(Android Package,简称为APK)在发布的时候,都必须对其进行数字签名。数字签名是为了确实发布者的身份以及保证应用程序包完整性。通过对签名的验证,可以知道应用程序包中内容是否已经被篡改或者替换。而要修改编译过的Java代码是比较容易实现的,在Java代码中实现签名信息的自检测是很不安全的,签名验证的实现代码很容易被破坏掉。
使用Java代码实现的签名信息自验证功能,通过APK反编译工具就可以比较容易地发现、找到功能实现的代码,并通过修改smali代码以破坏或者绕开签名自验证功能。而如果使用云端检测签名信息的话,则在客户端离线的状态下无法进行检测,存在一定的局限性。
此外,在对APK包进行数字签名后,其签名信息会保存在APK包内,其中就包括签名的公钥,并且不同签名私钥对应着不同的公钥。如果APK包的内容被修改,则需要重新签名,而新的签名无法与原来的签名保持一致(拥有私钥的情况除外),因此签名公钥与原来的公钥也是不同的。因而可以根据签名的公钥的对比来判断私钥是否一致,完成签名的验证。但由于是应用程序本地的自行验证,因此需要在应用程序代码中保存签名公钥的样本,以便对比时使用,因而该样本很容易被找到并被修改替换,从而使得验证准确性大大降低。
发明内容
本发明的主要目的在于公开一种应用程序包的验证方法及装置,以至少解决相关技术中由于应用程序代码中签名公钥的样本很容易被找到并被修改替换,从而使得验证准确性大大降低的问题。
根据本发明的一个方面,提供了一种应用程序包的验证方法。
根据本发明的应用程序包的验证方法包括:从接收到的当前应用程序包中获取已经被分为多段的签名公钥的样本;对上述样本重新组合并执行解密处理;对上述样本执行反乱序处理还原为上述签名密钥的明文;将上述明文与上述当前应用程序包对应的签名密钥进行对比,验证上述上述应用程序包是否被修改。
根据本发明的另一方面,提供了一种应用程序包的验证装置。
根据本发明的应用程序包的验证装置包括:获取模块,用于从接收到的当前应用程序包中获取已经被分为多段的签名公钥的样本;组合解密模块,用于对上述样本重新组合并执行解密处理;还原模块,用于对上述样本执行反乱序处理还原为上述签名密钥的明文;对比模块,用于将上述明文与上述当前应用程序包对应的签名密钥进行对比,验证上述上述应用程序包是否被修改。
与现有技术相比,本发明实施例至少具有以下优点:由于发送方对签名密钥的明文进行乱序、加密和分段处理,接收方对接收到的应用程序包中签名公钥进行组合、解密、反乱序处理,再与该应用程序包对应的签名密钥进行对比,因此签名密钥的样本难以被获取并被修改替换,从而使得验证准确性大大提高。
附图说明
图1是根据本发明实施例的应用程序包的验证方法的流程图;
图2是根据本发明优选实施例的应用程序包的发送方法的流程图;
图3是根据本发明优选实施例的应用程序包的验证方法的流程图;
图4是根据本发明实施例的应用程序包的验证装置的结构框图;以及
图5是根据本发明优选实施例的应用程序包的验证装置的结构框图。
具体实施方式
下面结合说明书附图对本发明的具体实现方式做一详细描述。
图1是根据本发明实施例的应用程序包的验证方法的流程图。如图1所示,该应用程序包的验证方法主要包括以下处理:
步骤S101:从接收到的当前应用程序包中获取已经被分为多段的签名公钥的样本;
步骤S103:对上述样本重新组合并执行解密处理;
步骤S105:对上述样本执行反乱序处理还原为上述签名密钥的明文;
步骤S107:将上述明文与上述当前应用程序包对应的签名密钥进行对比,验证上述上述应用程序包是否被修改。
相关技术中,由于是应用程序本地的自行验证,因此需要在应用程序代码中保存签名公钥的样本,以便对比时使用,因而该样本很容易被找到并被修改替换,从而使得验证准确性大大降低。而采用图1所示的方法,发送方对签名密钥的明文进行乱序、加密和分段处理,接收方对接收到的应用程序包中签名公钥进行组合、解密、反乱序处理,再与该应用程序包对应的签名密钥进行对比,因此签名密钥的样本难以被获取并被修改替换,从而使得验证准确性大大提高。
优选地,在执行步骤S101之前,还可以包括以下处理:将签名密钥的明文进行乱序处理;将执行乱序处理后的上述明文加密形成密文;将上述密文分成多段并设置在上述应用程序包中;发送上述应用程序包。
在优选实施过程中,为了防止该样本被找到并修改替换,需要对该样本进行乱序、加密,得到公钥样本的密文样本,并将该密文样本分段保存于代码中。以下结合图2进行进一步说明。
图2是根据本发明优选实施例的应用程序包的发送方法的流程图。如图2所示,该应用程序包的发送方法主要包括以下处理:
步骤S201:对待发送的签名公钥的明文执行乱序处理。
其中,乱序是保持明文的基本元素(如文本的字符、数据的比特位)相同,但顺序被打乱。
步骤S203:对经过乱序处理的签名公钥的明文进行加密。
步骤S205:将加密后的签名公钥的密文分为多段。
步骤S207:将该密文样本分段设置在上述应用程序包的代码中并发送。
优选地,步骤S107中,将上述明文与当前应用程序包对应的签名密钥进行对比,验证上述上述应用程序包是否被修改可以进一步包括以下处理:在上述明文与上述应用程序包对应的签名密钥一致时,确定上述应用程序包未被修改,验证通过;否则,确定上述应用程序包已被修改,流程结束。
优选实施过程中,在验证时,可以先获取APK包当前的签名公钥(当然,该步骤只要在对比前执行即可),然后获取保存在代码中的已被分为多段的签名公钥的对比样本,将该样本重新组合、解密,并经过反乱序还原为原来的次序,得到签名公钥的明文。再将得到的签名公钥的明文样本与获取到的当前APK包的签名公钥进行对比,如果两者一致,则说明当前APK包的签名信息与原来的签名信息一致,APK包未被修改。否则,说明签名不一致,APK包已经被修改,此时流程结束,可以退出程序。
优选地,可以基于C或C++代码实现上述应用程序包的验证方法,并在Java代码中通过Java本地调用(Java Native Interface,简称为JNI)。通过C/C++代码完成应用程序的自我签名验证,使得应用程序的破解难度增大,降低应用程序包内容被篡改或者替换的可能性,使应用程序变得更加安全。
优选地,在确定上述应用程序包未被修改,验证通过之后,还可以包括以下处理:执行程序的初始化操作。
为了防止在Java代码上被修改,导致该验证过程被绕开,使其失效。因此还需要在C/C++代码中,签名验证通过后,进行程序中一些重要的,必不可少的初始化工作。如果通过修改Java代码以绕开签名验证工作,则程序的初始化工作也被绕开而未得到执行,而缺少了程序的重要初始化工作,应用将不能被正常使用。
以下结合图3进一步描述上述优选实施方式。
图3是根据本发明优选实施例的应用程序包的验证方法的流程图。如图3所示,该应用程序包的验证方法主要包括以下处理:
步骤S301:从接收到的当前应用程序包中获取已经被分为多段的签名公钥的样本。
步骤S303:对分为多段的签名公钥的样本进行重新组合。
步骤S305:对上述样本重新组合并执行解密处理。
步骤S307:对上述样本执行反乱序处理还原为上述签名密钥的明文。
步骤S309:获取当前应用程序包对应的签名密钥。
步骤S311:将步骤S307获取到的签名密钥的明文与步骤S309获取到的当前应用程序包对应的签名密钥进行对比,判断两者是否一致。当两者一致时,执行步骤S313,否则,执行步骤S315。
步骤S313:退出程序,流程结束。
步骤S315:执行应用初始化。
图4是根据本发明实施例的应用程序包的验证装置的结构框图。如图4所示,该应用程序包的验证装置包括:获取模块40,用于从接收到的当前应用程序包中获取已经被分为多段的签名公钥的样本;组合解密模块42,用于对上述样本重新组合并执行解密处理;还原模块44,用于对上述样本执行反乱序处理还原为上述签名密钥的明文;对比模块46,用于将上述明文与上述当前应用程序包对应的签名密钥进行对比,验证上述上述应用程序包是否被修改。
图4所示的装置,对接收到的应用程序包中签名公钥进行组合、解密、反乱序处理,再与该应用程序包对应的签名密钥进行对比,因此签名密钥的样本难以被获取并被修改替换,从而使得验证准确性大大提高。
优选地,如图5所示,对比模块46,可以进一步用于用户在上述明文与上述应用程序包对应的签名密钥一致时,确定上述应用程序包未被修改,验证通过;在上述明文与上述应用程序包对应的签名密钥不一致时,确定上述应用程序包已被修改。
优选地,如图5所示,上述装置还可以包括:初始化模块48,与对比模块46相连接,用于执行程序的初始化操作。
优选地,如图5所示,上述装置还可以包括:乱序模块50,用于将签名密钥的明文进行乱序处理;加密模块52,用于将执行乱序处理后的上述明文加密形成密文;分段模块54,用于将上述密文分成多段并设置在上述应用程序包中;发送模块56,用于发送上述应用程序包。
优选地,上述应用程序包的验证装置,可以基于C或C++代码实现上述应用程序包的验证。
综上所述,借助本发明提供的上述实施例,以C/C++代码实现签名信息的验证,并在签名信息验证通过后,同样以C/C++代码完成应用程序的重要初始化工作,以防签名信息验证功能被绕过,保证签名信息验证功能被正确执行,完成应用程序的自我签名验证。通过C/C++代码完成应用程序的本地签名验证,使得应用程序的破解难度增大,降低应用程序包内容被篡改或者替换的可能性,使应用程序变得更加安全。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
Claims (10)
1.一种应用程序包的验证方法,其特征在于,包括:
从接收到的当前应用程序包中获取已经被分为多段的签名公钥的样本;
对所述样本重新组合并执行解密处理;
对所述样本执行反乱序处理还原为所述签名密钥的明文;
将所述明文与所述当前应用程序包对应的签名密钥进行对比,验证所述所述应用程序包是否被修改。
2.根据权利要求1所述的方法,其特征在于,将所述明文与当前应用程序包对应的签名密钥进行对比,验证所述所述应用程序包是否被修改包括:
在所述明文与所述应用程序包对应的签名密钥一致时,确定所述应用程序包未被修改,验证通过;否则,确定所述应用程序包已被修改,流程结束。
3.根据权利要求1所述的方法,其特征在于,确定所述应用程序包未被修改,验证通过之后,还包括:执行程序的初始化操作。
4.根据权利要求1所述的方法,其特征在于,从当前应用程序包中获取已经被分为多段的签名公钥的样本之前,还包括:
将签名密钥的明文进行乱序处理;
将执行乱序处理后的所述明文加密形成密文;
将所述密文分成多段并设置在所述应用程序包中;
发送所述应用程序包。
5.根据权利要求1至4中任一项所述的方法,其特征在于,基于C或C++代码实现所述应用程序包的验证方法。
6.一种应用程序包的验证装置,其特征在于,包括:
获取模块,用于从接收到的当前应用程序包中获取已经被分为多段的签名公钥的样本;
组合解密模块,用于对所述样本重新组合并执行解密处理;
还原模块,用于对所述样本执行反乱序处理还原为所述签名密钥的明文;
对比模块,用于将所述明文与所述当前应用程序包对应的签名密钥进行对比,验证所述所述应用程序包是否被修改。
7.根据权利要求6所述的装置,其特征在于,所述对比模块,进一步用户在所述明文与所述应用程序包对应的签名密钥一致时,确定所述应用程序包未被修改,验证通过;在所述明文与所述应用程序包对应的签名密钥不一致时,确定所述应用程序包已被修改。
8.根据权利要求6所述的装置,其特征在于,还包括:初始化模块,用于执行程序的初始化操作。
9.根据权利要求6所述的装置,其特征在于,还包括:
乱序模块,用于将签名密钥的明文进行乱序处理;
加密模块,用于将执行乱序处理后的所述明文加密形成密文;
分段模块,用于将所述密文分成多段并设置在所述应用程序包中;
发送模块,用于发送所述应用程序包。
10.根据权利要求6至9中任一项所述的装置,其特征在于,所述应用程序包的验证装置,基于C或C++代码实现所述应用程序包的验证。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410557106.1A CN104393992B (zh) | 2014-10-20 | 2014-10-20 | 应用程序包的验证方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410557106.1A CN104393992B (zh) | 2014-10-20 | 2014-10-20 | 应用程序包的验证方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104393992A true CN104393992A (zh) | 2015-03-04 |
CN104393992B CN104393992B (zh) | 2019-01-04 |
Family
ID=52611828
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410557106.1A Active CN104393992B (zh) | 2014-10-20 | 2014-10-20 | 应用程序包的验证方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104393992B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108923910A (zh) * | 2018-07-12 | 2018-11-30 | 南方电网科学研究院有限责任公司 | 一种移动应用apk防篡改的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1558594A (zh) * | 2004-01-14 | 2004-12-29 | 哈尔滨工业大学 | 一种电子文档的保密、认证、权限管理与扩散控制的处理方法 |
CN1617584A (zh) * | 2004-12-06 | 2005-05-18 | 武汉大学 | 一种视频信息的动态随机置乱加解密方法 |
CN1728631A (zh) * | 2004-07-27 | 2006-02-01 | 英业达股份有限公司 | 加密电子文件传送方法及结构 |
US20090112823A1 (en) * | 2007-10-30 | 2009-04-30 | Sandisk Il Ltd. | Write failure protection for hierarchical integrity schemes |
CN102546604A (zh) * | 2011-12-22 | 2012-07-04 | 四川长虹电器股份有限公司 | 智能电视应用程序安全控制方法 |
-
2014
- 2014-10-20 CN CN201410557106.1A patent/CN104393992B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1558594A (zh) * | 2004-01-14 | 2004-12-29 | 哈尔滨工业大学 | 一种电子文档的保密、认证、权限管理与扩散控制的处理方法 |
CN1728631A (zh) * | 2004-07-27 | 2006-02-01 | 英业达股份有限公司 | 加密电子文件传送方法及结构 |
CN1617584A (zh) * | 2004-12-06 | 2005-05-18 | 武汉大学 | 一种视频信息的动态随机置乱加解密方法 |
US20090112823A1 (en) * | 2007-10-30 | 2009-04-30 | Sandisk Il Ltd. | Write failure protection for hierarchical integrity schemes |
CN102546604A (zh) * | 2011-12-22 | 2012-07-04 | 四川长虹电器股份有限公司 | 智能电视应用程序安全控制方法 |
Non-Patent Citations (1)
Title |
---|
丁文霞等: "基于混沌的快速格雷码分段置乱视频加密算法", 《通信学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108923910A (zh) * | 2018-07-12 | 2018-11-30 | 南方电网科学研究院有限责任公司 | 一种移动应用apk防篡改的方法 |
CN108923910B (zh) * | 2018-07-12 | 2021-06-25 | 南方电网科学研究院有限责任公司 | 一种移动应用apk防篡改的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104393992B (zh) | 2019-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109194625B (zh) | 一种基于云端服务器的客户端应用保护方法、装置及存储介质 | |
CN109388961B (zh) | 存储设备的安全控制方法及存储设备 | |
CN109284585B (zh) | 一种脚本加密方法、脚本解密运行方法和相关装置 | |
CN104216830B (zh) | 设备软件的一致性检测方法及系统 | |
CN101369889A (zh) | 一种对文档进行电子签名的系统和方法 | |
CN105320535A (zh) | 一种安装包的校验方法、客户端、服务器及系统 | |
US20180204004A1 (en) | Authentication method and apparatus for reinforced software | |
CN104463040A (zh) | 一种密码安全输入方法及系统 | |
CN104298932A (zh) | 一种so文件的调用方法及装置 | |
CN109586920A (zh) | 一种可信验证方法及装置 | |
JP2016012912A (ja) | 送信ノード、受信ノード、通信ネットワークシステム、メッセージ作成方法およびコンピュータプログラム | |
CN102663325A (zh) | 一种软件绑定硬件的方法及系统 | |
CN105184181A (zh) | 文件的加密方法、解密方法及装置 | |
CN107103214A (zh) | 一种应用于Android系统的应用程序反调试方法及装置 | |
CN117041048A (zh) | 车辆系统升级方法、ota升级文件云端处理方法及电子设备 | |
CN107409046A (zh) | 用于在可编程的硬件模块中生成密钥的装置和方法 | |
CN104008344A (zh) | ePub文档数据安全保护方法及系统 | |
CN111385083B (zh) | 密钥保护方法及密钥保护系统 | |
CN103378966A (zh) | 安全动态片上密钥编程 | |
CN104393992A (zh) | 应用程序包的验证方法及装置 | |
CN105809494A (zh) | 发票生成及验证方法及系统 | |
CN109784072B (zh) | 一种安全文件管理方法和系统 | |
CN104392153A (zh) | 一种软件保护方法及系统 | |
CN106650342B (zh) | 一种Jar包加固方法及系统 | |
CN102710601B (zh) | 基于身份文件的安全加密和签名方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |