能力值:
( LV2,RANK:10 )
|
-
-
2 楼
最基本的调试器检测技术就是检测进程环境块(PEB)中的BeingDebugged标志。IsDebuggerPresent() API检查这个标志以确定进程是否正在被用户模式的调试器调试。
我们用调试器附加调试一个进程的步骤是:
DebugActiveProcess ---> DbgUiDebugActiveProcess -->NtDebugActiveProcess --> DbgkpSetProcessDebugObject --->DbgkpMarkProcessPeb
最终在DbgkpMarkProcessPeb中有这样一句代码:
Process->Peb->BeingDebugged = (BOOLEAN)(Process->DebugPort != NULL ? TRUE : FALSE);
即PEB中的BeingDebugged标志设置来源于DebugPort.
DebugPort对应的结构如下:
typedef struct _DEBUG_OBJECT {
//
// Event thats set when the EventList is populated.
//
KEVENT EventsPresent;
//
// Mutex to protect the structure
//
FAST_MUTEX Mutex;
//
// Queue of events waiting for debugger intervention
//
LIST_ENTRY EventList;
//
// Flags for the object
//
ULONG Flags;
} DEBUG_OBJECT, *PDEBUG_OBJECT;
BOOLEAN
PsIsProcessBeingDebugged(
__in PEPROCESS Process
)
{
if (Process->DebugPort != NULL) {
return TRUE;
} else {
return FALSE;
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
第一时间说个谢谢!!
等了好久。。终于等到你回复了
|
|
|