首页 > 逆向调试 > 调试与反调试(一)——IsDebuggerPresent

调试与反调试(一)——IsDebuggerPresent

IsDebuggerPresent是一个声明与kernel32.dll中的函数,通过它可以检测当前进程是否正在被调试。当然,这是一个很古老的API了,我相信不会有人用这个来检测程序在被调试,因为这个很容易绕过。对于专业的调试器而言,IsDebuggerPresent根本就没有用武之地。下面看一个例子:

// 作者:代码疯子
// 博客:http://www.programlife.net/
// 转载请注明:本文来自程序人生——Www.ProgramLife.Net
#include <windows.h>
 
int WINAPI WinMain(
	   HINSTANCE	hInstance,
	   HINSTANCE	hPrevInstance,
	   LPSTR		lpCmdLine,
	   int			nCmdShow)
{
	typedef BOOL (CALLBACK *TestDebugger)();
	TestDebugger pAddr = NULL;
	HINSTANCE hKernel32 = LoadLibrary(TEXT("kernel32.dll"));
	if (hKernel32 != NULL)
	{
		pAddr = GetProcAddress(
			hKernel32, 
			"IsDebuggerPresent");
		if (pAddr != NULL)
		{
			if (*(BYTE *)pAddr == 0xCC || *(BYTE *)pAddr != 0x64 || pAddr())
			{
				MessageBox(NULL, 
					TEXT("Oooo, Debugger Found!"),
					TEXT(">_<!!!"),
					MB_ICONWARNING);
			}
		}
		FreeLibrary(hKernel32);
	}
 
	return 0;
}

在用OD调试的时候一定要把相关反反调试插件移除,否则就看不到效果了。当把这个程序载入OD的时候,OD会提示断点损坏,然后提示可疑,然后直接就达到了反调试的目的了。


OD提示断点损坏


OD提示可疑的断点


发现调试器


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> 调试与反调试(一)——IsDebuggerPresent
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. 本文目前尚无任何评论.