程序保护装置的制造方法

文档序号:10494405阅读:280来源:国知局
程序保护装置的制造方法
【专利摘要】公开了一种程序保护装置。本发明提供的程序保护装置包括:保护域单元,所述保护域单元包括加密保护域、起点显示单元和终点显示单元,所述起点显示单元用于显示所述加密保护域的起点,所述终点显示单元用于显示所述加密保护域的终点;和保护域连接单元,所述保护域连接单元包括解密单元和保护域调用单元,所述解密单元用于解密所述加密保护域并生成运行码单元,所述保护域调用单元用于调用所述运行码单元。
【专利说明】
程序保护装置
技术领域
[0001 ]本发明涉及一种用于保护程序的装置。
【背景技术】
[0002]下面的内容仅提供与本发明有关的背景信息,但是不构成现有技术。
[0003]即使以二进制码的形式配置程序的重要逻辑(Logic)或算法,也可以使用静态(Static)分析工具或动态(Dynamic)分析工具容易地分析出程序的重要逻辑或算法。然而,根据现有技术的反调试(Ant1-Debugging)功能或反转储(Ant1-Dump)功能可以保护程序不被诸如调试器(Debugger)等动态分析工具分析,但是难以防止使用静态分析工具对程序进行分析。此外,基本上难以事先防止使用静态分析工具对程序进行的分析。此外,在通过静态分析工具分析程序以致程序的重要逻辑或算法被泄漏之后,因为用户必然较晚才能确认程序是否被修改以使对其处理较晚,所以对程序的重要逻辑或算法的保护是不够的。
[0004]因此,需要一种防止程序的重要逻辑或算法被动态分析工具以及静态分析工具进行分析的方法。

【发明内容】

[0005]技术问题
[0006]本发明提出了一种能够防止程序被动态或静态工具进行分析的装置。
[0007]技术解决方案
[0008]根据本实施例的一个方面,在用于保护程序的装置中,所述装置包括:保护域单元,所述保护域单元包括加密保护域、起点显示单元和终点显示单元,所述起点显示单元被配置为对所述加密保护域的起点进行显示,所述终点显示单元被配置为对所述加密保护域的终点进行显示;和保护域连接单元,所述保护域连接单元包括解密单元和保护域调用单元,所述解密单元被配置为通过对所述加密保护域进行解密来生成运行码单元,所述保护域调用单元被配置用来调用所述运行码单元。
[0009]根据本实施例的另一个方面,在用于保护程序的方法中,所述方法包括:通过对程序的二进制码中的加密保护域进行解密来生成运行码;运行生成的所述运行码;校验所述运行码的完整性;且当所述运行码的运行被终止时,去除所述运行码以返回至所述加密保护域。
[0010]本发明的效果
[0011]如上所述,根据本实施例,能够保护程序的重要逻辑或算法不受静态分析工具或动态分析工具的影响。即,通过对程序源码进行编译来产生二进制码,然后可以对将程序的重要逻辑或算法包括在函数内的至少一个二进制码进行加密,加密保护域即使在程序被执行且被加载入主存储器后也可以保持被调用前的加密状态,通过对加密保护域进行解密可以产生并执行运行码,且当运行码的运行被终止时,二进制码可以再次返回至加密状态。因此,即使静态或动态分析工具被用来试图分析程序,也无法通过使用静态或动态分析工具分析出加密二进制码的逻辑或算法。
[0012 ]仅在加密保护域被调用之后,对程序的二进制码中的加密保护域进行解密以生成运行码。因此,如果通过运行运行码来终止运行码的运行,那么二进制码可以返回至加密状态以使除了用于运行码的运行以外加密状态都可以得到维持。以这样的方式,如果程序维持在加密状态,那么尽管通过对存储器进行转储可以得知在程序的运行期间的存储器状态,但是运行码是加密的,使得程序的重要逻辑或算法能够受到保护。
[0013]本发明包括程序的重要逻辑或算法以及用于表示要被实质保护的保护域的起始时间点和终止时间点。因此,即使程序不运行,仍能从程序的二进制码中搜索要被加密的起始时间点和终止时间点,并且可以加密和替换对应的部分,使得在施加程序的安全性的同时可以对程序进行分布,因此保护程序不受静态分析工具影响。
[0014]与此同时,当由于加密域的频繁调用导致重复解密和加密可能使程序的运行性能劣化时,可以通过在对加密域进行解密之前将加密域存储在单独的保护域存储单元中来减少反复的加密过程,且可以维持解密状态直至达到根据加密保护域的调用频率而确定的预定次数。此外,当包括多个加密保护域时,可以选择:将一些加密保护域存储于单独的保护域存储单元,或者再次加密运行码。
【附图说明】
[0015]图1是图示了用于运行程序的计算机的示例的框图;
[0016]图2a、图2b和图2c是图示了根据本发明实施例的保护域连接单元和保护域单元的构造的框图;
[0017]图3a和图3b是图示了如下状态的框图:含有加密保护域的程序被加载至根据本发明实施例的存储器中;
[0018]图4是图示了根据本发明实施例的如下状态的框图:调用保护域之后校验保护域的完整性;且
[0019]图5是图示了根据本发明实施例的用于保护程序的方法的流程图。
【具体实施方式】
[0020]参照附图详细地说明本发明的示例性实施例。
[0021]本发明的实施例可适用于通过使用包括C/C++编程语言在内的能够产生本地代码(Native Code)的所有语言做出的程序,并不限于特定的操作系统或硬件。
[0022]图1是图示了用于运行程序的计算机的示例的框图。
[0023]用于运行程序的计算机(100)将程序存储于辅助存储器(130)。如果程序运行,那么程序加载入主存储器(120),以便程序运行在中央处理单元(Central Process Unit ;CPU)(110)中并且程序的运行结果显示在显示单元(140)上。当运行于计算机(100)的程序包括含有重要逻辑或算法的加密保护域时,计算机(100)可以用作程序保护装置。
[0024]根据本发明实施例的程序保护装置可以是用户端,例如个人计算机(PC)、笔记本电脑、平板电脑(Tablet)、个人数字助理(PDA)、游戏控制台、便携式多媒体播放器(PMP)、掌上游戏机(PSP)、无线通信终端、智能手机、TV和媒体播放器等。根据本发明实施例的程序保护装置可以是服务器端,例如应用服务器和服务伺服器等。根据本发明实施例的程序保护装置可以分别指的是设置有以下部件的各种装置:(i)通信器,诸如用于与各种装置或有线/无线通信网络进行通信的通信调制解调器等;(ii)存储器,用于存储执行程序的数据;(ii i)微处理器,用于通过执行程序来进行计算和控制;和类似的部件等。根据至少一个实施例,存储器可以是计算机可读记录/存储媒介,例如随机存取存储器(RAM)、只读存储器(ROM)、闪速存储器、光盘、磁盘、固态盘(SSD)等。根据至少一个实施例,微处理器可以被编程以选择性地进行本文中所述的操作和功能中的至少一者。根据至少一个实施例,微处理器可以通过使用诸如特定构造的专用集成电路(ASIC)等硬件在整体上或在部分上得到实现。
[0025]图2a、图2b和图2c是图示了根据本发明实施例的保护域连接单元和保护域单元的构造的框图。
[0026]如图2a所示,保护域连接单元(210)包括解密单元(212)、保护域调用单元(214)和复制单元/加密单元(216)。如图2b所示,保护域单元(220)包括起点显示单元(222)、保护域(224)和终点显示单元(226)。图2b的保护域单元(220)处在对程序进行编译和对保护域进行加密以施加安全性之前的状态。如图2c所示,保护域单元(220)显示这样的状态:通过对图2b的保护域(224)进行加密,保护域(224)被转换成加密保护域(228)。
[0027]当通过使用C/C++编程语言构建保护域连接单元(210)和保护域单元(220)时,保护域连接单元(210)和保护域单元(220)通过使用宏功能(Macro Funct1n)容易地配置库,使得可以降低开发成本。为了插入用于显示起点和终点(所述起点和终点用于显示程序的二进制码中的预定域)的标签(Label)和标识码(Marking Code),在程序的运行期间通过对加密二进制码的一部分进行解密来生成运行码,以及调用所述运行码以进行运行,上述过程需要复杂和专业的技术但是可以被标准化,因此,上述过程可以由宏功能配置。
[0028]解密单元(212)对保护域单元(220)的加密保护域(228)进行解密以创建与作为原始运行码的保护域(224)相同的运行码单元,并且使用创建的运行码单元替换加密保护域(228)。在这种情况下,解密单元(212)可以将加密保护域(228)存储在单独的位置处。保护域调用单元(214)调用通过解密单元(212)对保护域单元(220)的加密保护域(228)进行解密而创建的运行码单元,使得运行码单元运行。
[0029]当运行码的运行终止时,需要使保护域(224)再次返回到加密状态。如果在解密单元(212)对加密保护域(228)进行解密前,加密保护域(228)被存储在单独的位置处,那么复制单元/加密单元(216)可以再次复制被存储于单独的位置处的加密保护域以使程序维持在加密状态。当加密保护域(228)未被存储于单独的位置处时,运行码单元可以被复制单元/加密单元(216)再次加密。
[0030]然而,如果运行码被再次加密,那么在重复调用加密保护域(228)的情况下,重复进行解密和加密的过程,使得程序的运行性能可能劣化。优选的是,当重复调用加密保护域(228)时,将加密保护域(228)存储于单独的位置处。在这种情况下,保护域可以在不需要单独的加密过程的情况下维持加密状态。此外,即使重复调用加密保护域(228),也能够在预定的次数内维持运行码状态,从而使对性能的影响最小化。
[0031]保护域单元(220)的起点显示单元(222)和终点显示单元(226)分别显示保护域的起点和终点。起点显示单元(222)和终点显示单元(226)可以包括标签和标识码。标签用来获取在程序的运行期间将由解密单元(212)解密的域的起点的地址和终点的地址。标识码可以在不影响程序的运行的情况下以汇编码的形式形成。标识码使得保护域(224)的起点和终点能够被找出,以便在对程序的源码进行编译后通过使用加密工具对保护域(224)进行加密。
[0032]与此同时,加密工具对保护域的加密不限于特定形式的平台。因此,保护域的加密可以由开发设备进行,也可以由服务器进行。当服务器进行加密时,开发设备将需要加密的保护域发送至服务器以请求加密,并且接收加密结果。
[0033]图3a和图3b是图示了根据本发明实施例的这样状态的框图:含有加密保护域的程序被加载至存储器中。
[0034]图3a是图示了这样状态的框图:含有加密保护域和用于连接加密保护域的保护域连接单元(210)的程序进入主存储器(120)中运行。在保护域连接单元(210)调用保护域单元(220)并对加密保护域(228)进行解密以创建运行码单元前,维持图3a的形状。
[0035]图3b除了包括图3a的配置以外还包括保护域存储单元(310)。
[0036]一旦程序被运行,就可以创建保护域存储单元(310)。例如,在解密单元(212)对加密保护域(228)进行解密前,可以创建保护域存储单元(310)。此外,对加密保护域(228)进行解密之前被加密的加密保护域(228)可以被存储在保护域存储单元(310)中。如果加密保护域(228)被存储于保护域存储单元(310)中,那么程序可以在没有加密过程的情况下再次返回至加密状态。因此,即使当频繁和重复地调用保护域单元(220)时,也可以减少由于加密和解密而造成的对系统性能的影响。
[0037]图4是图示了根据本发明实施例的这样状态的框图:在调用保护域之后校验保护域的完整性。
[0038]程序通过对加密保护域(228)进行解密来创建运行码单元(400)以使用运行码单元(400)替换加密保护域(228),并且执行运行码单元(400)。运行码单元(400)与加密保护域(228)被加密前的码处于相同的状态。紧接在运行码单元(400)的运行终止之后,完整性校验单元(410)立即校验在运行码单元(400)的运行期间运行码单元(400)是否被修改。在本实施例中,通过使用哈希函数(Hash Funct1n)来说明完整性校验方法。然而,完整性校验方法不限于此,而能够是各种方案。
[0039]为了通过使用哈希函数进行完整性校验,应该事先提取图2b的保护域(224)的哈希码(Hash Code)并将其存储于单独的文件或程序中。通过在程序的运行期间对加密保护域(228)进行解密来创建运行码单元(400),并且使用运行码单元(400)替换加密保护域(228),然后执行运行码单元(400)。为了确认在运行码单元(400)的运行期间运行码是否被修改,在上述这些过程之后,通过紧接在运行码单元(400)的运行终止之后立即将运行码输入哈希函数来提取哈希码。然后,通过将提取的哈希码与存储的哈希码进行比较来判断提取的哈希码是否与存储的哈希码中的一者相对应。当提取的哈希码与存储的哈希码不同时,判断结果是运行码在运行期间被修改,从而使程序的运行停止。因为哈希函数提取的是根据输入值的唯一哈希码,所以哈希函数可以用于完整性校验。例如MD5、SHA和Checksum等各种哈希函数可以用于完整性校验。
[0040]图5是图示了根据本发明实施例的用于保护程序的方法的流程图。
[0041]在应用程序被存储于辅助存储器(130)后,应用程序被加载入主存储器(120)且运行(S510)。当在应用程序的运行期间需要调用加密保护域(228)时,首选调用保护域连接单元(210)(S520)。解密单元(212)将加密保护域(228)存储于保护域存储单元(310)中(S530)。加密保护域(228)可以被存储在保护域存储单元(310)中,但也可以不被存储。当加密保护域(228)不被存储时,必须在解密的运行码的运行终止之后对其加密。解密单元(212)对加密保护域进行解密(S540)并且创建和运行与保护域(224)相同的运行码单元(400)(S550)。
[0042]紧接在运行码的运行终止之后,完整性校验单元(410)立即校验运行码的完整性以确认运行码是否被修改(S560)。如果程序被修改,那么停止程序的运行。可以通过哈希校验进彳T完整性fe验。
[0043]通过将保护域单元(220)被加密前存在的图2b的保护域(224)输入哈希函数,能够提取哈希码并且将提取的哈希码存储于单独的文件或程序中。为了进行完整性校验,通过将对加密保护域(228)进行解密而创建的运行码输入哈希函数来提取哈希码。然后,判断提取的哈希码是否与存储的哈希码中的一者相对应。如果提取的哈希码与存储的哈希码不同,那么确定程序被修改。当确定程序未被修改时,复制单元/加密单元(216)复制被存储于保护域存储单元(310)中的加密保护域并且将该加密保护域存储于原始位置(S570)。
[0044]上述的说明只是借助于示例说明了实施例的技术理念。本发明的本领域技术人员可以在不偏离本发明原理的情况下进行各种修改、添加和替换。因此,实施例的目的是为了阐明而不是为了限制本发明的技术范围。本发明的技术理念的范围不由实施例限制。本发明的范围将由随附的权利要求解释。所有这样的修改和变型将被认为包含在本发明的范围内。
【主权项】
1.一种用于保护程序的装置,所述装置包括: 保护域单元,所述保护域单元包括加密保护域、起点显示单元和终点显示单元,所述起点显示单元被配置为对所述加密保护域的起点进行显示,所述终点显示单元被配置为对所述加密保护域的终点进行显示;和 保护域连接单元,所述保护域连接单元包括解密单元和保护域调用单元,所述解密单元被配置为通过对所述加密保护域进行解密来生成运行码单元,所述保护域调用单元被配置用来调用所述运行码单元。2.如权利要求1所述的装置,其中,所述起点显示单元和所述终点显示单元包括: 标签,所述标签被配置为当所述程序运行时获取各点的地址;和 标识码,所述标识码被配置为搜索将被加密的保护域的起点和终点而不对所述程序的运行产生影响。3.如权利要求1所述的装置,其中,在生成所述程序的二进制码后,通过对从包含于所述起点显示单元中的标识码至包含于所述终点显示单元中的标识码之间的二进制码进行加密来获取所述加密保护域。4.如权利要求1所述的装置,其中,所述解密单元对从包含于所述起点显示单元的标签至包含于所述终点显示单元的标签之间的二进制码进行解密。5.如权利要求1所述的装置,还包括:保护域存储单元,所述保护域存储单元被配置用来在所述解密单元创建所述运行码单元之前存储所述加密保护域。6.如权利要求5所述的装置,其中,所述保护域连接单元还包括复制单元,所述复制单元被配置用来当所述运行码单元的运行被终止时复制存储于所述保护域存储单元中的所述加密保护域,以将所述加密保护域存储在所述运行码单元中。7.如权利要求6所述的装置,其中,在所述运行码单元重复运行预定的次数之后,所述复制单元复制存储于所述保护域存储单元中的所述加密保护域以将所述加密保护域存储在所述运行码单元中。8.如权利要求1所述的装置,其中,所述保护域连接单元还包括加密单元,所述加密单元被配置为当所述运行码单元的运行被终止时对所述运行码单元进行加密。9.如权利要求1所述的装置,其中,当所述装置包括多个加密保护域时,根据各个所述加密保护域的调用频率,所述装置选择下述两种方案中的一种:将所述加密保护域存储于保护域存储单元中;不将所述加密保护域存储在所述保护域存储单元中,而是在运行与所述加密保护域相对应的所述运行码单元之后对所述运行码单元进行加密。10.如权利要求1所述的装置,还包括完整性校验单元,所述完整性校验单元被配置用来校验所述运行码单元的完整性。11.如权利要求10所述的装置,其中,所述完整性校验单元通过将所述运行码单元输入哈希函数来提取哈希码,判断提取的哈希码是否与存储的哈希码中的一者相对应,并且当所述提取的哈希码与所述存储的哈希码不同时停止所述程序的运行。12.—种用于保护程序的方法,所述方法包括以下步骤: 通过对程序的二进制码中的加密保护域进行解密来生成运行码; 运行生成的所述运行码; 校验所述运行码的完整性;且 当所述运行码的运行被终止时,去除所述运行码以返回至所述加密保护域。13.如权利要求12所述的方法,其中,所述运行码的生成过程包括:将所述加密保护域存储在单独的位置处。14.如权利要求12所述的方法,其中,返回到所述加密保护域包括:加密所述运行码;或者当所述加密保护域被存储在所述单独的位置处时复制被存储在所述单独的位置处的所述加密保护域。
【文档编号】G06F9/44GK105849737SQ201480071239
【公开日】2016年8月10日
【申请日】2014年11月3日
【发明人】南在玟, 朴正根, 洪晙豪, 吴埈硕, 金正洙
【申请人】Inka安特沃客有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1