⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkparentproc.cpp

📁 此为本书的配套光盘.本书结合实例
💻 CPP
字号:
/*--------------------------------------------------------------
   CheckParentProc.cpp -- 检测用户模式调试器(如OllyDbg)
                           (c) www.pediy.com code by 段钢, 2003.11
  --------------------------------------------------------------*/
// 本实例没考虑父进程还可能是cmd.exe等情况,请读者自己加上
// 本实例调用了PSAPI.DLL文件中,这些函数只能在高于NT4.0以后的版本中使用。

#include <windows.h>
#include <tlhelp32.h>
#include <psapi.h> 
#pragma comment(lib, "psapi") 

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;
char Expchar[] ="\\EXPLORER.EXE";
char szBuffer[MAX_PATH]={0};
char FileName[MAX_PATH]={0}; 
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() )//判断是否是自己的进程?
	{

		HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pe32.th32ParentProcessID); //打开父进程
		
		if (hProcess) 
		 { 
			 if (GetModuleFileNameEx(hProcess, NULL, FileName,  MAX_PATH) ) // 得到父进程名
			  { 
				GetWindowsDirectory(szBuffer,MAX_PATH); //得到系统所在目录
				strcat(szBuffer,Expchar);            //组合成类似的字串D:\Winnt\Explorer.EXE
				if(strcmpi (FileName,szBuffer))  // 比较当前是否为Explorer.EXE进程
				   return TRUE;   // 父进程若不是Explorer.EXE,则是调试器
			 } 
			 else 
			 { 
				return FALSE; // 无法获得进程名
				
			  } 
			CloseHandle (hProcess); 
		} 
		 else 
		 { 
			  return FALSE;//无权访问该进程 
		 } 

	}


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

CloseHandle (hProcessSnap);
return FALSE; 

}


⌨️ 快捷键说明

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