首页
社区
课程
招聘
[原创]魔兽争霸3的延迟外挂原理和制作
发表于: 2009-10-17 11:55 43319

[原创]魔兽争霸3的延迟外挂原理和制作

2009-10-17 11:55
43319

【文章标题】: 魔兽争霸3的延迟外挂原理和制作
【文章作者】: suwuhao
【作者邮箱】: suwuhao@yahoo.com
【软件名称】: Warcraft III
【下载地址】: 自己搜索下载
【编写语言】: Virtual C++ 2005
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  在魔兽的联机过程中,主机负责转发其他玩家的操作,其他玩家只与主机联系。这样主机就可以干很多事情,所以延迟外挂就只能在主机上使用。
  延迟外挂的初步思路是HOOK主机魔兽的网络通信函数,然后再sleep一定的MS数,来达到人为制造延迟的目的。
  HOOK操作可以用微软研究院的Detours开发包方便地实现。
  经过试验,发现魔兽使用send来发送,WSARecv来接受。
  
  DLL的核心代码如下:
  

  //申明要HOOK的函数
  
  int (WINAPI *pSend)(SOCKET s, const char* buf, int len, int flags) = send;
  int WINAPI MySend(SOCKET s, const char* buf, int len, int flags);

  int (WINAPI *pWSARecv)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) = WSARecv;
  int WINAPI MyWSARecv(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
  
  int WINAPI MySend(SOCKET s, const char* buf, int len, int flags)
  {
  	return pSend(s, buf, len, flags);
  }
  
  int WINAPI MyWSARecv(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
  {
  	Sleep(1000); 
  	//在send中也可以sleep,不过那样就会导致大家魔兽一起卡
  	return pWSARecv( s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine);
  }

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (32)
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
这个是主机卡别人用的,如何别人卡主机呢?
2009-10-17 12:19
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
3
写个函数疯狂给主机发无用包不就把它卡了么
2009-10-17 12:47
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
不从程序角度来说,就从逻辑上来说,主机卡别人,那么别人卡了,就会掉线,那楼主一个人在游戏了?
2009-10-17 13:41
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这和T人挂没多大区别啊 代码都差不多
2009-10-17 16:15
0
雪    币: 247
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
这种挂比T人隐蔽,别人不会掉线,只会感到一点延迟
2009-10-17 18:10
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
讨论技术也就完了。话说这种东西比较xx。
2009-10-17 21:40
0
雪    币: 538
活跃值: (460)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
8
这样队友不也很卡? 能让指定的玩家延迟就NB 了
2009-10-17 21:51
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
HOOK Send是不行的。。。你试下就知道
你研究的太浅了
2009-10-18 02:32
0
雪    币: 6
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
终于引到玉了,

把"玉"拿出来吧
2009-10-18 02:43
0
雪    币: 247
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
什么是“玉”?虚心求教
2009-10-18 09:12
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
12
玉是在世界(尤其是东亚)各地区受到广泛欢迎的一个宝石的分类,在矿物学上玉分为硬玉(也称翡翠,主要成分为 NaAlSi2O6)和软玉(透闪石、阳起石一类,因化学成分的不同而呈现各种颜色,种类较多,但主要成份均为 Ca2(Mg, Fe)5Si8O22(OH)2)。广义上的玉不仅包括硬玉和软玉,也包括蛇纹石、青金石、玛瑙、珊瑚、大理石及其他意义上的宝石。中国东汉时期的许慎在著作《说文解字》中解释:“玉,石之美者”,因而在中国,“玉”的种类极为繁多,因而关于“玉”的分类问题直到现在也没有彻底解决。由于玉是易加工的一类宝石,因其贵重而易于加工在最早使用玉器的中国的历史早期成为贵族常用的祭祀、生活用具。随着前4世纪孔子及他创立的儒家文化在中国以及亚洲地区的影响逐渐加大,玉成为各国传统文化中占有重要地位的一类宝石,它的地位甚至一度超过各种宝石及贵金属,成为儒家文化影响下亚洲社会风气的缩影。时至今日,东亚地区依然将玉视为一种深具文化特色的宝石之一。
2009-10-18 12:31
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
1,Send只是将数据写到buffer然后立刻返回,Send函数并不耗多少时间,所以魔兽对所有玩家发数据都只用一个线程,你HOOK Send然后Sleep,所有玩家都会延迟,你自己也会。
2,Recv函数需要一些时间才会返回(远远比Send要长),所以魔兽需要对每个玩家都有个Recv线程,实际上,魔兽并没有直接使用ws2_32!Recv,而是使用完成端口模型,他把一个SOCKET跟一个完成端口联系起来,你直接HOOK WSARecv达不到效果,可以参考一些对战平台的做法。当你的HOOK例程能接收到所有的TCP包时,说明你的HOOK例程工作正常,可以在里面Sleep对应时间。
3,如何针对单个玩家?我以前写了个T人的外挂,方法是这样的:对某个玩家私聊,输入预定的命令,比如iloveu,然后我HOOK了魔兽的ws2_32!Send,在发送的数据中匹配iloveu,如果发现,则closesocket。
4,用3中的方法可以实现无限刷屏,首先用3的方法取得对应玩家的SOCKET,然后自己构造聊天包,不停的发送,对应玩家就会满屏幕的字,无法正常游戏。聊天包不会引起数据同步同题。
5,各种功能的基础是:魔兽的通信协议和各种包的格式及含义。
6,更多内容,请访问http://hi.baidu.com/堕落的神曲/blog 做个广告 ^0^
2009-10-18 18:57
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
膜拜ls和lz
2009-10-24 19:58
0
雪    币: 84
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
用讯雷下载东西就可以了,哪里用那么麻烦
2009-10-26 01:08
0
雪    币: 420
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
很久没在网上玩过war3了 用楼主的这个回顾一下试试效果怎么样
2009-10-28 13:54
0
雪    币: 34
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
知音啊好难求
2009-10-28 18:24
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
迅雷的话,所有人都会卡,除了你。。。
如果有认识的人跟你一起的话,早被人拖出去砍了。。。
我们的目标是:定向打击
2009-10-28 20:19
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
顶上去................
2009-11-14 10:47
0
雪    币: 280
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
有时间研究研究,很久没上VS平台了,不知道现在外挂使用情况如何,工作了就是忙。
2009-11-22 22:46
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
是不是跟下maopian一样的效果
2009-11-23 14:35
0
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
inline hook WSARecv,魔兽出错,不知道是不是多线程问题
2009-12-2 11:11
0
雪    币: 200
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
好像不行吧,一人卡全都卡啊
2009-12-13 17:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
看上去很牛,不是很懂,努力学习中。。。。。
2009-12-14 15:23
0
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
你的blog打不开 兄弟
2009-12-15 11:27
0
游客
登录 | 注册 方可回帖
返回
//