首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

導入表注入技術深度解析(二):API 重導向、運行時注入與 Rootkit 防禦

     編輯:關於VC++

API 重導向實戰:攔截 ShellAbout 對話框

本節示範如何透過修改導入表 Thunk,將 CALC.EXE 的 Shell32.dll!ShellAboutW 重導向至自訂訊息框。核心邏輯為遍歷導入描述符,比對 DLL 名稱與函數名稱,符合時將 Thunk 指向新代碼區塊:

// 偽代碼邏輯
if (strcmp(DLL_Name, "SHELL32.DLL") == 0 && strcmp(Func_Name, "ShellAboutW") == 0) {
    *Thunk = AddressOf(New_ShellAbout); // 重寫 IAT
}

新函數 _ShellAbout_NewCode 使用 PUSHAD/POPAD 保護暫存器,RET 10h 平衡堆疊(4 參數 × 4 位元組),並呼叫 MessageBox 顯示「Hello World!」。

重導向效果圖

對抗逆向工程:多態重導向與導入表保護

  • 多態代碼:加密函數名稱、動態生成重導向樁代碼,干擾 Import REConstructor 等重建工具
  • 虛擬導入表:EXE Protector 建立 Kernel32/User32/AdvApi32 虛擬庫,攔截敏感 API
  • 檔案系統過濾:如 MoleBox 重導向 FindFirstFile/FindNextFile 至記憶體虛擬檔案系統
Import REConstructor 導入表保護策略

運行時導入表注入:跨進程 IAT 修改

完整流程示範如何從外部進程注入代碼修改目標進程 IAT:

  1. 定位目標:WindowFromPoint → GetWindowThreadProcessId 取得 PID/TID
  2. 取得控制權:OpenProcess(PROCESS_ALL_ACCESS)、OpenThread(THREAD_ALL_ACCESS)、SuspendThread 凍結主執行緒
  3. 解析 PEB/TEB:透過 GetThreadContext + GetThreadSelectorEntry 計算 FS 基址 → 讀取 TEB → PEB → ImageBaseAddress
  4. 映射目標映像:ReadProcessMemory 讀取完整 PE 映像至本地緩衝區
  5. 定位並修改 IAT:遍歷 IMAGE_IMPORT_DESCRIPTOR、IMAGE_THUNK_DATA,比對 Shell32.dll 與 ShellAboutW 虛擬位址,重寫 Thunk 指向遠程配置的新代碼區 (VirtualAllocEx(PAGE_EXECUTE_READWRITE))
  6. 寫回並恢復:VirtualProtectEx(PAGE_EXECUTE_READWRITE) → WriteProcessMemory 寫回修改後映像 → ResumeThread 解凍
TEB/PEB 結構 運行時注入效果

特洛伊木馬場景:Yahoo Messenger 密碼竊取

注入 GetDlgItemText IAT,過濾對話框控制項 ID (211: 帳號, 212: 密碼) 竊取明文,再呼叫原函數維持正常流程。殺毒軟體僅掃描靜態檔案映像,無法檢測運行時記憶體注入。

Yahoo Messenger Hook

結論與防禦啟示

導入表操作技術雙面性明顯:合法用於熱修補、相容性層、安全監控;惡意用於 Rootkit、竊密、防破解。防禦需結合:

  • 記憶體完整性驗證 (IAT 掃描、頁面校驗和)
  • 行為分析 (異常 WriteProcessMemory/CreateRemoteThread 呼叫)
  • 虛擬化隔離 (沙箱、VBS/HVCI)
  • 啟用安全開發生命週期 (SDL)、簽名驗證、ASLR/DEP/CFG

理解此技術有助於建構虛擬機監控器、執行非原生 Windows 執行檔,亦是逆向工程與安全研究的核心基石。

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