首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

C++ 免殺技巧:動態調用 Windows API 繞過靜態特徵掃描

     編輯:更多程式設計知識

殺毒軟件常靜態掃描敏感 API 字符串(如 CreateRemoteThread)。通過 GetProcAddress 運行時解析函數地址,配合函數指針類型重定義與字符串拆分混淆,可有效繞過靜態特徵匹配。

核心步驟

  1. 右鍵「轉到定義」獲取目標 API 完整原型(含 SAL 註解);
  2. 定義同簽名函數指針類型,重命名(如 CreateRemoteThreadxx);
  3. LoadLibrary + GetProcAddress 獲取真實入口;
  4. 調用時使用自定義指針變量(如 yyCreateRemoteThread)。

實戰代碼

// 1. 原型 (來自 WinBase.h)
WINBASEAPI HANDLE WINAPI CreateRemoteThread(
    HANDLE hProcess,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    SIZE_T dwStackSize,
    LPTHREAD_START_ROUTINE lpStartAddress,
    LPVOID lpParameter,
    DWORD dwCreationFlags,
    LPDWORD lpThreadId
);

// 2. 重定義函數指針類型
typedef HANDLE (WINAPI *CreateRemoteThreadxx)(
    HANDLE, LPSECURITY_ATTRIBUTES, SIZE_T,
    LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD
);

// 3. 運行時解析
CreateRemoteThreadxx yyCreateRemoteThread =
    (CreateRemoteThreadxx)GetProcAddress(
        LoadLibrary("kernel32.dll"), "CreateRemoteThread"
    );

// 4. 調用
HANDLE hThread = yyCreateRemoteThread(hProcess, attrs, stack, start, param, flags, &tid);

進階混淆

  • 字符串拆分:"CreateRemote" "Thread" 或運行時拼接,阻斷字符串掃描。
  • A/W 後綴選擇:ANSI 環境用 CreateRemoteThreadA,Unicode 用 CreateRemoteThreadW,避免載入錯誤版本。
  • 延遲綁定:首次調用時才 GetProcAddress,減少內存駐留特徵。

法律與道德聲明

本技術旨在合法安全研究、紅隊授權演練、自我保護機制測試。未經授權繞過安全產品檢測屬違法行為。請嚴格遵守《網絡安全法》及相關法規,僅在合法授權範圍內使用。

局限性

  • 動態行為分析(沙箱、HIPS、EDR)仍可捕獲運行時調用;
  • IAT 表雖無字符串,但導入表結構本身可被啟發式掃描;
  • 簽名驗證、代碼完整性檢查(如 HVCI)可阻止非簽名代碼執行。

免殺是攻防博弈的單點技術,**系統級防禦繞過需組合多層次技術**,且必須在法律框架內進行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved