一种基于PKI公钥算法的软件程序模块完整性检测方法技术

技术编号:19186065 阅读:51 留言:0更新日期:2018-10-17 02:11
本发明专利技术公开的一种基于PKI公钥算法的软件程序模块完整性检测方法,其基于PKI公钥算法和专用加载模块,其使用固定的证书对程序模块进行签名,并在应用的主程序中,通过包含固定的公钥证书、模块签名、及导入表数字信封,在程序运行时校验模块签名、加载模块、解密导入表信封、修复导入表、开启运行时代码区签名校验线程、并进入原程序入口点继续执行,其中签名时使用的私钥必须和验签时使用的证书一一对应。本发明专利技术的有益效果在于:在不影响软件程序正常功能的前提下防止软件被非法篡改和利用,同时也保护了应用软件所有者的知识产权。

A method for integrity checking of software program modules based on PKI public key algorithm

The invention discloses a software program module integrity detection method based on PKI public key algorithm, which is based on PKI public key algorithm and special loading module. The program module is signed by a fixed certificate, and in the main program of the application, it contains a fixed public key certificate, a module signature, and an import table digital envelope. When the program runs, it checks the signature of the module, loads the module, decrypts the envelope of the import table, fixes the import table, opens the signature checking thread of the code area at run time, and enters the entry point of the original program to continue execution. The private key used in signing must correspond to the certificate used in checking. The invention has the beneficial effect of preventing the software from being illegally tampered with and utilized without affecting the normal function of the software program, and protecting the intellectual property rights of the application software owners.

【技术实现步骤摘要】
一种基于PKI公钥算法的软件程序模块完整性检测方法
本专利技术涉及软件保护
,尤其涉及一种基于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)实现的工具中,该工具负责将可执行模块签名信息、公钥证书、可执行模块代码区签名信息、导入表数字信封、原程序入口点及加载模块代码按可执行文件格式加入到主程序新增节区中,并将主程本文档来自技高网...

【技术保护点】
1.一种基于PKI公钥算法的软件程序模块完整性检测方法,其特征在于,包括以下步骤:步骤1,采用固定的证书对软件程序除主程序之外的所有模块进行签名,同时对包括所述主程序在内的所有模块的可执行代码区进行签名;步骤2,在主程序中增加一个新增节区,同时将步骤1得到的签名信息和公钥证书保存至所述主程序的新增节区内;步骤3,获取主程序的导入表,并采用所述固定的证书对所述主程序的导入表进行数字信封处理得到导入表数字信封,再将所述导入表数字信封保存至所述主程序的新增节区内,同时清空所述主程序的导入表的非系统库导入表项;步骤4,创建一个用于实现对模块进行签名校验和加载、解密导入表数字信封、修复导入表的功能的专用加载模块,并将所述专用加载模块附加到主程序的新增节区内;步骤5,将主程序的原入口点保存至主程序的新增节区内,修改主程序的入口点为专用加载模块,软件程序运行时先对保存在所述主程序的新增节区内的专用加载模块运行,所述专用加载模块对可执行模块进行签名校验、加载,同时再开启一个单独的线程对各可执行模块在内存中的完整性进行动态检测,以防止被篡改,最后主线程转到主程序原入口点执行。

【技术特征摘要】
1.一种基于PKI公钥算法的软件程序模块完整性检测方法,其特征在于,包括以下步骤:步骤1,采用固定的证书对软件程序除主程序之外的所有模块进行签名,同时对包括所述主程序在内的所有模块的可执行代码区进行签名;步骤2,在主程序中增加一个新增节区,同时将步骤1得到的签名信息和公钥证书保存至所述主程序的新增节区内;步骤3,获取主程序的导入表,并采用所述固定的证书对所述主程序的导入表进行数字信封处理得到导入表数字信封,再将所述导入表数字信封保存至所述主程序的新增节区内,同时清空所述主程序的导入...

【专利技术属性】
技术研发人员:彭相钰曾政王佩成
申请(专利权)人:上海格尔软件股份有限公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1