1. 函数检测

BOOL WINAPI IsDebuggerPresent(void);

BOOL CheckRemoteDebuggerPresent(
  HANDLE hProcess,              // 处理的句柄
  PBOOL  pbDebuggerPresent              // 如果正在调试指定的进程, 则指向该函数设置为TRUE的变量的指针, 否则为FALSE.
);
NTSTATUS WINAPI NtQueryInformationProcess(
  _In_      HANDLE           ProcessHandle,
  _In_      PROCESSINFOCLASS ProcessInformationClass,
  _Out_     PVOID            ProcessInformation,
  _In_      ULONG            ProcessInformationLength,
  _Out_opt_ PULONG           ReturnLength
);

// 例: 
NtQueryInformationProcess(GetCurrentProcess(), (PROCESSINFOCLASS)7, &debugPort, sizeof(debugPort), NULL)

2. 数据检测

2.1 查询进程PEB的BeingDebugged标志位

检测PEB第三位 BeingDebugged 是否为1

bool PebIsDebuggedApproach(){
    char result = 0;
    __asm{
        // 进程的PEB地址放在fs这个寄存器位置上
        mov eax, fs:[30h]
        // 查询BeingDebugged标志位
        mov al, BYTE PTR [eax + 2]
        mov result, al
    }
    return result != 0;
}

2.2 查询进程PEB的NtGlobal标志位

当进程被调试的时候,操作系统除了修改BeingDebugged这个标志位以外,还会修改其他几个地方,其中NtDll中一些控制堆(Heap)操作的函数的标志位就会被修改

bool PebNtGlobalFlagsApproach(){
    int result = 0;
    __asm{
        // 进程的PEB
        mov eax, fs:[30h]
        // 控制堆操作函数的工作方式的标志位
        mov eax, [eax + 68h]
        // 操作系统会加上这些标志位FLG_HEAP_ENABLE_TAIL_CHECK,
        // FLG_HEAP_ENABLE_FREE_CHECK and FLG_HEAPVALIDATE
        PARAMETERS,
        // 它们的并集就是x70
        // 下面的代码相当于C/C++的
        // eax = eax & 0x70
        and eax, 0x70
        mov result, eax
    }
    return result != 0;
}

2.3 查询进程堆的一些标志位

只要进程被调试,进程在堆上分配的内存,在分配的堆的头信息里,ForceFlags这个标志位会被修改

bool HeapFlagsApproach(){
    int result = 0;
    __asm{
        // 进程的PEB
        mov eax, fs:[30h]
        // 进程的堆,我们随便访问了一个堆,下面是默认的堆
        mov eax, [eax + 18h]
        // 检查ForceFlag标志位,在没有被调试的情况下应该是
        mov eax, [eax + 10h]
        mov result, eax
    }
    return result != 0;
}

3. 符号检测

一些调试器会使用驱动来实现某些功能,因此可以去检测驱动符号,来判断是否有调试器存在

\.\SomeDrv
CreateFile("\\.\SoftICE", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);

4. 窗口检测

5. 特征码检测

6. 行为检测

7. 断点检测

8. 功能破坏

9. 行为占用

Last modification:March 3rd, 2020 at 10:20 pm
如果觉得我的文章对你有用,请随意赞赏