调试器检测
PEB相关
BeingDebugged
BeingDebugged是位于PEB(Process Environment Block,进程环境块)偏移0x2处的标志。
IsDebuggerPresent()
IsDebuggerPresent()
是Windows的API,这个函数通过查询PEB中的BeingDebugged标志来判断当前进程是否处于被调试状态。
NtGlobalFlag
NtGlobalFlag位于PEB的0x068h处,如果BeingDebugged被设置为TRUE,则NtGlobalFlag的值为70h。
CheckRemoteDebuggerPresent()
CheckRemoteDebuggerPresent( )与IsDebuggerPresent( )类似,同为Windows API,可以直接调用,CheckRemoteDebuggerPresent()
实际调用了NtQueryInformationProcess(),查询某个进程的ProcessDebugPort即系统与调试器通信的端口句柄,CheckRemoteDebuggerPresent()通过查询这个值来确定程序是否处于调试状态。