-
-
[原创]反调试心得(一) 函数篇
-
2014-6-18 12:37
5178
-
反调试心得
---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
);
先编译个再说。代码如下:
#include "stdafx.h"
#include "Windows.h"
int main(){
Bool DbgFlag=false;
CheckRemoteDebuggerPresent(GetCurrentProcess(),DbgFlag);
if (DbgFlag){
printf("\n Debugger Exist");}
rerurn 0;
}
OD调戏起来把插件都关了,除了之前糊弄IsdebuggerPresent的插件。运行起来效果如下:
直接上传PDF文档了 嘿嘿 不太会贴代码
[ATTACH][/ATTACH]
antisb.zip
【原创】反调试心得(一) 函数篇.pdf
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课