CN108667594B - 一种基于pki公钥算法的软件程序模块完整性检测方法 - Google Patents
一种基于pki公钥算法的软件程序模块完整性检测方法 Download PDFInfo
- Publication number
- CN108667594B CN108667594B CN201710189427.4A CN201710189427A CN108667594B CN 108667594 B CN108667594 B CN 108667594B CN 201710189427 A CN201710189427 A CN 201710189427A CN 108667594 B CN108667594 B CN 108667594B
- Authority
- CN
- China
- Prior art keywords
- main program
- module
- program
- public key
- software
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/006—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols involving public key infrastructure [PKI] trust models
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
- H04L63/123—Applying verification of the received information received data contents, e.g. message integrity
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3263—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
Abstract
本发明公开的一种基于PKI公钥算法的软件程序模块完整性检测方法,其基于PKI公钥算法和专用加载模块,其使用固定的证书对程序模块进行签名,并在应用的主程序中,通过包含固定的公钥证书、模块签名、及导入表数字信封,在程序运行时校验模块签名、加载模块、解密导入表信封、修复导入表、开启运行时代码区签名校验线程、并进入原程序入口点继续执行,其中签名时使用的私钥必须和验签时使用的证书一一对应。本发明的有益效果在于:在不影响软件程序正常功能的前提下防止软件被非法篡改和利用,同时也保护了应用软件所有者的知识产权。
Description
技术领域
本发明涉及软件保护技术领域,尤其涉及一种基于PKI公钥算法的软件程序模块完整性检测方法。
背景技术
随着计算机在日常生产中的普及,在计算机上运行的各种应用软件也愈发丰富起来,到如今可谓是一片繁荣的景象。在各种应用软件一片繁荣的背后,在利益的驱使下,各种对应用软件的非法篡改、破解技术也不断发展,其主要方式为通过静态或者动态分析的方法对软件实施修改,从而达到获取软件的使用许可、破坏软件的正常功能或者执行恶意代码的目的。这种行为一方面使得软件所有者的知识产权受到损失,另一方面威胁用户本地计算机的安全。
现有的一些软件保护手段大多采用代码混淆、软件加壳或者将代码放到自实现虚拟机执行的方式对软件实施保护,但是现有的一些软件保护手段均不能有效地防止软件被非法篡改和利用,不但会降低软件程序的运行效率,而且有可能造成软件被杀毒软件禁用的情况出现,大大的影响了用户的使用体验。
为此,申请人进行了有益的探索和尝试,找到了解决上述问题的办法,下面将要介绍的技术方案便是在这种背景下产生的。
发明内容
本发明所要解决的技术问题:针对现有的软件保护手段存在不能有效地防止软件被非法篡改和利用、导致软件程序效率降低和有可能软件被杀毒软件禁用的情况出现等问题,而提供一种在不影响软件程序正常功能的前提下防止软件被非法篡改和利用的基于PKI公钥算法的软件程序模块完整性检测方法。
本发明所解决的技术问题可以采用以下技术方案来实现:
一种基于PKI公钥算法的软件程序模块完整性检测方法,包括以下步骤:
步骤1,采用固定的证书对软件程序除主程序之外的所有模块进行签名,同时对包括所述主程序在内的所有模块的可执行代码区进行签名;
步骤2,在主程序中增加一个新增节区,同时将步骤1得到的签名信息和公钥证书保存至所述主程序的新增节区内;
步骤3,获取主程序的导入表,并采用所述固定的证书对所述主程序的导入表进行数字信封处理得到导入表数字信封,再将所述导入表数字信封保存至所述主程序的新增节区内,同时清空所述主程序的导入表的非系统库导入表项;
步骤4,创建一个用于实现对模块进行签名校验和加载、解密导入表数字信封、修复导入表的功能的专用加载模块,并将所述专用加载模块附加到主程序的新增节区内;
步骤5,将主程序的原入口点保存至主程序的新增节区内,修改主程序的入口点为专用加载模块,软件程序运行时先对保存在所述主程序的新增节区内的专用加载模块运行,所述专用加载模块对可执行模块进行签名校验、加载,同时再开启一个单独的线程对各可执行模块在内存中的完整性进行动态检测,以防止被篡改,最后主线程转到主程序原入口点执行。
由于采用了如上的技术方案,本发明的有益效果在于:本发明提供的完整性校验方法,除了应用的启动部分外,所有程序可执行模块都可以用PKI算法的签名验签得到保护,在不影响软件程序正常功能的前提下防止软件被非法篡改和利用,同时也保护了应用软件所有者的知识产权。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的流程示意图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
名词解析
可执行文件:即可执行程序,windows为pe格式,linux和android平台下为elf格式,大多以头加节区的方式组织。
节区:英文描述为section,表示可执行文件中的一个代码块或者数据块
程序入口:即可执行文件开始执行后开始运行位置。
PKI:即公钥基础设施,具体描述可参考百度百科
http://baike.baidu.com/link?url=3A-5BhM_c0tlNvAHfDHXi5_Im7FJg89A3FLDXTN_O2Qw7LifdK83tSKZVmyHGODaPqvVkn6DrYoLQ6Xqm3DRFa。
公钥算法:即使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥进行签名验签的算法。
导入表:即可执行文件头中记录程序运行时需导入dll信息的表。
重定位表:即记录程序中位置无关代码信息的表。
shellcode:执行一定功能的一段机器码代码片段。
本发明的基于PKI公钥算法的软件程序模块完整性检测方法,其基于PKI公钥算法和专用加载模块,使用固定的证书对程序模块进行签名,并在应用的主程序中,通过包含固定的公钥证书、模块签名、及导入表数字信封,在程序运行时校验模块签名、加载模块、解密导入表信封、修复导入表、开启运行时代码区签名校验线程、并进入原程序入口点继续执行,其中签名时使用的私钥必须和验签时使用的证书一一对应。本发明的方法具体如下:
参见图1,图中给出的是一种基于PKI公钥算法的软件程序模块完整性检测方法,包括以下步骤:
步骤1,采用固定的证书对软件程序除主程序之外的所有模块进行签名,同时对包括所述主程序在内的所有模块的可执行代码区进行签名;
步骤2,在主程序中增加一个新增节区,同时将步骤1得到的签名信息和公钥证书保存至所述主程序的新增节区内;
步骤3,获取主程序的导入表,并采用所述固定的证书对所述主程序的导入表进行数字信封处理得到导入表数字信封,再将所述导入表数字信封保存至所述主程序的新增节区内,同时清空所述主程序的导入表的非系统库导入表项;
步骤4,创建一个用于实现对模块进行签名校验和加载、解密导入表数字信封、修复导入表的功能的专用加载模块,并将所述专用加载模块附加到主程序的新增节区内;
步骤5,将主程序的原入口点保存至主程序的新增节区内,修改主程序的入口点为专用加载模块,软件程序运行时先对保存在所述主程序的新增节区内的专用加载模块运行,所述专用加载模块对可执行模块进行签名校验、加载,同时再开启一个单独的线程对各可执行模块在内存中的完整性进行动态检测,以防止被篡改,最后主线程转到主程序原入口点执行。
以下通过一个具体实例来进一步说明本发明的技术方案:
1)选择一种公钥加密算法(RSA或者ECC),并使用对应的ca签发或者自签发生成证书;
2)实现一段具有如下功能的shellcode加载模块:
A、模块验签、加载
B、解密程序导入表数字信封、修复导入表、重定位表等可执行文件头结构
C、开启一个线程,并在该线程中进行运行时检测模块代码区签名
D、完成上述工作后转到原程序入口点执行
3)实现一个具有如下功能的工具:
A、对可执行模块签名生成签名信息
B、对可执行模块代码区签名生成签名信息
C、获取程序导入表,对导入表做数字信封,并清空非系统库导入表项
D、在程序中新增节区保存签名信息、公钥证书及导入表数字信封
E、修改可执行程序入口点,并保存主程序的原入口点到新增节区
F、包括shellcode加载模块代码,并将该加载模块写入主程序
G、可配置证书和可执行模块程序进行A、B、C、D、D、E、F操作
4)用步骤1)生成的证书配置到步骤3)实现的工具中,该工具负责将可执行模块签名信息、公钥证书、可执行模块代码区签名信息、导入表数字信封、原程序入口点及加载模块代码按可执行文件格式加入到主程序新增节区中,并将主程序的入口点修改为加载模块,应用程序启动时先运行专用的加载模块,加载模块完成模块验签、加载、修复主程序可执行头结构、开启运行时模块检测线程,然后转到主程序原入口点执行;
5)应用程序发布时,只需替换主程序为经过处理过的主程序即可。
本发明提供的完整性校验方法,除了应用的启动部分外,所有程序可执行模块都可以用PKI算法的签名验签得到保护,在不影响软件程序正常功能的前提下防止软件被非法篡改和利用,同时也保护了应用软件所有者的知识产权。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (1)
1.一种基于PKI公钥算法的软件程序模块完整性检测方法,其特征在于,包括以下步骤:
步骤1,采用固定的证书对软件程序除主程序之外的所有模块进行签名,同时对包括所述主程序在内的所有模块的可执行代码区进行签名;
步骤2,在主程序中增加一个新增节区,同时将步骤1得到的签名信息和公钥证书保存至所述主程序的新增节区内;
步骤3,获取主程序的导入表,并采用所述固定的证书对所述主程序的导入表进行数字信封处理得到导入表数字信封,再将所述导入表数字信封保存至所述主程序的新增节区内,同时清空所述主程序的导入表的非系统库导入表项;
步骤4,创建一个用于实现对模块进行签名校验和加载、解密导入表数字信封、修复导入表的功能的专用加载模块,并将所述专用加载模块附加到主程序的新增节区内;
步骤5,将主程序的原入口点保存至主程序的新增节区内,修改主程序的入口点为专用加载模块,软件程序运行时先对保存在所述主程序的新增节区内的专用加载模块运行,所述专用加载模块对可执行模块进行签名校验、加载,同时再开启一个单独的线程对各可执行模块在内存中的完整性进行动态检测,以防止被篡改,最后主线程转到主程序原入口点执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710189427.4A CN108667594B (zh) | 2017-03-27 | 2017-03-27 | 一种基于pki公钥算法的软件程序模块完整性检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710189427.4A CN108667594B (zh) | 2017-03-27 | 2017-03-27 | 一种基于pki公钥算法的软件程序模块完整性检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108667594A CN108667594A (zh) | 2018-10-16 |
CN108667594B true CN108667594B (zh) | 2022-10-11 |
Family
ID=63786268
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710189427.4A Active CN108667594B (zh) | 2017-03-27 | 2017-03-27 | 一种基于pki公钥算法的软件程序模块完整性检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108667594B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114338050A (zh) * | 2022-03-14 | 2022-04-12 | 麒麟软件有限公司 | 一种应用程序接口安全管控方法、系统及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102024127A (zh) * | 2010-11-17 | 2011-04-20 | 中国联合网络通信集团有限公司 | 应用软件控制平台、使用者终端、分发系统及方法 |
CN104462965A (zh) * | 2014-11-14 | 2015-03-25 | 华为技术有限公司 | 应用程序完整性验证方法及网络设备 |
CN105447390A (zh) * | 2015-11-16 | 2016-03-30 | 国网智能电网研究院 | 一种基于数字证书系统的软件版本可信管理方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8332652B2 (en) * | 2003-10-01 | 2012-12-11 | International Business Machines Corporation | Computing device that securely runs authorized software |
US8364973B2 (en) * | 2007-12-31 | 2013-01-29 | Intel Corporation | Dynamic generation of integrity manifest for run-time verification of software program |
-
2017
- 2017-03-27 CN CN201710189427.4A patent/CN108667594B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102024127A (zh) * | 2010-11-17 | 2011-04-20 | 中国联合网络通信集团有限公司 | 应用软件控制平台、使用者终端、分发系统及方法 |
CN104462965A (zh) * | 2014-11-14 | 2015-03-25 | 华为技术有限公司 | 应用程序完整性验证方法及网络设备 |
CN105447390A (zh) * | 2015-11-16 | 2016-03-30 | 国网智能电网研究院 | 一种基于数字证书系统的软件版本可信管理方法 |
Non-Patent Citations (1)
Title |
---|
基于PKI的软件版权保护系统的设计与实现;赵盛;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20041215;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108667594A (zh) | 2018-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3678324B1 (en) | Method and apparatus for encrypting and decrypting product information | |
KR100792287B1 (ko) | 자체 생성한 암호화키를 이용한 보안방법 및 이를 적용한보안장치 | |
US8341422B2 (en) | Method and apparatus for incremental code signing | |
US10419217B2 (en) | Security information configuration method, security verification method, and related chip | |
US8332652B2 (en) | Computing device that securely runs authorized software | |
US8019994B2 (en) | Authentication of a request to alter at least one of a BIOS and a setting associated with the BIOS | |
US7325126B2 (en) | System and method for distributed module authentication | |
KR20090007123A (ko) | 보안 부팅 방법 및 그 방법을 사용하는 반도체 메모리시스템 | |
CN110245466B (zh) | 软件完整性保护和验证方法、系统、设备及存储介质 | |
CN103765429A (zh) | 数字签名机构相关的平台秘密 | |
CN109445705A (zh) | 固件认证方法及固态硬盘 | |
US8347109B2 (en) | Secure serial number generation | |
JP2007094879A (ja) | オペレーティングシステム用基本プログラムの認証システム、これに用いるコンピュータ、およびコンピュータプログラム | |
CN108667594B (zh) | 一种基于pki公钥算法的软件程序模块完整性检测方法 | |
CN107958141A (zh) | 一种基于芯片id号的软件保护方法 | |
CN107092832A (zh) | 一种及时弥补Secure‑Boot安全漏洞的方法 | |
CN110855429A (zh) | 一种基于tpm的软件密钥保护方法 | |
CN110674525A (zh) | 一种电子设备及其文件处理方法 | |
CN107391970B (zh) | Flash应用程序中的函数访问控制方法及装置 | |
WO2020088515A1 (zh) | Pos用户公钥安全认证方法、装置和终端设备 | |
US20210406378A1 (en) | Data protection in a pre-operation system environment based on an embedded key of an embedded controller | |
CN112131612B (zh) | 一种cf卡数据防篡改方法、装置、设备及介质 | |
CN115587389A (zh) | 一种固件安全保护方法及系统 | |
CN117828595A (zh) | 一种攻击程序通过杀毒软件检测的方法和装置 | |
CN115221477A (zh) | 授权许可方法、许可证制作方法、芯片装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
CB02 | Change of applicant information |
Address after: 200436 Room 601, Lane 299, Lane 299, JIANGCHANG West Road, Jingan District, Shanghai Applicant after: KOAL SOFTWARE Co.,Ltd. Address before: 200436 Room 601, Lane 299, Lane 299, JIANGCHANG West Road, Zhabei District, Shanghai Applicant before: SHANGHAI KOAL SOFTWARE Co.,Ltd. |
|
CB02 | Change of applicant information | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |