65.9K
CodeProject 正在变化。 阅读更多。
Home

HookAPI 源代码

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.09/5 (36投票s)

2005年1月21日

2分钟阅读

viewsIcon

415055

downloadIcon

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 完整源代码
  • 许多示例源代码,例如:

  1. 钩取套接字函数,如 socket, send, recv, connect, ...

  2. 钩取文件函数,如 CreateFile, ReadFile, ...

  3. 钩取注册表函数,如 RegOpenKey, RegQueryValue, RegQueryValueEx, ...

  4. Delphi 示例,用于钩取套接字函数

  5. Delphi 示例,用于钩取文件函数

  6. 钩取 ExitWindowsEx

  7. 钩取 LoadLibrary GetProcAddress

  8. 钩取 GDI 函数,如 TextOut, ExtTextOut

  9. 钩取 Shell API 函数,如 SHBrowseForFolder, SHGetFileInfo, ...

  10. 隐藏进程示例,它可以隐藏进程,任务管理器无法找到它

  11. 过滤广告栏示例,它可以过滤 IE 或其他网络应用程序的广告栏,或过滤来自某些 TCP/UDP 端口的数据

  12. 消息过滤器示例,它可以过滤 Windows 的某些消息

  13. 执行文件管理器示例,它可以禁止打开、执行和隐藏某些文件或文件夹

  14. 网络加密示例,它可以加密所有用套接字编写的应用程序。有了它,您就不需要在应用程序中进行加密了。

  15. 钩取一个海战游戏,自动投弹并自动躲避子弹

© . All rights reserved.