Windows C++ / NtGlobalFlag

Author Glacius
Platform Windows
Language C++
Technique NtGlobalFlag

Code

#include <Winternl.h>
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>

/*
*Using ZwQueryInformationProcess we get the PEB Address and 
*then we check the NtGlobalFlag to determine the process is being debugged or not.
*/

int main() {
     
    typedef unsigned long(__stdcall *pfnZwQueryInformationProcess)
    (
        IN  HANDLE,
        IN  unsigned int, 
        OUT PVOID, 
        IN  ULONG, 
        OUT PULONG
    );
    pfnZwQueryInformationProcess ZwQueryInfoProcess = NULL;
     
    HMODULE hNtDll = LoadLibrary(_T("ntdll.dll"));
    if (hNtDll == NULL) { }
 
    ZwQueryInfoProcess = (pfnZwQueryInformationProcess) GetProcAddress(hNtDll,
        "ZwQueryInformationProcess");
    if (ZwQueryInfoProcess == NULL) { }
    unsigned long status;
 
    DWORD pid = GetCurrentProcessId();
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
    PROCESS_BASIC_INFORMATION pbi;
    status = ZwQueryInfoProcess(hProcess,
                                ProcessBasicInformation,
                                &pbi,
                                sizeof(pbi),
                                NULL);
                                 
    PPEB peb_addr = pbi.PebBaseAddress;
    DWORD ptr = pbi.PebBaseAddress;
    ptr|=104;
    DWORD *temp = ptr;
    MessageBox(0, *temp ? "Debugger found" : "Debugger not found","Status",0x30);
     
    return 0;
}

Created

September 27, 2020

Last Revised

April 22, 2024