📄 checkparentproc.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 + -