外挂框架开发(1)HOOKAPI

这篇博客介绍了外挂开发的基础,重点是HOOKAPI技术。通过Detours库实现API钩子,以DLL的形式组织代码,并提供了注入及卸载DLL到目标进程的示例代码。文章讲解了如何使用DetoursFunction进行API挂截和清除,以及如何利用Windows API创建远程线程来加载和卸载DLL。
摘要由CSDN通过智能技术生成

这一篇是外挂开发的基础。可能对初学者而言听起来很麻烦,其实不然。因为这方面的技术也已很成熟了,源码都是公开的,剩下来就是怎么用了。在多线程环境下,理论上有两种方法实现挂截API,一是Jeffery的修改IAT算法,二是用detours开发包。我建议大家用detours。因为只需要少量几行代码就可实现挂截。以1.5版本为例:

typedef int (WINAPI *PFN_TCP)(SOCKET s,const char FAR *buf,int len,int nflag);
PFN_TCP  _send  = NULL;
 int WINAPI mysend(SOCKET s,const char FAR *buf,int len,int nflag)
{
   //your code goes here:
   //...
   return ((PFN_TCP)_send)(s,buf,len,nflag);

这样实现挂截   

 PBYTE pfn = (PBYTE)GetProcAddress( hwsock32,"send");
   _send = (PFN_TCP)DetourFunction(pfn,(PBYTE)mysend);

这样清除挂截

  DetourRemove((PBYTE)_send,(PBYTE)mysend);

到这里,如果通过别的什么工具知道send函数的buf里传输的是什么含义后,在mysend中加入你的补丁代码,已经完成核心功能了。恭喜你。

可是,以上代码用什么方法组织起来呢?答案是DLL。写法如下:

extern BOOL SpyInit();
extern BOOL SpyInit();
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  r, LPVOID lpReserved )
{
 
 if( r==DLL_PROCESS_ATTACH )
 {
  return SpyInit();
 }
 
 else if( r==DLL_PROCESS_DETACH )
 {
  SpyExit();
 }
    return TRUE;
}
其中,SpyInit()就是DetourFunction包装后的样子;

接下来,我们得考虑怎么把以上代码“安装”到目标进程中去。好在算法Jerffrey早就为我们准备好了(见《windows核心编程》),用这个算法写个工具,专门用来装/卸动态库。这样做的好处是,当我们的DLL成功安装到指定进程后,这个工具就可以关掉了。

#include "stdafx.h"
#include "Injectlib.h"

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值