检测系统实时调试器痕迹

检测实时调试器是否是OllyDbg等调试软件。这个方法挺垃圾的,主要是这是在赌,赌那些调试人员的电脑上有OllyDbg等调试软件,且实时调试器被设置成了这些软件。


实时调试器注册表路径_x32:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
实时调试器注册表路径_x64:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

可以看到在Win10本机中,实时调试器被设置成vs的调试器。

 

 

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

BOOL Check_Realtime_Debugger();

DWORD WINAPI ThreadallBack(LPVOID lp)
{
    while (true)
    {
        if (Check_Realtime_Debugger() == TRUE)
        {
            MessageBox(0, "已设置实时调试器", "提示", MB_OK);
            break;
        }
    }
    return 0;
}

BOOL Check_Realtime_Debugger()
{
    // 注册表路径
    CHAR RegPath32[] = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug";
    CHAR RegPath64[] = "SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug";

    // 获取当前程序位数
    HANDLE CurrentHandle =  GetCurrentProcess();
    BOOL Is86Process;
    IsWow64Process(CurrentHandle,&Is86Process);

    HKEY hKey = NULL;
    // 键名
    char KeyName[] = "Debugger";


    // 获取注册表路径对应的KEY
    BOOL bRet;
    if (Is86Process == TRUE)
    {
        // 如果当前程序是32位
        bRet = RegCreateKey(HKEY_LOCAL_MACHINE, RegPath32,&hKey);
    }
    else
    {
        // 如果当前程序是64位
        bRet = RegCreateKey(HKEY_LOCAL_MACHINE, RegPath64, &hKey);
    }


    if (bRet != ERROR_SUCCESS)
    {
        printf("获取64位程序的注册表路径Key失败");
        return FALSE;
    }
    else
    {
        // 查询键值
        char KeyValue[MAX_PATH];
        DWORD KeyValueLength;
        DWORD ValueType;
        BOOL QueryRet= RegQueryValueEx(hKey, KeyName,NULL,&ValueType, (LPBYTE)KeyValue, &KeyValueLength);
        if (QueryRet != ERROR_SUCCESS)
        {
            printf("查询键值失败");
            return FALSE;
        }
        else
        {
            if (strstr(KeyValue, "vsjitdebugger.exe") != NULL || strstr(KeyValue, "Ollydbg") != NULL)
            {
                return TRUE;
            }
            else
            {
                return FALSE;
            }

        }
    }

}

int main()
{
    CreateThread(NULL, NULL, ThreadallBack, NULL, NULL, NULL);
    while (true)
    {
        printf("正在运行\n");
    }
}

 

posted @ 2022-04-13 15:44  人类观察者  阅读(80)  评论(0编辑  收藏  举报