软件反调试保护方法
【专利摘要】本申请公开了一种软件反调试保护方法,包括:预先确定软件的功能代码中需要加密返回结果的函数S;b、执行所述软件的功能代码;其中,在执行所述函数S之前,生成随机数R,在执行所述函数S时,利用所述随机数R对该函数的执行结果进行加密,并将加密后的所述执行结果作为该函数S的返回结果;接收到所述返回结果的函数对所述返回结果进行解密,如果解密成功,则继续所述返回结果的相应处理过程,否则,判定所述软件被非法执行,终止所述功能代码的执行。采用本发明可以有效防止软件的非法运行。
【专利说明】软件反调试保护方法
【技术领域】
[0001] 本发明设及计算机软件安全技术,特别是设及一种软件反调试保护方法。
【背景技术】
[0002] 在目前的软件破解领域有一种破解方法,是通过跳过某个功能函数的执行,并伪 造其返回值,使程序继续运行达到破解的目的。
[0003] 例如,当应用程序调用关键的注册函数、认证函数时,破解者通过代码补了迫使该 些函数直接返回有效值,从而使得破解者可W对该应用程序进行非法执行。W下面的注册 算法为例,对上述破解手段具体说明如下:
[0004] 当注册算法包括下述步骤时:
[0005] 步骤XI、注册函数A进行初始化。
[0006] 步骤x2、注册函数A调用认证函数B,W确认用户的合法身份。
[0007] 步骤x3、执行认证函数B,当返回结果为1时表示身份合法,否则,非法。
[000引步骤x4、执行注册函数A,并返回
[0009] 针对上述注册算法,其破解方法为:跳过步骤x2,即执行函数A时并不调用认证函 数B,在步骤x4直接将所破解到的合法身份对应的返回结果1赋值给注册函数A,W使注册 函数A执行相应的注册功能,从而实现非法用户的合法注册。
[0010] 针对上述破解方法,目前尚未提出相应的软件保护方法。
【发明内容】
[0011] 有鉴于此,本发明的主要目的在于提供一种软件反调试保护方法,该方法可W有 效防止软件的非法运行。
[0012] 为了达到上述目的,本发明提出的技术方案为:
[0013] 一种软件反调试保护方法,包括:
[0014] a、预先确定软件的功能代码中需要加密返回结果的函数S ;
[0015] b、执行所述软件的功能代码;其中,在执行所述函数S之前,生成随机数R,在执行 所述函数S时,利用所述随机数R对该函数的执行结果进行加密,并将加密后的所述执行结 果作为该函数S的返回结果;接收到所述返回结果的函数对所述返回结果进行解密,如果 解密成功,则继续所述返回结果的相应处理过程,否则,判定所述软件被非法执行,终止所 述功能代码的执行。
[0016] 综上所述,本发明提出的软件反调试保护方法,在软件执行前,生成随机数,利用 该随机数对软件功能代码中的一函数执行结果进行加密,使得软件的破解者不能对该函数 的执行结果进行有效识别,进而无法跳过该函数的执行,W确保软件功能代码中的每个步 骤在软件的执行过程都必须得到执行,从而可W保护软件不被非法破解执行。
【专利附图】
【附图说明】
[0017] 图1为本发明实施例一的流程示意图。
【具体实施方式】
[001引为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对 本发明作进一步地详细描述。
[0019] 本发明的核屯、思想是:对软件功能代码中的函数执行结果进行加密,提高软件的 破解难度,使得软件的破解者不能对该函数执行结果进行有效识别,进而可W保护软件不 被非法破解执行。
[0020] 图1为本发明实施例一的流程示意图,如图1所示,该实施例主要包括:
[0021] 步骤101、预先确定软件的功能代码中需要加密返回结果的函数S。
[0022] 具体地,本步骤中,可W任选一函数作为所述函数S。
[0023] 步骤102、执行所述软件的功能代码;其中,在执行所述函数S之前,生成随机数R, 在执行所述函数S时,利用所述随机数R对该函数的执行结果进行加密,并将加密后的所 述执行结果作为该函数S的返回结果;接收到所述返回结果的函数对所述返回结果进行解 密,如果解密成功,则继续所述返回结果的相应处理过程,否则,判定所述软件被非法执行, 终止所述功能代码的执行。
[0024] 本步骤用于在软件的功能代码执行过程增加函数的加密解密步骤,即在返回函数 S的执行结果前对其进行加密,再在其返回结果后,对加密后的返回结果进行解密,使得软 件的功能代码被破解的难度提高,从而使得利用现有的跳过某个函数的执行的破解方法无 法实现软件的成功运行,进而有效防止软件的非法运行。
[0025] 较佳地,为了提高随机数的复杂度,增强本发明的抗破解能力,可W采用下述方法 生成随机数R :
[0026] 步骤al、生成一随机数R1,将该随机数R1作为输入参数传递给一预设随机数生成 函数;
[0027] 步骤a2、所述随机数生成函数,生成随机数R2,并按照预设的组合方式,将所述随 机数R1与所述随机数R2进行组合,得到所述随机数R。
[002引该里,利用一随机数生成函数生成随机数R2是为了防止R1被固定,确保R的随机 性。
[0029] 较佳地,可W采用楠圆加密算法ECC或小型加密算法TEA,利用所述随机数R进行 所述加密。在具体加密时,将随机数R作为上述加密算法中的一固定参数进行加密即可,具 体方法为本领域技术人员所掌握,在此不再寶述。
[0030] 为了进一步阐述本发明,下面W示例性程序代码的形式,对本发明的具体实现过 程进行示意性说明。在下面的代码示例中,利用ECC加密方法,对函数B的执行结果进行加 密,调用该函数B的函数A需要对其返回结果进行解密检查,若解密失败,则返回执行失败 的f目息。
[0031]
【权利要求】
1. 一种软件反调试保护方法,其特征在于,包括: a、 预先确定软件的功能代码中需要加密返回结果的函数S ; b、 执行所述软件的功能代码;其中,在执行所述函数S之前,生成随机数R,在执行所述 函数S时,利用所述随机数R对该函数的执行结果进行加密,并将加密后的所述执行结果作 为该函数S的返回结果;接收到所述返回结果的函数对所述返回结果进行解密,如果解密 成功,则继续所述返回结果的相应处理过程,否则,判定所述软件被非法执行,终止所述功 能代码的执行。
2. 根据权利要求1所述的方法,其特征在于,所述生成随机数R包括: 生成一随机数R1,将该随机数R1作为输入参数传递给一预设随机数生成函数; 所述随机数生成函数,生成随机数R2,并按照预设的组合方式,将所述随机数R1与所 述随机数R2进行组合,得到所述随机数R。
3. 根据权利要求1所述的方法,其特征在于,采用椭圆加密算法ECC或小型加密算法 TEA,利用所述随机数R进行所述加密。
【文档编号】G06F21/14GK104504312SQ201410814941
【公开日】2015年4月8日 申请日期:2014年12月23日 优先权日:2014年12月23日
【发明者】孙吉平, 韩勇 申请人:北京深思数盾科技有限公司