1. 程式人生 > 其它 >檢測系統實時偵錯程式痕跡

檢測系統實時偵錯程式痕跡

檢測實時偵錯程式是否是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"); } }