反调试心得 ---Forward 菜 鸟啊,说了是学习心得有错请大神指出 说到反调试,不得不说一下一个在Kernel32.dll里导出的win32 API,大家所熟悉的IsDebuggerPresent。一般来说几乎不用毕竟,先简单的说下他的实现原理。相对于接下来要说的函数,它的实现原理也比较简单。 _IsDebuggerPresent@0 proc near mov eax, large fs:18h mov eax, [eax+30h] movzx eax, byte ptr [eax+2] retn _IsDebuggerPresent@0 endp 由上段代码得知这个函数获取了当前进程PEB里的BeingDebugged。根据这个原理,只需要简单的清除掉这个标志,即可蒙混过关。Ollydbg也提供了相关的插件,因此不推荐使用。不过糊弄糊弄还是不错^ - ^ 。 (由于PEB并不是这里的重点篇幅有限就不具体展开了有兴趣的朋友可以自行Google)当然千万不要觉得过反调试太简单了,标志确实被消除了。但那是绝不是那么简单。翻开MSDN的Debugging Functions除之前讲的IsDebuggerPresent之外还有个一个CheckRemoteDebuggerPresent。原型如下 BOOL WINAPI CheckRemoteDebuggerPresent( _In_ HANDLE hProcess, _Inout_ PBOOL pbDebuggerPresent ); 先编译个再说。代码如下:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)