现在的位置: 首页 > 综合 > 正文

hook socket send recv的代码(zz)

2014年09月06日 ⁄ 综合 ⁄ 共 2681字 ⁄ 字号 评论关闭

 

(zzfrom)http://hack.gameres.com/showthread.asp?threadid=3379

hook socket send recv的代码(1)
最后更新:2005.07.17

本程序演示如何拦截一个程序对send、recv函数的调用,
并把send、recv函数的参数用 WM_COPYDATA 消息发送
到监视程序中。

附带演示如何拦截DirectDrawCreate,并把
DirectDrawCreate返回的IDirectDraw指针中的函数 
SetCooperativeLevel 进行了拦截。

               要得到最新程序,请发 email 给我: zhaowd2001@yahoo.com

使用举例:
把程序解压到 C:/temp/ddraw/bin
启动cmd.exe,并转到 C:/temp/ddraw/bin 目录下。
其中,C:/temp/ddraw/bin 是程序所在目录

例子: 拦截 ie 的send,recv操作:

1)在命令行输入 
  withdll.exe /d:c:/temp/ddraw/bin/DetourDDraw.dll "%programfiles%/internet explorer/iexplore.exe"
  将启动ie,并把 DetourDDraw.dll 注入 ie 的地址空间。
2)启动 ddrawmessage.exe
  在 ie 中浏览www.microsoft.com网页,此时,
  在 ddrawmessage.exe中可以看到ie的send,recv操作

程序目录结构:

1.bin/withdll.exe
启动指定的进程,并用CreateRemoteThread方法把一个dll加载进进程地址空间。
withdll.exe /d:c:/temp/ddraw/bin/DetourDDraw.dll c:/winnt/system32/iexplore.exe
将启动ie,并把 DetourDDraw.dll 注入 ie 的地址空间

2.bin/DDrawMessage.exe
显示 DetourDDraw.dll 通过 WM_COPYDATA 发送来得消息

用 vc6 来编译

3.src/DetourDDraw
DetourDDraw.dll的源程序。
用 微软研究院的 detour 开发包,拦截 send,recv,DirectDrawCreate函数的例子。

注意,程序把 WM_COPYDATA发送的数据大小限制为96个字节,你可以修改
DetourDDrawcopydata.h中的COPYDATA_MAX_SIZE 来改变这个大小,0 表示不限制数据大小。
DetourDDraw.dll 在 send,recv 函数内面查找 class 
为COPYDATA2GUI_CLASS,caption为COPYDATA2GUI_CAPTION 的窗口,
找到的话,就用WM_COPYDATA 把send,recv的信息发送给这个窗口。

你可以修改这两个常量,把消息发送给自己的程序。 
DDrawMessage.exe 就创建了一个caption为COPYDATA2GUI_CAPTION的隐藏窗口,
用来接收 DetourDDraw.dll 发送的消息。
用 makedetourddraw.bat 来编译 DetourDDraw.dll

detours下载:
http://research.microsoft.com/sn/detours/

detourddraw 的编译:
1)启动 cmd.exe
2)运行 c:/Program Files/Microsoft Visual Studio/VC98/Bin/vcvars32.bat
3)转到 detourddraw 的目录下
4)输入 nmake即可编译detourddraw,或者用 makedetourddraw.bat编译

4.src/DDrawMessage
DDrawMessage.exe的MFC程序,关键是 CDDrawMessageHiddenDlg::OnCopyData 
函数,其他都是MFC自己创建的。

用 vc6 来编译

5.src/GameServer
一个socket服务程序,listen的端口是 7001。
用 makegameserver.bat 来编译。

6.src/FullScreenMode
从 DirectX SDK 中拿出的一个例子,用来做 DirectDraw 动画。
我在代码中增加了 connect,send,recv 调用,用来模拟某些网络游戏。
FullScreenMode.exe 会connect 127.0.0.1 上的 7001 端口,并把接收到的数据显示出来。
启动GameServer.exe和DDrawMessage.exe,
然后用
withdll.exe /d:c:/temp/ddraw/bin/DetourDDraw.dll c:/temp/ddraw/bin/FullScreenMode.exe
启动 fullscreenmode.exe,
过一段时间,切换到 DDrawMessage.exe,可以看到 fullscreenmode.exe的所有send,recv操作了。

正如你所看到的,DetourDDraw.dll 可以拦截任意进程的send,recv操作,而不限于ie和directdraw游戏。

祝:
玩的开心!
2003.12.23

附件是 bin,source在下个贴子的附件内。

***************************************************
2005.07.17 23:30
send,recv,connect 在win 2000内有两个版本:wsock32.dll, ws2_32.dll
我的演示代码内只拦截一个dll,这也是为什么有的包没有拦截下来。
我修改了一下代码,同时拦截wsock32.dll, ws2_32.dll,就再没有碰到拦截不到的应用程序了。
本主题包含附件: sf_20031225112729.rar (225406bytes)
此文件由用户上传,GameRes.com无法确定其安全性,请慎重使用!

 

Re: hook socket send recv的代码(2)
1)2006.4.4 socket hook 的可执行文件

sockethook_20060404_1343_bin.exe

2)2006.4.4 socket hook 的源代码

sockethook_20060404_1343_src.exe 

本主题包含附件: sf_2003122511289.rar (225135bytes)
此文件由用户上传,GameRes.com无法确定其安全性,请慎重使用!

抱歉!评论已关闭.