首页
社区
课程
招聘
[讨论]用DebugActiveProcess检测被调试?
发表于: 2013-5-3 10:01 6187

[讨论]用DebugActiveProcess检测被调试?

2013-5-3 10:01
6187
根据能否附加目标进程来判断是否被调试了,不知道可行不?


#include <windows.h>

BOOL EnableDebugPrivilege(BOOL bEnable)
{
BOOL fOK = FALSE; //Assume function fails
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
//Attempt to modify the "Debug" privilege
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
fOK = (GetLastError() == 0);
CloseHandle(hToken);
}
return fOK;
}


int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
LPSTR pFind = strstr(lpCmdLine, "pid=");

if (0 == pFind)
{
// 创建子进程,并以父进程的PID为命令行参数,让子进程尝试attach 父进程
char path[MAX_PATH], format[MAX_PATH];
GetModuleFileNameA(NULL, path, sizeof(path));
wsprintfA(format, "pid=%d", GetCurrentProcessId());
ShellExecuteA(NULL, "open", path, format, NULL, 0);

// 只是起不让父进程退出的作用
MessageBoxA(NULL, "just keep process running", NULL, 0);
}
else
{
// 子进程

// attach 需要调试权限
EnableDebugPrivilege(TRUE);

pFind += 4;
long pid = atol(pFind);
if(!DebugActiveProcess(pid))
{
// 可能被调试了
DWORD err = GetLastError();
char error[MAX_PATH];
wsprintfA(error, "attach failed with error code:0x%0x\n", GetLastError());
MessageBoxA(NULL, error, NULL, 0);
}
else
{
// 没有被调试
DebugActiveProcessStop(pid);
MessageBoxA(NULL, "process is not debugged!", NULL, 0);
}
}
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
可行,很好,这个方法我不想丢出来,汗 被你丢出来了,你比我大方啊
2013-5-3 10:27
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
3
这么做了会不兼容很多壳等东西~
2013-5-3 10:37
0
雪    币: 270
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
开着PP可不能用这个了,会让程序假死。。。
2013-5-11 23:23
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
路过,来围观一下,mark了...
2013-5-11 23:48
0
游客
登录 | 注册 方可回帖
返回
//