Hooks
出自ProgWiki
Hooks
- Hooks 基本上是一種從中欄截的技術,依實際作用方式,分成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
使用範例
- HookAPI source code
- Hook Interrupts and Call Kernel Routines in User Mode
- API hooking revealed
- EasyHook - The reinvention of Windows API hooking
- hookAPI.cpp
技術文件
- 參照:『維基百科~DLL_injection』
- 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的檔案取代法
- 先寫一個COM繼承自要欄截的COM,並覆寫要欄截的成員函數(使用 base. 的方式去呼叫被覆寫前的成員函數)
- 然後……
COM的成員函數的進入點攔截法
- Hook COM的原理與Hook API類似,只是Hook API只需處理所要攔截的API進入點,而Hook COM則是要先抓到該COM的進入點,再去處理該COM的所要攔截的成員函數的進入點。
- Hooking a DirectX/COM Interface