Hook
跳至導覽
跳至搜尋
Hook,參照:『維基百科~Hooking』
- Hook 基本上是一種從中欄截的技術,依實際作用方式,分成3大類:
- Hook Windows Message (例如:攔截按鍵)
- Hook API(例如:加速器、攔截封包、對話內容Log記錄……等)
- Hook COM(例如:抓圖,因為DirectX的遊戲大多用到翻頁的方式去顯示,所以對GUI所在的主要顯示頁抓hdc,並無法100%都抓得到遊戲的畫面)
Hook Windows Message
使用範例
- Using Window Messages to Implement Global System Hooks in C# - CodeProject
- Processing Global Mouse and Keyboard Hooks in C# - CodeProject
- Hooks and DLLs - CodeProject
- 如何在C#中使用全域性滑鼠、鍵盤Hook - IT閱讀
技術文件
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 - CodeProject
- Hook Interrupts and Call Kernel Routines in User Mode - CodeProject
- API hooking revealed - CodeProject
- EasyHook - The reinvention of Windows API hooking - CodeProject
- API Hooking with MS Detours - CodeProject
- 《Windows核心编程》读书笔记二十二章 DLL注入和API拦截_sesiria的博客-CSDN博客
技術文件
- 參照:『維基百科~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
相關技術
- AdjustTokenPrivileges 拿 SE_DEBUG 除錯權限(需要過 UAC)
- OpenProcess 向系統申請對某Process讀取權限
- ReadProcessMemory 讀取指定Process某指標內容
- WriteProcessMemory
參考資料
- ISBN 957-2085-62-X 《Microsoft Windows 應用程式設計開發指南》 第22章 注入DLL與API攔截