本发明专利技术公开了一种隐式反调试保护方法,属于计算机软件安全领域。所述发明专利技术包括选取待保护程序中的程序变量,确定与待保护程序对应的反调试程序,选取反调试程序的关键值,结合反调试程序的关键值对程序变量进行加密,得到加密处理后的程序,执行加密处理后的程序,如果加密处理后的程序在被调试时出现异常,而当加密处理后的程序在未被调试时执行正常,则隐式反调试保护有效。通过使用获取到的关键值对程序变量进行加密的方式对待保护程序中的关键代码进行保护,加强了反调试代码的隐蔽性,提高了被检测出的难度,增大了逆向人员的工作量,最终使得反调试保护强度增强。
【技术实现步骤摘要】
本专利技术属于计算机软件安全领域,特别涉及一种隐式反调试保护方法。
技术介绍
当今软件已经深入到生活的方方面面,在人们的饮食、出行、交通等领域均扮演着越来越重要的角色。因此增强软件的防护能力已经成为重要的工作。在现有技术中,为了防止破解者对软件进行破解,通常采用反调试的方式进行保护,但是破解者可以根据反调试API名称找到反调试保护软件的位置,进而修改跳转指令从而达到绕过反调试函数、最终去除反调试保护的效果。这里以APIIsDebuggerPresent为例,对上述破解手段具体说明如下:使用IsDebuggerPresent保护程序包括以下步骤:步骤1:程序正常执行到检测点调用IsDebuggerPresent.步骤2:IsDebuggerPresent判断是否有调试器存在并返回1(存在)或0(不存在).步骤3:根据步骤2的结果跳向正常的执行函数或提示关闭函数,若不存在调试器则程序正常执行,若存在调试器则跳向程序出口,跳出程序。针对如上保护方法,其破解方法为:使用IsDebuggerPresent的API名称定位到反调试代码的位置,破解者便可以看见反调试代码,只需要取消程序跳转便可以避过反调试检测,进一步便可对程序进行逆向分析。在实现本专利技术的过程中,专利技术人发现现有技术至少存在以下问题:针对上述破解手段,目前尚没有有效的解决办法,这样会使得反调试保护方法形同虚设,使得软件得不到有效保护,进而令人们的财产安全处于危险境地。
技术实现思路
为了解决现有技术的问题,本专利技术提供了一种隐式反调试保护方法,所述隐式反调试保护方法,包括:选取待保护程序中的程序变量;确定与所述待保护程序对应的反调试程序,选取所述反调试程序的关键值;结合所述反调试程序的关键值对所述程序变量进行加密,得到加密处理后的程序;执行所述加密处理后的程序;如果所述加密处理后的程序在被调试时出现异常,而当所述加密处理后的程序在未被调试时执行正常,则所述隐式反调试保护有效。可选的,所述程序变量为:所述待保护程序的输入,或所述待保护程序的输出,或所述待保护程序的输入的变形,或所述待保护程序的输出的变形。可选的,所述关键值为:所述反调试程序结果的检测值,或影响所述反调试程序结果的变量。本专利技术提供的技术方案带来的有益效果是:通过使用获取到的关键值对程序变量进行加密的方式对待保护程序中的关键代码进行保护,加强了反调试代码的隐蔽性,提高了被检测出的难度,增大了逆向人员的工作量,最终使得反调试保护强度增强。附图说明为了更清楚地说明本专利技术的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术提供的一种固定装置的结构示意图。具体实施方式为使本专利技术的结构和优点更加清楚,下面将结合附图对本专利技术的结构作进一步地描述。实施例一本专利技术提供了一种隐式反调试保护方法,所述隐式反调试保护方法,如图所示,该方法包括:101、选取待保护程序中的程序变量。102、确定与所述待保护程序对应的反调试程序,选取所述反调试程序的关键值。103、结合所述反调试程序的关键值对所述程序变量进行加密,得到加密处理后的程序。104、执行所述加密处理后的程序。105、如果所述加密处理后的程序在被调试时出现异常,而当所述加密处理后的程序在未被调试时执行正常,则所述隐式反调试保护有效。在实施中,为了解决现有技术中对程序逆向保护不足的缺陷,本专利技术提出了一种隐式反调试保护方法,主要思想上是从待保护程序中提取程序变量,从与待保护程序对应的反调试程序中选取关键值,使用获取到的关键值对程序变量进行加密,根据加密后的程序变量得到加密处理后的程序。在对加密处理后的程序进行调试时出现了执行异常,而对加密处理后的程序不进行调试时却正常执行,则说明该隐式反调试是有效的。为了便于对本专利技术中的技术方案的理解,这里提供了一个代码示例,同时附有代码的解释说明,如下:如下是一段实现5的N次方的汇编代码:现选用IsDebuggerPresent方法及隐式反调试保护对其进行保护。IsDebuggerPresent普通保护方法为在主程序关键函数前加入反调试,其伪代码如下,上述代码的用途是求3的5次方。其中加入IsDebuggerPresentAPI来进行反调试。选取待保护程序中的的3和5作为待保护程序中的程序变量,选取反调试程序IsDebuggerPresent中的返回值为反调试的关键值。在原程序中,A=3,B=5,结果=A的B次方即3的5次方。加入反调试后,A=3,B=5,IsDebuggerPresent用于判断是否被调试,如果被触发调试,则结束程序或者因变量赋值发生变化得到异常结果;如果触发调试,则结果=A的B次方即3的5次方。在加入隐式反调试后,A=3,B=5,取反调试位的值,这里选取的是位于PEB中的BEINGDEBUGGED标志位(值为0或1,0表示未调试1表示调试),通过令“B=B+反调试标志位的值”的方式对程序变量B进行加密,若程序未被调试则程序中的变量值正常,若程序被调试则程序中的值改变不能得到正常结果。执行完成获取结果应该为A的B次方对应的数值,若未被调试则返回正常结果3的5次方,若被调试则返回错误结果这里是3的6次方。如果处于调试状态则al值为1,5的N次方的指数将会被加1,运算结果将出现错误。如果未被调试al值为0,5的N次方的指数将被加上0,对程序并无影响。综上可知若程序被调试则程序执行的结果会出现异常,若未被调试,则程序正常执行。由此可见,反调试代码更为隐蔽,程序关键代码得以保护;与一般的反调试相比,隐式反调试与程序中关键代码结合,更难被检测出来,且其触发周期更长,这样就增大了逆向人员的工作量,从而使得反调试保护强度大大增强。值得注意的是,本实施例中给予反调试程序的关键值对程序变量进行加密的方式出于便于理解的方式,仅选取了“B=B+反调试标志位的值”的方式,其实在实际操作中,往往选取更为复杂的加密方式对待保护程序中的程序变量进行加密处理,随着加密方式难度的增加,本方法中隐式反调试的保护性也就越强。上述隐式反调试并未直接调用IsDebuggerPrese本文档来自技高网...
【技术保护点】
一种隐式反调试保护方法,其特征在于,所述隐式反调试保护方法,包括:选取待保护程序中的程序变量;确定与所述待保护程序对应的反调试程序,选取所述反调试程序的关键值;结合所述反调试程序的关键值对所述程序变量进行加密,得到加密处理后的程序;执行所述加密处理后的程序;如果所述加密处理后的程序在被调试时出现异常,而当所述加密处理后的程序在未被调试时执行正常,则所述隐式反调试保护有效。
【技术特征摘要】
1.一种隐式反调试保护方法,其特征在于,所述隐式反调试保护方法,包
括:
选取待保护程序中的程序变量;
确定与所述待保护程序对应的反调试程序,选取所述反调试程序的关键值;
结合所述反调试程序的关键值对所述程序变量进行加密,得到加密处理后
的程序;
执行所述加密处理后的程序;
如果所述加密处理后的程序在被调试时出现异常,而当所述加密处理后的
程序在未被调试时执行正常,则...
【专利技术属性】
技术研发人员:周祥,汤战勇,房鼎益,张洁,叶贵鑫,张恒,李政桥,刘方圆,吕留东,陈晓江,龚晓庆,陈锋,
申请(专利权)人:西北大学,
类型:发明
国别省市:陕西;61
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。