checkparentproc.cpp

来自「此为本书的配套光盘.本书结合实例」· C++ 代码 · 共 94 行

CPP
94
字号
/*--------------------------------------------------------------
   CheckParentProc.cpp -- 检测用户模式调试器(如OllyDbg)
                            (c) www.pediy.com code by 段钢, 2003.11
  --------------------------------------------------------------*/


#include <windows.h>
#include <tlhelp32.h>

BOOL IsInDebugger();
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{	 
      
	if( IsInDebugger() )
		MessageBox(NULL,TEXT ("u are debugging me !"),TEXT ("OK"),MB_ICONEXCLAMATION);
	else
       	MessageBox(NULL,TEXT ("not debugged!"),TEXT ("OK"),MB_ICONEXCLAMATION);
	return 0;
}

//////////////////////////////////////////////////////////////////////

BOOL IsInDebugger()
{

HANDLE     hProcessSnap = NULL;
DWORD ParentID;

char Expchar[] ="EXPLORER.EXE";

PROCESSENTRY32 pe32   = {0};
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //得到所有进程的列表快照

if (hProcessSnap == INVALID_HANDLE_VALUE)  
	return FALSE;          

pe32.dwSize = sizeof(PROCESSENTRY32);


if (!Process32First(hProcessSnap, &pe32))  // 查找进程
{
	CloseHandle (hProcessSnap);
	return FALSE; 
}

do // 遍历所有进程
{


	if(pe32.th32ProcessID==GetCurrentProcessId() )//判断是否自己的进程?
	{
		ParentID=pe32.th32ParentProcessID;


		//if(pe32.th32ParentProcessID!=ExplProc)  
		//	return TRUE;                   // 父进程不是Explorer.EXE,则是调试器

	}

}
while (Process32Next(hProcessSnap, &pe32));


if (!Process32First(hProcessSnap, &pe32))  // 查找进程
{
	CloseHandle (hProcessSnap);
	return FALSE; 
}


//根据ID得到创建此窗口的进程的文件名
//对于Win 2000/XP要容易些,因为有GetModuleFileNameEx这个函数,它可以查指定进程中任何模块的文件名,
//而且带有路径。Win9X下除了枚举进程一一比较外,我还没想出办法。

do // 遍历所有进程
{
	if(pe32.th32ProcessID==ParentID)
	{
		strrev(pe32.szExeFile); //Win98得到的进程名有路径,而Win2000/XP下得到进程名无路径
		strrev(Expchar);        // 为了省事,在这将字符串倒过来比较,即比较后12位是否为Explorer.EXE
		if(strnicmp (pe32.szExeFile,Expchar,12))  // 比较当前是否为Explorer.EXE进程
		return TRUE;  
	}
}
while (Process32Next(hProcessSnap, &pe32));


CloseHandle (hProcessSnap);
return FALSE; 

}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?