一种软件的保护方法

文档序号:6423329阅读:157来源:国知局
专利名称:一种软件的保护方法
技术领域
本发明涉及软件版权保护技术,特别涉及一种软件的保护方法。
背景技术
软件由于其纯数字化的特征,一直遭受盗版的困扰,而使用加密锁是实现商业软 件版权保护的一种主要手段。其中,加密锁是一个连接在计算机的并口或者通用串行总线 (USB)等外部接口上的硬件设备。加密锁作为一种硬件设备,复制的难度较大,从而起到防 止受保护软件被非法使用的作用。图1为现有技术的软件的保护方法的示意图。如图1所示,现有技术的基于加 密锁的软件保护方法是受保护软件在运行过程中通过加密锁API接口(Application Programming hterface,应用程序编程接口)调用连接在该受保护软件所在计算机上的加 密锁,若返回结果正确,则受保护软件继续运行,若返回结果错误,则受保护软件终止运行。 根据图1可以看出,现有技术的基于加密锁的软件保护方案中存在两个明显的数据交换的 边界受保护软件和加密锁API接口之间以及加密锁API接口和加密锁之间。由于现代操作系统的开放性,破解者可以对软件层运行过程中的任何一个环节进 行跟踪和分析,这样一来,特征明显的边界就成为破解者最容易实施攻击的位置。对于加密锁API接口和加密锁之间的交互,可以通过有加密锁硬件参与的通信加 密等手段实现有效的保护,由于加密锁硬件的安全性很高,因此攻击的难度很高。而受保护 软件和加密锁API接口则全部是软件代码构成,不能摆脱破解者的监控,破解者可以通过 跟踪受保护软件调用加密锁的相关代码,包括受保护软件调用加密锁API接口的代码、调 用时的输入数据、加密锁返回的结果、以及对加密锁返回结果的处理代码,最终通过篡改或 者欺骗受保护软件来实现脱离加密锁运行。因此,现有技术的基于加密锁的软件保护方案只能保证加密锁硬件部分的安全, 软件部分的安全仍然存在比较严重的问题。

发明内容
本发明的目的是提供一种软件的保护方法,以解决现有技术的基于加密锁的软件 保护方案中软件部分容易被破解者跟踪和分析破解的问题。为了实现上述目的,本发明提供了一种软件的保护方法,包括受保护软件在运行 过程中通过加密锁API接口调用连接在该受保护软件所在计算机上的加密锁,若返回结果 正确,则受保护软件继续运行,若返回结果错误,则受保护软件终止运行,所述受保护软件 中用于调用加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始代 码进行变换生成的新代码。作为优选,所述受保护软件中用于调用加密锁的代码包括为调用所述加密锁准 备输入数据的代码和对所述加密锁的返回结果进行处理的代码。作为优选,所述加密锁API接口的代码是在加密锁API接口被交付用户之前对加密锁API接口的原始代码进行变换生成的新代码。 作为进一步地优选,所述加密锁API接口的代码包括加密锁API接口的入口的代码。作为进一步地优选,对所述原始代码进行变换的方法是将所述原始代码进行指 令变形或将所述原始代码变换为虚拟机代码。作为进一步地优选,对所述受保护软件中用于调用加密锁的原始代码进行变换的 规则是动态的,每次所述变换生成的新代码均不相同。作为进一步地优选,对所述加密锁API接口的原始代码进行变换的规则是动态 的,每次所述变换生成的新代码均不相同。与现有技术相比,本发明具有以下有益效果本发明提供的软件的保护方法中,受保护软件中用于调用加密锁的代码和加密锁 API接口的代码已被转换成破解者难以分析的代码,使破解者无法跟踪受保护软件调用加 密锁时的输入数据和输出数据,因而使受保护软件和加密锁API接口之间的数据交互得到 了保护,提高了破解者分析的难度,从而提高了基于加密锁的软件保护方案的安全强度;此 外,由于对所述受保护软件中用于调用加密锁的原始代码和加密锁API接口的原始代码进 行变换的规则都是动态的,所以每次变换生成的新代码均不一样,进一步提高了软件保护 的安全性。


图1为现有技术的软件的保护方法的示意图。图2为本发明的软件的保护方法的实施例一的示意图。图3为本发明的软件的保护方法的实施例二的示意图。
具体实施例方式下面结合附图对本发明的实施例进行详细说明。实施例一本实施例提供的软件的保护方法包括如下步骤利用计算机中的软件开发工具计算明文T的变换结果C ;在受保护软件中存储明文T和变换结果C ;受保护软件通过加密锁API接口调用加密锁,输入明文T,返回变换结果Cl ;受保护软件对比C和Cl,若相等,则受保护软件继续运行,否则受保护软件终止运 行。软件开发商在将受保护软件交付用户之前,经过编译,受保护软件中用于调用加 密锁的原始代码可能是 PUSH offset_Cl_buffPUSH offset_T_buffCALL ? LIV_encrypt ?这三行原始代码用于通过加密锁API接口的LIV_Encrypt函数调用加密锁计算 Cl ;
PUSH offset_Cl_buffPUSH Offset_C_buffCALL ? MEMCMP ?JNZ ? EXIT ?这四行原始代码用于比较C和Cl。根据上述代码,破解者能够很容易地找到CALL LIV_enCrypt ?指令并设置断 点,并跟踪参数传递过程获得LIV_enCrypt函数的输入数据和输出数据,最终通过模拟 LIV_encrypt函数来直接返回明文T对应的输出C,欺骗受保护软件。图2为本发明的软件的保护方法的实施例一的示意图。如图2所示,在本实施例 提供的软件的保护方法中,用户使用的软件是经过指令变形的软件,所述软件中用于调用 加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始代码进行变换 生成的新代码,对所述原始代码进行变换的方法是对所述原始代码进行指令变形。经过变 换后,受保护软件中用于调用加密锁的新代码可能是PUSH offset_Cl_buffPUSH offset_T_buffPUSH 0FFSET_ ? LIV_encrypt ?RET...显然,原来特征明显的CALL指令被PUSH和RET组合指令替代,破解者无法直接搜 索到对应的指令,显然无法直接获得LIV_enCrypt函数的输入和输出,软件保护方案的安 全性得到了提升。其中,所述受保护软件中为调用所述加密锁准备输入数据的代码和对所述加密锁 的返回结果进行处理的代码是进行代码变换的重点。此外,为了进一步提高本实施例提供的软件的保护方法的安全性,所述加密锁API 接口也是经过指令变形的加密锁API接口,所述加密锁API接口的代码是在加密锁API接 口被交付用户之前对加密锁API接口的原始代码进行变换生成的新代码,尤其是加密锁 API接口的入口部分的代码,通过该变换使受保护软件和加密锁API接口之间的界限难以 区分。最后,对所述受保护软件中用于调用加密锁的原始代码和所述加密锁API接口的 原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。实施例二 本实施例提供的软件的保护方法包括如下步骤利用计算机中的软件开发工具计算明文T的变换结果C ;在受保护软件中存储明文T和变换结果C ;受保护软件通过加密锁API接口调用加密锁,输入明文T,返回变换结果Cl ;受保护软件对比C和Cl,若相等,则受保护软件继续运行,否则受保护软件终止运 行。软件开发商在将受保护软件交付用户之前,经过编译,受保护软件中用于调用加 密锁的原始代码可能是
PUSH offset_Cl_buffPUSH offset_T_buffCALL ? LIV_encrypt ?这三行原始代码用于通过加密锁API接口的LIV_Encrypt函数调用加密锁计算 Cl ;PUSH offset_Cl_buffPUSH Offset_C_buffCALL ? MEMCMP ?JNZ ? EXIT ?这四行原始代码用于比较C和Cl。根据上述代码,破解者能够很容易地找到CALL LIV_enCrypt ?指令并设置断 点,并跟踪参数传递过程获得LIV_enCrypt函数的输入数据和输出数据,最终通过模拟 LIV_encrypt函数来直接返回明文T对应的输出C,欺骗受保护软件。图3为本发明的软件的保护方法的实施例二的示意图。如图3所示,在本实施例 提供的软件的保护方法中,用户使用的软件是经过虚拟机代码变换的软件,所述受保护软 件中用于调用加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始 代码进行变换生成的新代码,对所述原始代码进行变换的方法是将所述原始代码变换为 虚拟机代码,使分析反编译后的代码和破解变得极为困难,甚至无法设置有效的断点。经过这样的处理之后,破解者想要分析受保护软件和加密锁之间的交互关系,则 必须要先将转换后的代码完全分析出来才能进行,这就就增加了整个保护方案的安全性。其中,所述受保护软件中为调用所述加密锁准备输入数据的代码和对所述加密锁 的返回结果进行处理的代码是进行代码变换的重点。此外,为了进一步提高本实施例提供的软件的保护方法的安全性,所述加密锁API 接口也是经过虚拟机代码变换的加密锁API接口,所述加密锁API接口的代码是在加密锁 API接口被交付用户之前对加密锁API接口的原始代码进行变换生成的新代码,尤其是加 密锁API接口的入口部分的代码,通过该变换使受保护软件和加密锁API之间的界限难以 区分。最后,对所述受保护软件中用于调用加密锁的原始代码和所述加密锁API接口的 原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围 由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各 种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。
权利要求
1.一种软件的保护方法,包括受保护软件在运行过程中通过加密锁API接口调用连 接在该受保护软件所在计算机上的加密锁,若返回结果正确,则受保护软件继续运行,若返 回结果错误,则受保护软件终止运行,其特征在于,所述受保护软件中用于调用加密锁的代 码是在软件被交付用户之前对该软件中用于调用加密锁的原始代码进行变换生成的新代码。
2.根据权利要求1所述的软件的保护方法,其特征在于,所述受保护软件中用于调用 加密锁的代码包括为调用所述加密锁准备输入数据的代码和对所述加密锁的返回结果进 行处理的代码。
3.根据权利要求1所述的软件的保护方法,其特征在于,所述加密锁API接口的代码是 在加密锁API接口被交付用户之前对加密锁API接口的原始代码进行变换生成的新代码。
4.根据权利要求3所述的软件的保护方法,其特征在于,所述加密锁API接口的代码包 括加密锁API接口的入口的代码。
5.根据权利要求1或3所述的软件的保护方法,其特征在于,对所述原始代码进行变换 的方法是将所述原始代码进行指令变形或将所述原始代码变换为虚拟机代码。
6.根据权利要求1至4中任一项所述的软件的保护方法,其特征在于,对所述受保护软 件中用于调用加密锁的原始代码进行变换的规则是动态的,每次所述变换生成的新代码均 不相同。
7.根据权利要求3或4所述的软件的保护方法,其特征在于,对所述加密锁API接口的 原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。
全文摘要
本发明公开了一种软件的保护方法,包括受保护软件在运行过程中通过加密锁API接口调用连接在该受保护软件所在计算机上的加密锁,若返回结果正确,则受保护软件继续运行,若返回结果错误,则受保护软件终止运行,所述受保护软件中用于调用加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始代码进行变换生成的新代码。在本发明提供的软件的保护方法中,受保护软件中用于调用加密锁的代码已被转换成破解者难以分析的代码,使破解者无法跟踪受保护软件调用加密锁时的输入数据和输出数据,因而使受保护软件和加密锁API接口之间的数据交互得到了保护,提高了破解者分析的难度,从而提高了基于加密锁的软件保护方法的安全强度。
文档编号G06F21/22GK102136052SQ201110110148
公开日2011年7月27日 申请日期2011年4月29日 优先权日2011年4月29日
发明者孙吉平, 韩勇 申请人:北京深思洛克软件技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1