首页
社区
课程
招聘
[原创]我们一起来聊聊反调试 (1)
发表于: 2019-7-31 15:49 2777

[原创]我们一起来聊聊反调试 (1)

2019-7-31 15:49
2777

从DbgBreakPoint入手

众所周知,一般的OD等一些调试器都是从DbgBreakPoint开始的,所以今天我就从DbgBreakPoint入手来研究反调试。

; 本汇编代码反编译自ntdll.dll

;------------------------------------------------------------------------------
;
;	反汇编列表由 PE Explorer 生成,生成器版本为 1.99
;	Heaventools Software (http://www.heaventools.com)
;
;------------------------------------------------------------------------------
DbgUserBreakPoint:
  		int3
  		nop
  		retn
;------------------------------------------------------------------------------
  		Align	16
 DbgBreakPoint:
  		int3
  		retn
;------------------------------------------------------------------------------
  		Align	16


所以,擦除DbgBreakPoint的第一个指令就可以让一般的调试器失效:

/*
*    擦除DbgBreakPoint和DbgUserBreakPoint反调试
*    By Liankong<QQ: 2928455383>
*/
void anti(){
    DOWRD oldFlags = 0;
    HMODULE hd = GetModuleHandle("ntdll.dll");
    char* p = (char*)GetProcAddress(hd,"DbgBreakPoint");
    VirtualProtect(p,2,PAGE_EXECUTE_READWRITE,&oldFlags);
    *p = 0xC3;
    VirtualProtect(p,5,oldFlags,&oldFlags);
    p = (char*)GetProcAddress(hd,"DbgUserBreakPoint");
    VirtualProtect(p,2,PAGE_EXECUTE_READWRITE,&oldFlags);
    *p = 0xC3;
    VirtualProtect(p,5,oldFlags,&oldFlags);
}
这段代码最好可以放在入口处或者TLS中,运行以后会擦除掉DbgBreakPoint的int 3指令让一般的调试器出现“附加的上,却断不了”的尴尬情况。

对抗方法:

 这种方法对于一些刚入门的Cracker应该是够折腾的了,但是绕过方法也很简单,可以尝试将DbgBreakPoint中的指令恢复,也可以尝试不使用DbgBreakPoint而用其它方法断下来。

(其实在StrongOD和新版本OD中已经对这种反调试做过处理,所以基本上也是没什么太大的效果,只能用来对付一些小白级的Cracker)



[课程]Android-CTF解题方法汇总!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//