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

Win7 x64 DLL 注入任務管理器失效?權限提升導致 CBT Hook 失效深度解析

     編輯:程式設計綜合問答

現象重現

在 Win7 64 位系統下,以普通用戶權限透過 CBT Hook (SetWindowsHookEx(WH_CBT, ...)) 將 64 位 DLL 注入任務管理器 (taskmgr.exe) 成功。但點擊「顯示所有用戶進程」按鈕後,任務管理器重啟並提升至 Administrator 權限,原本注入的 DLL 隨即失效,無法再次 Hook。

根因分析:UAC 虛擬化與完整性等級 (Mandatory Integrity Control)

  1. 初始狀態: 使用者以 Medium IL 啟動任務管理器,注入進程 (Hook 安裝者) 同為 Medium IL,DLL 注入成功。
  2. 提權觸發: 點擊「顯示所有用戶進程」觸發 UAC 同意提示,任務管理器重啟為 High IL (Admin)。
  3. IL 隔離: Windows 強制執行「無寫入上層」策略:Low/Medium IL 進程無法向 High IL 進程注入 DLL、安裝 Hook、寫入記憶體。原 Hook 進程 (Medium) 失去對目標 (High) 的控制權。

解決方案對比

方案原理優點缺點/風險
1. 以 Administrator 身分運行 Hook 程式提升安裝者 IL 至 High,匹配目標最簡單,代碼無需改動需用戶手動提權或關閉 UAC,不適合自動化部署
2. 使用 Windows Service (SYSTEM 權限) 安裝全域 Hook服務以 SYSTEM (High+) 運行,可 Hook 任何 IL 進程持久化、無需用戶干預架構複雜,需 IPC 與 UI 進程通訊,安全審計嚴格
3. 改用「應用程式相容性鏈接」 (AppInit_DLLs / Image File Execution Options)系統載入階段強制注入極早介入,不受 IL 限制註冊表修改需高權限,影響範圍過廣,易導致系統不穩,現代 Windows 已限制
4. 重新設計:避免 Hook 任務管理器改用 WMI、PDH、ETW、Performance Counter 等官方 API 獲取進程資訊合規、穩定、無權限問題可能無法滿足特定 UI 級監控需求

最佳實踐建議

優先選擇方案 4:除非極特殊需求(如防毒、EDR、監控軟體),否則不應 Hook 系統關鍵進程。改用 PdhAddEnglishCounter、WTSEnumerateProcesses、GetPerformanceInfo 等公開 API 獲取進程/效能資料,配合 SetWinEventHook (EVENT_OBJECT_CREATE/DESTROY) 監聽進程生命週期,完全避開注入與權限地雷區。

程式碼片段:以 Medium IL 列舉所有進程 (含系統進程)

// 需連結 Psapi.lib
#include 
#include 

void ListAllProcesses() {
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pe = { sizeof(pe) };
    if (Process32First(hSnap, &pe)) {
        do {
            HANDLE hProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pe.th32ProcessID);
            if (hProc) {
                TCHAR szPath[MAX_PATH] = {0};
                GetModuleFileNameEx(hProc, NULL, szPath, MAX_PATH);
                _tprintf(_T("PID:%5u  %s\n"), pe.th32ProcessID, szPath);
                CloseHandle(hProc);
            }
        } while (Process32Next(hSnap, &pe));
    }
    CloseHandle(hSnap);
}

總結

CBT Hook 失效本質是 Mandatory Integrity Control 阻擋跨 IL 注入。理解 UAC 虛擬化與 IL 機制,避免對抗系統安全架構,轉而使用官方診斷 API,才是長久穩健之道。

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