一种在软件源代码未知情况下对可执行文件进行加密方法

文档序号:6431798阅读:202来源:国知局
专利名称:一种在软件源代码未知情况下对可执行文件进行加密方法
技术领域
本发明涉及一种加密方法,尤其是涉及一种在软件源代码未知情况下对可执行文件进行加密方法。
背景技术
HOOK API技术是指截获特定进程或系统对某个API函数的调用,使得API的执行流程转向指定的代码。Windows下的应用程序都有自己的地址空间,它们只能调用自己地址空间中的函数,所以在HOOK API之前,必须将一个可以代替API执行的自定义函数(一般称这个函数为代理函数)的执行代码注入到目标进程,然后再想办法将目标进程对该API的调用改为对注入到目标进程中的自定义调用,这样可以实现API函数的拦截。在Windows 下,截获API是一项相当有用的技术,它使得用户有机会干预其他应用程序的程序流程。本发明中采用较简单的一种拦截方法,在这个被注入到目标进程的DLL中写一个与要HOOK的 API函数的签名完全相同的函数(即代理函数),然后让目标进程加载这个DLL。当执行初始化代码的时候,目标进程对这个API的调用全部改为了对代理函数的调用,即可API函数的拦截。RSA加密算法是第一个较为完善的公开密钥算法。到目前为止,RSA仍然是最容易理解和实现的一种公钥算法,并且在世界上许多地方已成为事实上的标准,而且是密码学上十分成熟的算法,广泛用于数据的加密和数字签名。该算法采用一对公钥和私钥,从公钥难以推出私钥,反之从私钥也很难推出公钥。软件加密一词来源已久,是厂商为了保护软件开发商的利润而采取的一种软件保护方式。目前已存在多种软件加密保护技术,如序列号保护、时间限制、Key File保护、加密狗等方式。但是,目前大部分软件加密都在软件的源代码中进行开发的,尚缺少一种在软件源代码未知的情况下进行加密的方法。本发明实现对软件的可执行文件进行加密的方法。所以,研究一种能在软件源代码未知的情况下的进行加密的算法也势在必行。

发明内容
本发明主要是解决现有技术所存在的技术问题;提供了一种实现了 “一机一许可文件”,即一台计算机对应一个许可文件,那么即使某些许可文件被破解传播也不能在其他计算机上使用。而且保护方法实现起来比较简单,不需要对硬件以及软件做出大的改动,不需要增加额外的成本,并且大大的降低了对软件进行加密的难度,也有效的减少了软件侵权的一种在软件源代码未知情况下对可执行文件进行加密方法。本发明的上述技术问题主要是通过下述技术方案得以解决的一种在软件源代码未知情况下对可执行文件进行加密方法,其特征在于该方法包括以下步骤
步骤1,启动已注入自定义动态链接库的可执行文件; 步骤2,检查许可文件是否存在;
步骤3,若许可文件不存在,向用户提供本地机器的计算机网卡MAC地址以及应用软件信息,并要求用户提供许可文件;
步骤4,用户以电话、传真、email等方式向软件版权拥有者递交该计算机的申请码; 步骤5,软件版权拥有者通过加密组件对用户提交的申请码和要授予软件的限制信息进行加密,生成许可文件;
步骤6,软件版权拥有者以email、Internet方式将许可文件反馈到用户端; 步骤7,用户启动软件,客户端验证许可文件是否有效; 步骤8,若许可文件有效,则运行软件;
本发明创造性的提供了一种用于软件加密的方法。在软件源代码未知的情况下,对软件的可执行文件进行加密。在此加密算法中,可以利用计算机的网卡MAC地址、应用软件信息以及授予用户的限制信息生成密钥,实现了“一机一许可文件”,即一台计算机对应一个许可文件,那么即使某些许可文件被破解传播也不能在其他计算机上使用。而且保护方法实现起来比较简单,不需要对硬件以及软件做出大的改动,不需要增加额外的成本,并且大大的降低了对软件进行加密的难度,也有效的减少了软件的侵权。在上述的一种在软件源代码未知情况下对可执行文件进行加密方法,该方法还包括以下步骤所述的步骤2中,检查许可文件是否存在,若许可文件存在,则执行步骤7。在上述的一种在软件源代码未知情况下对可执行文件进行加密方法,该方法还包括以下步骤所述步骤7中,
步骤3. 1,若许可文件无效,向用户提供本地机器的计算机网卡MAC地址,并要求用户提供许可文件;
步骤3. 2,执行步骤4。在上述的一种在软件源代码未知情况下对可执行文件进行加密方法,所述步骤5 中,生成许可文件的具体方法为根据计算机的硬件信息、应用软件信息以及用户运行软件的限制信息,生成唯一标识用户的标识码。在此过程中,需要软件版权拥有者拥有自定义的加密组件。在此方法中,自定义加密组件对信息进行加密的过程为根据自身需要,可以在自定义加密组件对话框中定义需要的信息选项,要求向自定义加密最组件提供用户的计算机硬件信息、软件信息以及对用户的限制信息后,自定义加密组件可以根据MD5算法对用户信息进行加密,生成产品密钥,并将用户标识码和密钥存储于一文件中,作为用户运行软件的许可文件。在上述的一种在软件源代码未知情况下对可执行文件进行加密方法,所述的步骤 1中,向可执行文件中注入自定义动态链接库的具体方法为通过API HOOK技术对选定的目标函数进行拦截,该目标函数具有在程序的运行过程中执行且只被执行一次的特点。在目标函数执行之前注入自定义的动态连接库,该动态链接库中可以完成用户自定义的用户注册、许可文件的验证等操作。在上述的一种在软件源代码未知情况下对可执行文件进行加密方法,所述步骤7
5中,客户端验证许可文件是否有效的具体方法为在用户启动软件时,首先检查许可文件是否存在,若存在则对许可文件的有效性进行验证,首先检查许可文件中存放的计算机硬件信息是否与本机的计算机硬件信息相同;然后,利用哈希函数将用户标识码转换为哈希序列码,同时,密钥经公钥解密之后得到同样格式的明文,对两者进行比较,若相等,则许可文件有效,顺利运行软件;若许可文件不存在或许可文件无效,则运行软件失败,向用户提供本地机器的计算机硬件信息。在上述的一种在软件源代码未知情况下对可执行文件进行加密方法,所述步骤5 中,加密过程采用RSA加密算法,首先对用户标识码通过MD5算法转换为Hash序列码,然后通过私钥加密,生成用户运行软件所需的密钥。然后,将用户标识码以及加密所得的密钥信息存储于一文件中,称此文件为许可文件。在上述的一种在软件源代码未知情况下对可执行文件进行加密方法,所述的步骤 1中,动态链接库的注入根据可执行文件的类型,选择在该软件执行过程中必定且只执行一次的API函数,利用API HOOK技术对该函数进行拦截,在目标函数执行之前注入自定义动态链接库。在动态链接库注入之后,系统在调用目标函数之前,会完成对自定义动态链接库的调用。因此,本发明具有如下优点实现了 “一机一许可文件”,即一台计算机对应一个许可文件,那么即使某些许可文件被破解传播也不能在其他计算机上使用。而且保护方法实现起来比较简单,不需要对硬件以及软件做出大的改动,不需要增加额外的成本,并且大大的降低了对软件进行加密的难度,也有效的减少了软件的侵权。


图1是本发明中软件拥有者根据所得信息生成许可文件的过程。图2是本发明中用户启动软件的过程。图3是本发明中注入动态连接件库前的函数调用过程。图4是本发明中注入自定义动态链接库之后的函数调用过程。
具体实施例方式下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。实施例
一种在软件源代码未知情况下对可执行文件进行加密方法,包括以下步骤 步骤1,启动已注入自定义动态链接库的可执行文件;向可执行文件中注入自定义动态链接库的具体方法为如图3为注入动态链接库的过程。在该过程中,在未注入动态链接库前,源函数执行过程可以直接调用目标函数(如箭头1所示),在目标函数执行完成后,通过直接返回(如箭头2所示)源函数。通过API HOOK技术对选定的目标函数进行拦截,该目标函数具有在程序的运行过程中执行且只被执行一次的特点。在目标函数执行之前注入自定义的动态连接库,该动态链接库中可以完成用户自定义的用户注册、许可文件的验证等操作。动态链接库的注入根据可执行文件的类型,选择在该软件执行过程中必定且只执行一次的API函数,利用API HOOK技术对该函数进行拦截,在目标函数执行之前注入自定义动态链接库。在动态链接库注入之后,系统在调用目标函数之前,会完成对自定义动态链接库的调用。图4表示在注入自定义动态链接库之后的函数调用过程。启动软件时,首先将目标函数开头不少于5个字节(JMP指令至少需要5个字节)的指令拷贝到跳板函数的头部, 假设拷贝的指令共size个字节,修改跳板函数头部偏移size+Ι处的指令,让其JMP到目标函数头部偏移size+Ι的地方;修改目标函数开头的指令,让它跳到自定义的动态链接库的函数。则此时各函数调用过程为源函数执行完毕,跳转到待注入的自定义的动态链接库的函数;然后调用跳板函数,执行由目标函数拷贝到跳板函数的部分;跳板函数执行完毕后, 跳转到目标函数,从目标函数中size+Ι的位置开始执行;目标函数执行完毕后先返回到自定义动态链接库的函数;然后由该函数返回到源函数。步骤2,检查许可文件是否存在;
步骤3,若许可文件不存在,向用户提供本地机器的计算机网卡MAC地址以及应用软件信息,并要求用户提供许可文件;若许可文件存在,则执行步骤7。步骤4,用户以电话、传真、email等方式向软件版权拥有者递交该计算机的申请码;
步骤5,软件版权拥有者通过加密组件对用户提交的申请码和要授予软件的限制信息进行加密,生成许可文件;图1为软件拥有者根据所得信息生成许可文件的过程首先,在用户首次使用软件或许可文件遭到更改时,注入的动态链接库会向用户提供本地计算机的网卡MAC地址和应用软件信息;然后,用户将计算机网卡地址和应用软件信息作为申请码提交至软件版权拥有者;然后,软件版权拥有者通过自定义的加密组件对用户申请码及授予用户的限制信息进行加密,生成许可文件;最后,软件版权拥有者通过email、Internet 等方式将许可文件反馈给用户。生成许可文件的具体方法为根据计算机的硬件信息、应用软件信息以及用户运行软件的限制信息,生成唯一标识用户的标识码,通过用户自定义的加密组件,对用户标识码进行加密生成产品密钥,并将用户标识码和密钥存储于一文件中, 作为用户运行软件的许可文件,其中,加密过程采用RSA加密算法,首先对用户标识码通过 MD5算法转换为Hash序列码,然后通过私钥加密,生成用户运行软件所需的密钥。然后,将用户标识码以及加密所得的密钥信息存储于一文件中,称此文件为许可文件。步骤6,软件版权拥有者以email、Internet方式将许可文件反馈到用户端; 步骤7,用户启动软件,客户端验证许可文件是否有效;客户端验证许可文件是否有效
的具体方法为如图2为用户启动软件的过程在用户启动软件时,自定义的动态链接库会读取软件安装目录下的许可文件;若许可文件存在,则读取本地机器的MAC地址,并与许可文件中的网卡地址进行比较;若两个MAC地址相同,验证许可文件是否有效;若许可文件有效,则验证程序用RSA算法对许可文件中加密后的密文解密出明文;然后,读取本地计算机的网卡地址以及应用软件的信息作为申请码,通过RSA算法中的MD5算法将申请码转换为哈希序列码,并进行比较;若两者相同,则顺利运行软件;否则,软件运行失败,并向用户提供计算机的网卡MAC地址;
步骤8,若许可文件有效,则运行软件;若许可文件无效,向用户提供本本地机器的计算机网卡MAC地址,并要求用户提供许可文件,并执行执行步骤4。本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
权利要求
1.一种在软件源代码未知情况下对可执行文件进行加密方法,其特征在于,包括以下步骤步骤1,启动已注入自定义动态链接库的可执行文件; 步骤2,检查许可文件是否存在;步骤3,若许可文件不存在,向用户提供本地机器的计算机网卡MAC地址以及应用软件信息,并要求用户提供许可文件;步骤4,用户以电话、传真、email方式向软件版权拥有者递交该计算机的申请码; 步骤5,软件版权拥有者通过加密组件对用户提交的申请码和要授予软件的限制信息进行加密,生成许可文件;步骤6,软件版权拥有者以email、Internet方式将许可文件反馈到用户端; 步骤7,用户启动软件,客户端验证许可文件是否有效; 步骤8,若许可文件有效,则运行软件。
2.根据权利要求1所述的一种在软件源代码未知情况下对可执行文件进行加密方法,其特征在于,该方法还包括以下步骤所述的步骤2中,检查许可文件是否存在,若许可文件存在,则执行步骤7。
3.根据权利要求1所述一种在软件源代码未知情况下对可执行文件进行加密方法,其特征在于,该方法还包括以下步骤所述步骤7中,步骤3. 1,若许可文件无效,向用户提供本地机器的计算机网卡MAC地址,并要求用户提供许可文件;步骤3. 2,执行步骤4。
4.根据权利要求1所述的一种在软件源代码未知情况下对可执行文件进行加密方法, 其特征在于,所述步骤5中,生成许可文件的具体方法为根据计算机的硬件信息、应用软件信息以及用户运行软件的限制信息,生成唯一标识用户的标识码,通过用户自定义的加密组件,对用户标识码进行加密生成产品密钥,并将用户标识码和密钥存储于一文件中,作为用户运行软件的许可文件。
5.根据权利要求1所述的一种在软件源代码未知情况下对可执行文件进行加密方法, 其特征在于,所述的步骤1中,向可执行文件中注入自定义动态链接库的具体方法为通过 API HOOK技术对选定的目标函数进行拦截,该目标函数具有在程序的运行过程中执行且只被执行一次的特点,在目标函数执行之前注入自定义的动态连接库,该动态链接库中能够完成用户自定义的用户注册、许可文件的验证操作。
6.根据权利要求1所述的一种在软件源代码未知情况下对可执行文件进行加密方法, 其特征在于,所述步骤7中,客户端验证许可文件是否有效的具体方法为在用户启动软件时,首先检查许可文件是否存在,若存在则对许可文件的有效性进行验证,首先检查许可文件中存放的计算机硬件信息是否与本机的计算机硬件信息相同;然后,利用哈希函数将用户标识码转换为哈希序列码,同时,密钥经公钥解密之后得到同样格式的明文,对两者进行比较,若相等,则许可文件有效,顺利运行软件;若许可文件不存在或许可文件无效,则运行软件失败,向用户提供本地机器的计算机硬件信息。
7.根据权利要求1所述的一种在软件源代码未知情况下对可执行文件进行加密方法, 其特征在于,所述步骤5中,加密过程采用RSA加密算法,首先对用户标识码通过MD5算法转换为Hash序列码,然后通过私钥加密,生成用户运行软件所需的密钥,然后,将用户标识码以及加密所得的密钥信息存储于一文件中,称此文件为许可文件。
8.根据权利要求1所述的一种在软件源代码未知情况下对可执行文件进行加密方法, 其特征在于,所述的步骤1中,动态链接库的注入根据可执行文件的类型,选择在该软件执行过程中必定且只执行一次的API函数,利用API HOOK技术对该函数进行拦截,在目标函数执行之前注入自定义动态链接库,在动态链接库注入之后,系统在调用目标函数之前,会完成对自定义动态链接库的调用。
全文摘要
本发明涉及一种在软件源代码未知情况下对可执行文件进行加密方法。在源代码未知的情况下,实现对软件的可执行文件的加密。用户可以通过已注入的自定义的动态链接库获取计算机的网卡MAC地址,将已获取的MAC地址和应用软件的信息相糅合,作为唯一标识用户的申请码,以电话、email、传真等方式向软件版权拥有者申请运行软件所需的许可文件。软件版权拥有者对用户提供的申请码以及对用户的限制条件通过自定义加密组件进行加密,生成一个许可文件,其中记录了申请码、对用户的限制信息以及经加密生成的密钥,将许可文件反馈到用户端。该加密算法不需要对硬件和软件做较大的改动,方法简单,而且有效的降低了软件的侵权。
文档编号G06F21/22GK102289632SQ20111025099
公开日2011年12月21日 申请日期2011年8月30日 优先权日2011年8月30日
发明者付虹博, 李洁, 章登义, 苏科华 申请人:武汉大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1