找回密码
 点一下
查看: 1101|回复: 7

研究魔兽操作传达和同步原理时遇到的困难

[复制链接]
发表于 2009-9-17 05:27:49 | 显示全部楼层 |阅读模式
千辛万苦总算(算是)找到了主机发送操作的地方,但遇到了校验问题。。

顺便一说,魔兽的操作传达原理确实如我以前猜想的那样,所有玩家的操作信息(只含原始操作数据)发送给主机

然后主机编辑并加上玩家信息发给所有玩家;由于主机控制时间轴和默认延迟时间,又保证数据顺序传送,

所以,所有玩家收到信息后会各自在时间轴上同时刻执行,以保持同步。

例如,玩家3发给主机一条信息:

12 00 00 (操作类型,12为目标指令)  
03 00 0D 00 (0xD0003,smart)
FF FF FF FF FF FF FF FF (8 byte未知)
?? ?? ?? ?? ?? ?? ?? ?? (4 byte X, 4 byte Y 目标坐标)
?? ?? ?? ?? ?? ?? ?? ?? (8 byte目标单位对应的hash)

主机收到以后,在数据前面加上
03 1F 00 (玩家3的操作)

然后发给所有玩家,包括自己,当然发的方式不一样,只有给其他玩家才通过网络传输.

主机每一个最小时间单位就会发一个信息给所有玩家,以表示时间流逝一个单位,前面所说主机控制时间轴就是指这点。
由于保证顺序到达,每个玩家收到这个“玩家3的操作”,对应的时刻相同,所以执行也同步。
在每个玩家的客户端上,玩家3的当前选择的单位发布了右键移动。



以下是找出的函数
////////////////////////////////////////////////

是否主机发送信息函数??

6F6DAC7C    条件断点
BYTE PTR[[ESP]+2]!=6 && BYTE PTR[[ESP]+2]!=9

条件过滤掉时间流逝的信息,这样才好分析。

[ESP]指向发送数据
格式:

4字节:头部信息
F7 XX YY 00
YY为数据总长度(连头部)

4字节:CRC校验
不包括头部和校验,从真实数据开始,数据总长度-8字节的数据的CRC32值
注:普通命令中,只在第一次(不包含玩家信息)时符合,
处理后的数据(加玩家信息,例如01 1F 00) 不清楚是什么校验,反正试了很多次也不符合

不定长:真实发送的数据
可以参考http://bbs.islga.org/read.php?tid=13097
但他对于命令的分析有部分是错的。
 楼主| 发表于 2009-9-17 05:48:21 | 显示全部楼层


想法:按照该原理,主机应该可以忽略,篡改或伪造任意一个玩家的操作,办法是修改要发送的数据或者伪造一个数据发送。

- 主动用法:幕后的黑手

解锁玩家对没有控制权单位发布操作的能力,也就是,把鼠标键盘操作转化为操作发给主机的过程,通常不是自己控制的单位是无法发出操作的;强行发操作会不起作用;这是因为主机把操作发回去以后,本地执行部分判断出该玩家没有操作的权力,于是无效。
由于自己也是主机,只要检测到自己控制哪个单位,就把操作篡改成单位的所属玩家发出了该操作(当然还要加上选择单位),于是那个单位就真的动了。。不是主机移动了他,而是主机强迫玩家移动了他。。于是主机OB可以直观的操纵游戏结果的时代就到来了。录像?一定很干净,因为理论上是该玩家移动了该单位,不是我主机玩家。。

- 被动用法:悲惨的命运

见过倒霉到喝凉水也塞牙的么?比如编队操作有1/9概率编错,移动操作有1/13概率移不动,又有1/13概率瞎移动。剑圣要出跳劈了,有1/3概率因为发布别的操作,打断了攻击。 卖宝物有1/8概率扔到地上,1/8概率卖错宝物。 放技能有1/7概率放歪,其中歪到哪里又分4种...

主机不用操作,只要设定谁会很倒霉,怎样倒霉,倒霉的程度是多少就可以了.... 狠一点比如设定某玩家一定买不到某物品卷轴 囧.. (忽略该玩家买该卷轴的操作即可)

想到主机可以做这些我就

一个尚未验证的设想是,非主机玩家可能通过某种消息强迫其他玩家接受自己为主机...  考虑到主机掉线时谁继承主机似乎并不是按玩家顺序 (?)
回复

使用道具 举报

发表于 2009-9-17 06:02:12 | 显示全部楼层
………………………………
万恶的主机……
回复

使用道具 举报

发表于 2009-9-17 07:27:57 | 显示全部楼层
好像很有趣,邪恶的主机。
回复

使用道具 举报

发表于 2009-9-17 09:21:30 | 显示全部楼层
直接用主机虚拟玩家跟主机对战^
……
所有其他玩家全是裁判
回复

使用道具 举报

发表于 2009-9-17 11:56:33 | 显示全部楼层
会不会 那个发出操作的玩家
会在接受 主机返回的操作时 再检验下 当初发送的操作?
回复

使用道具 举报

发表于 2009-9-17 13:59:42 | 显示全部楼层
如果主机可以玩相位大概就可以了。
针对某个玩家,对其建立一个位面。然后对其它的玩家发送主机自己设定的命令。

原理如楼上。
回复

使用道具 举报

发表于 2009-9-17 14:29:07 | 显示全部楼层
煮机是万能的,相当于我们的一X砖正
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-9-29 13:26 , Processed in 0.036825 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表