反调试——6——附加进程反调试

经常在给调试器附加进程时进程直接崩溃了,比如说用比较常见的ollydbg没有加任何处理来附加DNF就会直接崩溃。

附加调试流程

debugger(调试器)在调用DebugActiveProcess来附加进程后,进程中有多少个线程,调试器就会发送多少个CREATE_THREAD_DEBUG_EVENT事件给调试器,加载了多少dll也会发送多少个LOAD_DLL_DEBUG_EVENT事件给调试器,调试器通过WaitForDebugEvent函数来获取所有的调试事件,并做处理。

然后调用ContinueDebugEvent让程序继续运行,同时也会等待新的调试事件,然后操作系统恢复进程中的所有线程,在第一个线程被恢复的时候会调用Ntdll.dll中的DbgBreakPoint函数,而这个DbgBreakPoint函数就是一个int3断点,利用这点可以HOOK掉DbgBreakPoint来直接调用结束进程函数来实现反调试

 

验证:

这里我随便找了个程序用xdbg来附加:

 

 

可以看到就是停在了DbgBreakPoint这个int3断点这里。