Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Windows CE 跨程序記憶體注入原理與 PerformCallBack4 實作詳解

編輯:Linux 教學

背景與挑戰

Windows CE 採用獨特的 Slot 記憶體架構,傳統桌面 Windows 的全域鉤子、遠端執行緒注入 (CreateRemoteThread) 等技術均失效。本文揭露未公開 API PerformCallBack4 結合 Slot 0 特性,實現跨程序代碼執行的完整原理與實作路徑。

核心前提條件

  1. 將目標代碼載入目標程序位址空間
  2. 觸發目標程序執行該代碼並截獲視窗訊息

關鍵機制:Slot 0 與 DLL 共享映射

  • CE 為節省記憶體,將所有程序載入的同一 DLL 映射至相同虛擬位址
  • Slot 0 為當前執行程序保留;程序排程時,核心將其代碼複製至 Slot 0 執行
  • 若程序 A、B 均 LoadLibrary("Test.dll"),則 Test.dll 內函數在 Slot 0 中位址相同

突破記憶體隔離:SetKmode / SetProcPermissions

// 核心模式切換
BOOL SetKmode(BOOL fKmode);  // TRUE = 核心模式執行

// 程序權限遮罩:每 bit 對應一個 Slot 存取權
BOOL SetProcPermissions(DWORD dwPerms);  // bit=1 允許存取對應 Slot

驅動程式常用此機制跨程序存取資料;應用層需簽名驅動或核心模式才能呼叫。

核心 API:PerformCallBack4

宣告 (C# P/Invoke)

[DllImport("coredll.dll")]
public static extern uint PerformCallBack4(
    ref CallBackInfo cbInfo,
    IntPtr pVoid1, IntPtr pVoid2, IntPtr pVoid3
);

[StructLayout(LayoutKind.Sequential)]
public struct CallBackInfo {
    public IntPtr hProc;   // 目標程序控制代碼
    public IntPtr pfn;     // 目標程序空間內函數位址
    public IntPtr pvArg0;  // 第一參數
}

參數說明:

  • hProc:OpenProcess 取得的目標程序控制代碼
  • pfn:目標程序空間內函數絕對位址(利用 DLL 共享映射推算)
  • pvArg0 ~ pVoid3:傳遞給目標函數的 4 個參數

完整注入流程

  1. 雙方程序均 LoadLibrary("InjectDll.dll")
  2. 注入端取得自身 InjectDll.dll 中目標函數 TargetFunc 位址
  3. 利用 Slot 0 映射特性,推算目標程序空間中 TargetFunc 同樣位址
  4. OpenProcess 取得目標 hProc
  5. 填充 CallBackInfo,呼叫 PerformCallBack4 觸發遠端執行

驗證與注意事項

  • WM 5.0+ 同樣支援,網傳「不支援」為謠言
  • 需目標程序已載入同名 DLL,否則位址推算失效
  • 涉及核心模式切換與記憶體權限修改,極高風險,僅供安全研究與除錯用途
  • 現代 CE 7/2013 引入 CFG/DEP/ASLR,增加利用難度

結語

Windows CE 獨特的 Slot 記憶體架構與 DLL 共享映射,配合未公開的 PerformCallBack4,形成了一條跨程序代碼執行的隱蔽路徑。深入理解此機制,不僅有助於嵌入式安全防禦(如偵測異常跨程序呼叫),也為舊版系統熱修補、除錯工具開發提供理論基礎。實務上強烈建議改用簽名驅動、ETW 追蹤等合法機制替代注入技術。

Copyright © Windows教程網 All Rights Reserved