一种隐式反调试保护方法

文档序号:9887985阅读:288来源:国知局
一种隐式反调试保护方法
【技术领域】
[0001] 本发明属于计算机软件安全领域,特别涉及一种隐式反调试保护方法。
【背景技术】
[0002] 当今软件已经深入到生活的方方面面,在人们的饮食、出行、交通等领域均扮演着 越来越重要的角色。因此增强软件的防护能力已经成为重要的工作。
[0003] 在现有技术中,为了防止破解者对软件进行破解,通常采用反调试的方式进行保 护,但是破解者可以根据反调试API名称找到反调试保护软件的位置,进而修改跳转指令从 而达到绕过反调试函数、最终去除反调试保护的效果。这里以API IsDebuggerPresent为 例,对上述破解手段具体说明如下:
[0004] 使用IsDebuggerPresent保护程序包括以下步骤:
[0005] 步骤1:程序正常执行到检测点调用IsDebuggerPresent.
[0006] 步骤2: IsDebuggerPresent判断是否有调试器存在并返回1(存在)或0(不存在).
[0007] 步骤3:根据步骤2的结果跳向正常的执行函数或提示关闭函数,若不存在调试器 则程序正常执行,若存在调试器则跳向程序出口,跳出程序。
[0008] 针对如上保护方法,其破解方法为:使用IsDebuggerPresent的API名称定位到反 调试代码的位置,破解者便可以看见反调试代码,只需要取消程序跳转便可以避过反调试 检测,进一步便可对程序进行逆向分析。
[0009] 在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0010] 针对上述破解手段,目前尚没有有效的解决办法,这样会使得反调试保护方法形 同虚设,使得软件得不到有效保护,进而令人们的财产安全处于危险境地。

【发明内容】

[0011] 为了解决现有技术的问题,本发明提供了一种隐式反调试保护方法,所述隐式反 调试保护方法,包括:
[0012] 选取待保护程序中的程序变量;
[0013] 确定与所述待保护程序对应的反调试程序,选取所述反调试程序的关键值;
[0014] 结合所述反调试程序的关键值对所述程序变量进行加密,得到加密处理后的程 序;
[0015] 执行所述加密处理后的程序;
[0016] 如果所述加密处理后的程序在被调试时出现异常,而当所述加密处理后的程序在 未被调试时执行正常,则所述隐式反调试保护有效。
[0017] 可选的,所述程序变量为:
[0018] 所述待保护程序的输入,或
[0019] 所述待保护程序的输出,或
[0020] 所述待保护程序的输入的变形,或
[0021]所述待保护程序的输出的变形。
[0022]可选的,所述关键值为:
[0023] 所述反调试程序结果的检测值,或
[0024] 影响所述反调试程序结果的变量。本发明提供的技术方案带来的有益效果是: [0025]通过使用获取到的关键值对程序变量进行加密的方式对待保护程序中的关键代 码进行保护,加强了反调试代码的隐蔽性,提高了被检测出的难度,增大了逆向人员的工作 量,最终使得反调试保护强度增强。
【附图说明】
[0026] 为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图 作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普 通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0027] 图1是本发明提供的一种固定装置的结构示意图。
【具体实施方式】
[0028] 为使本发明的结构和优点更加清楚,下面将结合附图对本发明的结构作进一步地 描述。
[0029] 实施例一
[0030] 本发明提供了一种隐式反调试保护方法,所述隐式反调试保护方法,如图所示,该 方法包括:
[0031] 101、选取待保护程序中的程序变量。
[0032] 102、确定与所述待保护程序对应的反调试程序,选取所述反调试程序的关键值。
[0033] 103、结合所述反调试程序的关键值对所述程序变量进行加密,得到加密处理后的 程序。
[0034] 104、执行所述加密处理后的程序。
[0035] 105、如果所述加密处理后的程序在被调试时出现异常,而当所述加密处理后的程 序在未被调试时执行正常,则所述隐式反调试保护有效。
[0036]在实施中,为了解决现有技术中对程序逆向保护不足的缺陷,本发明提出了一种 隐式反调试保护方法,主要思想上是从待保护程序中提取程序变量,从与待保护程序对应 的反调试程序中选取关键值,使用获取到的关键值对程序变量进行加密,根据加密后的程 序变量得到加密处理后的程序。在对加密处理后的程序进行调试时出现了执行异常,而对 加密处理后的程序不进行调试时却正常执行,则说明该隐式反调试是有效的。
[0037]为了便于对本发明中的技术方案的理解,这里提供了一个代码示例,同时附有代 码的解释说明,如下:
[0038]如下是一段实现5的N次方的汇编代码:
[0039]
[0040]
[0041 ] 现选用I s D e b u g g e r P r e s e n t方法及隐式反调试保护对其进行保护。 IsDebuggerPresent普通保护方法为在主程序关键函数前加入反调试,其伪代码如下,
[0042]
[0043] 上述代码的用途是求3的5次方。其中加入IsDebuggerPresent API来进行反调试。 选取待保护程序中的的3和5作为待保护程序中的程序变量,选取反调试程序 IsDebuggerPresent中的返回值为反调试的关键值。
[0044] 在原程序中,A = 3,B = 5,结果=A的B次方即3的5次方。
[0045] 加入反调试后,六=3,13 = 5,18〇613呢86冲代86111:用于判断是否被调试,
[0046]如果被触发调试,则结束程序或者因变量赋值发生变化得到异常结果;
[0047]如果触发调试,则结果=A的B次方即3的5次方。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1