Hook

出自ProgWiki
跳至導覽 跳至搜尋

Hook,參照:『維基百科~Hooking

  • Hook 基本上是一種從中欄截的技術,依實際作用方式,分成3大類:
    • Hook Windows Message (例如:攔截按鍵)
    • Hook API(例如:加速器、攔截封包、對話內容Log記錄……等)
    • Hook COM(例如:抓圖,因為DirectX的遊戲大多用到翻頁的方式去顯示,所以對GUI所在的主要顯示頁抓hdc,並無法100%都抓得到遊戲的畫面)

Hook Windows Message

使用範例

技術文件

idHook HOOKPROC 用途
WH_CALLWNDPROC CallWndProc
WH_CALLWNDPROCRET CallWndRetProc
WH_CBT CBTProc
WH_DEBUG DebugProc
WH_FOREGROUNDIDLE ForegroundIdleProc
WH_GETMESSAGE GetMsgProc
WH_JOURNALPLAYBACK JournalPlaybackProc
WH_JOURNALRECORD JournalRecordProc
WH_KEYBOARD KeyboardProc
WH_KEYBOARD_LL LowLevelKeyboardProc
WH_MOUSE MouseProc
WH_MOUSE_LL LowLevelMouseProc
WH_MSGFILTER MessageProc
WH_SHELL ShellProc
WH_SYSMSGFILTER SysMsgProc

Hook API

使用範例

技術文件

類型 API 用途
Authorization Functions OpenProcessToken
LookupPrivilegeValue
AdjustTokenPrivileges
Dynamic-Link Library Functions LoadLibrary
GetProcAddress
Process and Thread Functions OpenProcess
CreateRemoteThread
GetCurrentProcess
Debugging Functions ReadProcessMemory
WriteProcessMemory
Memory Management Functions VirtualAllocEx 配置虛擬記憶體
VirtualFreeEx 釋放虛擬記憶體
Handle and Object Functions CloseHandle 關閉Handle
Synchronization Functions WaitForSingleObject
InitializeCriticalSection 初始化CriticalSection變數
EnterCriticalSection 多工同步開始(使用CriticalSection)
LeaveCriticalSection 多工同步結束(使用CriticalSection)

Hook COM

COM的檔案取代法

  1. 先寫一個COM繼承自要欄截的COM,並覆寫要欄截的成員函數(使用 base. 的方式去呼叫被覆寫前的成員函數)
  2. 然後……

COM的成員函數的進入點攔截法

  • Hook COM的原理與Hook API類似,只是Hook API只需處理所要攔截的API進入點,而Hook COM則是要先抓到該COM的進入點,再去處理該COM的所要攔截的成員函數的進入點。
  • Hooking a DirectX/COM Interface

相關技術

參考資料

  • ISBN 957-2085-62-X 《Microsoft Windows 應用程式設計開發指南》 第22章 注入DLL與API攔截