游戏外挂原理和技术分析(关于魔力宝贝)
先是顺移外挂:
石器和魔力会出现顺移外挂,是因为它的移动消息机制是客户端直接向服务器报告自己新坐标和人物方向,客户端又不是每走一步汇报一次,而是达到一定时间汇报一次,可能是一秒一次吧。正常情况下,每秒最大可走三步,顺移外挂直接向服务器发送新坐标就可以了。以前石器的服务器根本不检查两次坐标的距离差,所以能大顺移。后来大概修改了代码,新坐标如果与旧坐标距离超过3就视作外挂,立即断线。但3步顺移还是禁止不了,跳个沟或者跳到BOSS后面都可以,因为3步汇报一次坐标是这个引擎的最低要求。服务器又不能去检查两个坐标之间是否有障碍或者有无BOSS(可能设计上根本没顾及到这个要求,又或者是检查它们会导致CPU占用率太高机器受不了)。
反观UO,传奇,顺移外挂一直没出过,因为他们的移动消息机制不同,他们每次移动都是向服务器汇报自己的移动方向,每移动一次汇报一次。而坐标是服务器回传给客户端的,客户端只有决定自己移动方向的权利,没有决定坐标的权利。如果你想向墙或者其他人物方向移动,服务器会发现并可能把你弹回来(传奇好象不弹,UO是肯定弹)。
根据这个结论,三步顺移是石器类型引擎的“死穴”,解决方法为:把围墙做厚把沟做宽,超过三步。象熊男这种BOSS不要放在路中央,他身后要有厚的门,打败他让门消失一段时间也可以实现偷渡,三步顺移就无效了。
再说加速:
1、普通网络加速,这是不可防和封的。一般情况下,网络程序发送消息出去时,如果消息很短,系统会自动把它保留0.1秒,看后面是否跟一个或几个消息,如果有跟的消息,系统把它们合成一个完整包发送出去。这是网络固有延迟,有程序的方法使这种延迟不存在。去掉这种延迟是种合法的行为,系统本身给了用户这个选择权。但通常情况下这是不道德的行为,因为消息包的小而碎,包数量大大增加,加大了交换机和路由器的负荷,对骨干网会造成不利影响,和在街上乱扔垃圾属于同一性质。有些外挂通过设置通信的模式实现这种加速,它对没用外挂的玩家来说很不公平。这类加速对魔力宝贝的效果可能不大,对UO和传奇有明显的效果,PK中你快那么一点别人就打不着你。
2、利用系统BUG加速:
石器的加速属于这种类型。石器客户程序内部固化一个定时器,人物动作快慢由这个定时器决定。石器外挂(台湾版SADE源代码我看过)是用反汇编方法获取定时器代码地址,并对内存中代码进行修改来实现时间片控制的,黑客高手所为(对其反汇编水平深感佩服)。这个外挂一度盛行,直到华义买到石器源代码,才针对它进行了修改。后来服务器可能做了如下设置:为每次移动和战斗开始记录时间片,客户端每移动数步比较时间差,如果超出系统允许的速度就断线。战斗结束比较时间差,如果过快也是外挂所为。也就是说从服务器设计上进行防护而不是靠设备,这类外挂不难清理。怕的只是运营方没有源代码,或者有源代码技术又不足,或者开发方技术不足,这都会导致无法及时修正BUG。
再说改封包:
改封包的BUG其实也是系统设计导致的。(我不是说有BUG就是水平不行,这么大的程序百密一疏,BUG总是难免)。但有些BUG完全是设计水平低下造成的,比如石器的遇敌与否,居然是由客户端来决定。这件事交给服务器我想并不是难事,也不增加多少开销。黑客既然能反汇编石器代码,修改通信包更不是难事,所以原地、寸步、不遇敌太容易实现了。反过来如果遇敌交给服务器决定,这个功能外挂就根本实现不了。
再说看血外挂:
服务器在通信中告诉了客户端各怪物多少血,这个功能大概是游戏调试阶段所需要的,用于检查服务器的BUG。正式版本这个开关当然是关掉了,但问题是开关放在客户端而不是服务器,黑客们轻松地找到了这个开关,把它打开,于是大家可以看对面所有怪物的血了。
石器和魔力会出现顺移外挂,是因为它的移动消息机制是客户端直接向服务器报告自己新坐标和人物方向,客户端又不是每走一步汇报一次,而是达到一定时间汇报一次,可能是一秒一次吧。正常情况下,每秒最大可走三步,顺移外挂直接向服务器发送新坐标就可以了。以前石器的服务器根本不检查两次坐标的距离差,所以能大顺移。后来大概修改了代码,新坐标如果与旧坐标距离超过3就视作外挂,立即断线。但3步顺移还是禁止不了,跳个沟或者跳到BOSS后面都可以,因为3步汇报一次坐标是这个引擎的最低要求。服务器又不能去检查两个坐标之间是否有障碍或者有无BOSS(可能设计上根本没顾及到这个要求,又或者是检查它们会导致CPU占用率太高机器受不了)。
反观UO,传奇,顺移外挂一直没出过,因为他们的移动消息机制不同,他们每次移动都是向服务器汇报自己的移动方向,每移动一次汇报一次。而坐标是服务器回传给客户端的,客户端只有决定自己移动方向的权利,没有决定坐标的权利。如果你想向墙或者其他人物方向移动,服务器会发现并可能把你弹回来(传奇好象不弹,UO是肯定弹)。
根据这个结论,三步顺移是石器类型引擎的“死穴”,解决方法为:把围墙做厚把沟做宽,超过三步。象熊男这种BOSS不要放在路中央,他身后要有厚的门,打败他让门消失一段时间也可以实现偷渡,三步顺移就无效了。
再说加速:
1、普通网络加速,这是不可防和封的。一般情况下,网络程序发送消息出去时,如果消息很短,系统会自动把它保留0.1秒,看后面是否跟一个或几个消息,如果有跟的消息,系统把它们合成一个完整包发送出去。这是网络固有延迟,有程序的方法使这种延迟不存在。去掉这种延迟是种合法的行为,系统本身给了用户这个选择权。但通常情况下这是不道德的行为,因为消息包的小而碎,包数量大大增加,加大了交换机和路由器的负荷,对骨干网会造成不利影响,和在街上乱扔垃圾属于同一性质。有些外挂通过设置通信的模式实现这种加速,它对没用外挂的玩家来说很不公平。这类加速对魔力宝贝的效果可能不大,对UO和传奇有明显的效果,PK中你快那么一点别人就打不着你。
2、利用系统BUG加速:
石器的加速属于这种类型。石器客户程序内部固化一个定时器,人物动作快慢由这个定时器决定。石器外挂(台湾版SADE源代码我看过)是用反汇编方法获取定时器代码地址,并对内存中代码进行修改来实现时间片控制的,黑客高手所为(对其反汇编水平深感佩服)。这个外挂一度盛行,直到华义买到石器源代码,才针对它进行了修改。后来服务器可能做了如下设置:为每次移动和战斗开始记录时间片,客户端每移动数步比较时间差,如果超出系统允许的速度就断线。战斗结束比较时间差,如果过快也是外挂所为。也就是说从服务器设计上进行防护而不是靠设备,这类外挂不难清理。怕的只是运营方没有源代码,或者有源代码技术又不足,或者开发方技术不足,这都会导致无法及时修正BUG。
再说改封包:
改封包的BUG其实也是系统设计导致的。(我不是说有BUG就是水平不行,这么大的程序百密一疏,BUG总是难免)。但有些BUG完全是设计水平低下造成的,比如石器的遇敌与否,居然是由客户端来决定。这件事交给服务器我想并不是难事,也不增加多少开销。黑客既然能反汇编石器代码,修改通信包更不是难事,所以原地、寸步、不遇敌太容易实现了。反过来如果遇敌交给服务器决定,这个功能外挂就根本实现不了。
再说看血外挂:
服务器在通信中告诉了客户端各怪物多少血,这个功能大概是游戏调试阶段所需要的,用于检查服务器的BUG。正式版本这个开关当然是关掉了,但问题是开关放在客户端而不是服务器,黑客们轻松地找到了这个开关,把它打开,于是大家可以看对面所有怪物的血了。
版权声明:本文为jiandanfy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。