?? apihook.h
字號:
/////////////////////////////////////////////////////////
// APIHook.h文件
#ifndef __APIHOOK_H__
#define __APIHOOK_H__
#include <windows.h>
class CAPIHook
{
public:
CAPIHook(LPSTR pszModName,
LPSTR pszFuncName, PROC pfnHook, BOOL bExcludeAPIHookMod = TRUE);
virtual ~CAPIHook();
operator PROC() { return m_pfnOrig; }
// 實現
private:
LPSTR m_pszModName; // 導出要HOOK函數的模塊的名字
LPSTR m_pszFuncName; // 要HOOK的函數的名字
PROC m_pfnOrig; // 原API函數地址
PROC m_pfnHook; // HOOK后函數的地址
BOOL m_bExcludeAPIHookMod; // 是否將HOOK API的模塊排除在外
private:
static void ReplaceIATEntryInAllMods(LPSTR pszExportMod, PROC pfnCurrent,
PROC pfnNew, BOOL bExcludeAPIHookMod);
static void ReplaceIATEntryInOneMod(LPSTR pszExportMod,
PROC pfnCurrent, PROC pfnNew, HMODULE hModCaller);
// 下面的代碼用來解決其它模塊動態加載DLL的問題
private:
// 這兩個指針用來將所有的CAPIHook對象連在一起
static CAPIHook *sm_pHeader;
CAPIHook *m_pNext;
private:
// 當一個新的DLL被加載時,調用此函數
static void WINAPI HookNewlyLoadedModule(HMODULE hModule, DWORD dwFlags);
// 用來跟蹤當前進程加載新的DLL
static HMODULE WINAPI LoadLibraryA(PCSTR pszModulePath);
static HMODULE WINAPI LoadLibraryW(PCWSTR pszModulePath);
static HMODULE WINAPI LoadLibraryExA(PCSTR pszModulePath, HANDLE hFile, DWORD dwFlags);
static HMODULE WINAPI LoadLibraryExW(PCWSTR pszModulePath, HANDLE hFile, DWORD dwFlags);
// 如果請求已HOOK的API函數,則返回用戶自定義函數的地址
static FARPROC WINAPI GetProcAddress(HMODULE hModule, PCSTR pszProcName);
private:
// 自動對這些函數進行掛鉤
static CAPIHook sm_LoadLibraryA;
static CAPIHook sm_LoadLibraryW;
static CAPIHook sm_LoadLibraryExA;
static CAPIHook sm_LoadLibraryExW;
static CAPIHook sm_GetProcAddress;
};
#endif // __APIHOOK_H__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -