/******************************************************************************\
* API Hook
* 作者: 宋雷
* e-mail: dummyz@126.com
* 版权保留 ^_^
* 2006-1-21
*******************************************************************************/
#ifndef _WINAPIHOOK_INC_
#define _WINAPIHOOK_INC_
#ifdef __cplusplus
extern "C" {
#endif
typedef LPVOID HAPIHOOK;
/*****************************************************
* 函数: CreateApiHook
* 功能描述:
* 创建一个 api hook 目标,初始化状态为无效
* 参数:
* LPVOID lpHookedAddress - 被修改的地址
* LPVOID lpHookProc - 监视过程地址
* 返回值:
* 成功失败返回 NULL, 成功返回一个非 NULL 值
*****************************************************/
HAPIHOOK WINAPI CreateApiHook(LPVOID lpHookedAddress,LPVOID lpHookProc);
/*****************************************************
*函数: SetApiHook
*功能描述:
* 设置 api hook 状态为有效
*参数:
* HAPIHOOK hApiHook - CreateApiHook 返回的有效值
*返回值:
* 成功返回 TRUE, 失败返回 FALSE
*****************************************************/
BOOL WINAPI SetApiHook(HAPIHOOK hApiHook);
/*****************************************************
*函数: ResetApiHook
*功能描述:
* 设置 api hook 状态为无效
*参数:
* HAPIHOOK hApiHook - CreateApiHook 返回的有效值
*返回值:
* 成功返回 TRUE, 失败返回 FALSE
*****************************************************/
BOOL WINAPI ResetApiHook(HAPIHOOK hApiHook);
/*****************************************************
*函数: DeleteApiHook
*功能描述:
* 设置 api hook 为无效,并且释放相关资源
*参数:
* HAPIHOOK hApiHook - CreateApiHook 返回的有效值
*返回值:
* 成功返回 TRUE, 失败返回 FALSE
*****************************************************/
BOOL WINAPI DeleteApiHook(HAPIHOOK hApiHook);
/*************************************************************************
* 函数: MappingInProcess
* 功能描述:
* 映射 MappingInProcess 所在模块到指定的进程空间
* 参数:
* DWORD dwProcessId - 目标进程的 ID, 如果 dwProcessId 为 -1, 那么
* MappingInProcess 将试着把它所在的模块映射到系统
* 中现存的进程空间内
* LPCTSTR lpszModuleFile - 附加需要同时映射到目标进程中的模块, 此值为 NULL
* 表示没有同时需要映射的模块
* 返回值:
* 成功返回非 0 值, 失败返回 0
*************************************************************************/
BOOL WINAPI MappingInProcess(DWORD dwProcessId, LPCWSTR lpszModuleFile);
/*************************************************************************
* 函数: UnmappingInProcess
* 功能描述:
* 从指定进程撤出 UnmappingInProcess 所在的模块
* 参数:
* DWORD dwProcessId - 目标进程 ID, 如果 dwProcessId 的值为 -1,
* 那么将试着丛全部进程中撤出此模块的映像
* LPCWSTR lpszModuleFile - 附加需要同时从到目标进程中撤出的模块, 此值为
* NULL 表示没有同时需要撤出的模块
* 返回值:
* 成功返回非 0 值,失败返回 0
*************************************************************************/
BOOL WINAPI UnmappingInProcess(DWORD dwProcessId, LPCWSTR lpszModuleFile);
/*****************************************************
* 函数:slmGetProcAddress
* 功能描述: 和 GetProcAddress 类似
*****************************************************/
FARPROC WINAPI slmGetProcAddress(HMODULE hModule, LPCSTR lpProcName);
/*************************************************************************
* 函数: slmGetModuleHandle
* 功能描述:
* 可以获取 dwProcessId 进程内 lpszModuleFile 的实例句柄
* 参数:
* DWORD dwProcessId - 目标进程的 ID
* LPCWSTR lpszModuleFile - 要获取信息的模块文件名
* 返回值:
* 如果成功返回 lpszModuleFile 在 dwProcessId 的实例句柄, 否则返回 NULL
*************************************************************************/
HINSTANCE WINAPI slmGetModuleHandleW(DWORD dwProcessId, LPCWSTR lpszModuleFile);
/*************************************************************************
* 函数: slmLoadLibrary
* 功能描述:
* 把 lpszModuleFile 加载到 dwProcessId 进程空间或增加引用计数
* 参数:
* DWORD dwProcessId - 目标进程 ID
* LPCWSTR lpszModuleFile - 要加载的模块文件名
* 返回值:
* 如果成功返回 lpszModuleFile 在 dwProcessId 的实例句柄, 失败返回 NULL
*************************************************************************/
HINSTANCE WINAPI slmLoadLibraryW(DWORD dwProcessId, LPCWSTR lpszModuleFile);
/*************************************************************************
* 函数: slmFreeLibrary
* 功能描述:
* 减少 hModule 在 dwProcessId 进程空间的引用计数
* 参数:
* DWORD dwProcessId - 目标进程
* HINSTANCE hModule - 目标模块
* 返回值:
* 成功返回非 0 值, 失败返回 0
*************************************************************************/
BOOL WINAPI slmFreeLibrary(DWORD dwProcessId, HINSTANCE hModule);
#ifdef __cplusplus
}
#endif
#endif
附件:apihook test.rar
源码
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)