HookAPI 源代码






3.09/5 (36投票s)
2005年1月21日
2分钟阅读

415055

9632
适用于 Windows API Hook 开发人员的系统范围 API 源代码
引言
HookAPI 是一个 API SDK,用于为所有 Windows 平台设置全局钩子。它可以轻松地钩取 32 位 Windows 系统 API 或 32 位用户定义的 DLL。它可以很容易地使用,您只需要编写一个名为 mydll.dll 或 mydll_9x.dll 的 DLL 文件即可。它基于 Yariv Kaplan 的 ApiSpy32。
代码将两个 DLL 注入到目标应用程序中。第一个 DLL,HookAPIxx.dll,更新 API 的前 5 个字节。
papi[0] =0xE8; *(DWORD *)&papi[1] =(DWORD)ProcessCall -(DWORD)papi -CALL_BYTES_SIZE;
另一个 DLL mydllxxx.dll,运行新的 API 而不是旧的 API,比如这个示例来钩取
socket
函数int WINAPI mysocket(int af, int type, int protocol) { WriteLog("debug mysocket, af=%d, type=%d, protocol=%d", af, type, protocol); return socket(af, type, protocol); }
并且 HookAPIxx.dll 钩取 CreateProcessW
/CreateProcessA
函数,因此它可以捕获新进程的创建并注入这两个 DLL
#ifdef WINNT if(!strcmp(pinfo->api_name, "CreateProcessW") || !strcmp(pinfo->api_name, "CreateProcessA") ) { pi =(PROCESS_INFORMATION *)pdwParam[9]; if(pi->hProcess) { InjectLib(pi->hProcess, fname); // hook new process<CODE> } } #endif
如果您想使用它,请先加载第一个 DLL HookAPIxx.dll。 如果是 NT 系统 (WinNT/XP/200x),您应该在 DLL 中调用函数 HookAllProcess()
,并在退出时调用 UnhookAllProcess
。DLL 中还有其他函数,例如 HookOneProcess
, HookOneProcess2
,用于在 NT 系统上钩取一个应用程序。
mydllxx.dll
在 HookAPIxx.dll
初始化时被加载,然后进行钩取
CHookAPI::CHookAPI() { LoadMyDll(); Init(); HookAllAPI(); }它包括以下部分
- HookAPI SDK 完整源代码
-
许多示例源代码,例如:
钩取套接字函数,如 socket,
send
,recv
,connect
, ...钩取文件函数,如
CreateFile
,ReadFile
, ...钩取注册表函数,如
RegOpenKey
,RegQueryValue
,RegQueryValueEx
, ...Delphi 示例,用于钩取套接字函数
Delphi 示例,用于钩取文件函数
钩取
ExitWindowsEx
钩取
LoadLibrary
和GetProcAddress
钩取 GDI 函数,如
TextOut
,ExtTextOut
钩取 Shell API 函数,如
SHBrowseForFolder
,SHGetFileInfo
, ...隐藏进程示例,它可以隐藏进程,任务管理器无法找到它
过滤广告栏示例,它可以过滤 IE 或其他网络应用程序的广告栏,或过滤来自某些 TCP/UDP 端口的数据
消息过滤器示例,它可以过滤 Windows 的某些消息
执行文件管理器示例,它可以禁止打开、执行和隐藏某些文件或文件夹
网络加密示例,它可以加密所有用套接字编写的应用程序。有了它,您就不需要在应用程序中进行加密了。
钩取一个海战游戏,自动投弹并自动躲避子弹