如何使用WINSOCK命令处理消息,Api hook拦截修改socket数据包

如何使用WINSOCK命令处理消息,Api hook拦截修改socket数据包,第1张

下面重点介绍创建挡截 WinSock 外挂程序的基本步骤:
(1) 创建 DLL 项目,选择 Win32 Dynamic-Link Library ,再选择 An empty DLL project 。
(2) 新建文件 wsock32h ,按如下步骤输入代码:
① 加入相关变量声明:
  HMODULE hModule=NULL; // 模块句柄
  char buffer[1000]; // 缓冲区
  FARPROC proc; // 函数入口指针
② 定义指向原WinSock库中的所有函数地址的指针变量,因WinSock库共提供70多个函数,限于篇幅,在此就只选择几个常用的函数列出,有关这些库函数的说明可参考MSDN相关内容。
  // 定义指向原 WinSock 库函数地址的指针变量。
  SOCKET (__stdcall socket1)(int ,int,int);// 创建 Sock 函数。
  int (__stdcall WSAStartup1)(WORD,LPWSADATA);// 初始化 WinSock 库函数。
  int (__stdcall WSACleanup1)();// 清除 WinSock 库函数。
  int (__stdcall recv1)(SOCKET ,char FAR ,int ,int );// 接收数据函数。
  int (__stdcall send1)(SOCKET ,const char ,int ,int);// 发送数据函数。
  int (__stdcall connect1)(SOCKET,const struct sockaddr ,int);// 创建连接函数。
  int (__stdcall bind1)(SOCKET ,const struct sockaddr ,int );// 绑定函数。
  其它函数地址指针的定义略。
(3) 新建 wsock32cpp 文件,按如下步骤输入代码:
① 加入相关头文件声明:
  #include <windowsh>
  #include <stdioh>
  #include "wsock32h"
② 添加DllMain函数,在此函数中首先需要加载原WinSock库,并获取此库中所有函数的地址。代码如下:
  BOOL WINAPI DllMain (HANDLE hInst,ULONG ul_reason_for_call,LPVOID lpReserved)
  {
if(hModule==NULL){
  // 加载原 WinSock 库,原 WinSock 库已复制为 wsock32001 。
  hModule=LoadLibrary("wsock32001");
}
else return 1;
// 获取原 WinSock 库中的所有函数的地址并保存,下面仅列出部分代码。
if(hModule!=NULL){
  // 获取原 WinSock 库初始化函数的地址,并保存到 WSAStartup1 中。
proc=GetProcAddress(hModule,"WSAStartup");
  WSAStartup1=(int (_stdcall )(WORD,LPWSADATA))proc;
  // 获取原 WinSock 库消除函数的地址,并保存到 WSACleanup1 中。
proc=GetProcAddress(hModule i,"WSACleanup");
WSACleanup1=(int (_stdcall )())proc;
  // 获取原创建 Sock 函数的地址,并保存到 socket1 中。
proc=GetProcAddress(hModule,"socket");
  socket1=(SOCKET (_stdcall )(int ,int,int))proc;
  // 获取原创建连接函数的地址,并保存到 connect1 中。
  proc=GetProcAddress(hModule,"connect");
  connect1=(int (_stdcall )(SOCKET ,const struct sockaddr ,int ))proc;
  // 获取原发送函数的地址,并保存到 send1 中。
  proc=GetProcAddress(hModule,"send");
  send1=(int (_stdcall )(SOCKET ,const char ,int ,int ))proc;
  // 获取原接收函数的地址,并保存到 recv1 中。
  proc=GetProcAddress(hModule,"recv");
  recv1=(int (_stdcall )(SOCKET ,char FAR ,int ,int ))proc;
  其它获取函数地址代码略。
  }
  else return 0;
  return 1;
}

以上就是关于如何使用WINSOCK命令处理消息,Api hook拦截修改socket数据包全部的内容,包括:如何使用WINSOCK命令处理消息,Api hook拦截修改socket数据包、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10638715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存