外挂辅助技术原理分析

时间:2022-01-10 08:06:19
我认为网络游戏防外挂应该是从服务器代码上来控制的,要是代码写得好,BUG会很难    
  被玩家发现。我不赞成用外挂,但做网络游戏不能不研究。    
     
  根据我的理解说一下某些外挂的原理:    
     
  先是顺移外挂:    
     
  石器和魔力会出现顺移外挂,是因为它的移动消息机制是客户端直接向服务器报告自己新坐标和人物方向,客户端又不是每走一步汇报一次,而是达到一定时间汇报一次,可能是一秒一次吧。正常情况下,每秒最大可走三步,顺移外挂直接向服务器发送新坐标就可以了。以前石器的服务器根本不检查两次坐标的距离差,所以能大顺移。后来大概修改了代码,新坐标如果与旧坐标距离超过3就视作外挂,立即断线。但3步顺移还是禁止不了,跳个沟或者跳到BOSS后面都可以,因为3步汇报一次坐标是这个引擎的最低要求。服务器又不能去检查两个坐标之间是否有障碍或者有无BOSS(可能设计上根本没顾及到这个要求,又或者是检查它们会导致CPU占用率太高机器受不了)。    
     
  反观UO,传奇,顺移外挂一直没出过,因为他们的移动消息机制不同,他们每次移动都是向服务器汇报自己的移动方向,每移动一次汇报一次。而坐标是服务器回传给客户端的,客户端只有决定自己移动方向的权利,没有决定坐标的权利。如果你想向墙或者其他人物方向移动,服务器会发现并可能把你弹回来(传奇好象不弹,UO是肯定弹)。    
     
  根据这个结论,三步顺移是石器类型引擎的“死穴”,解决方法为:把围墙做厚把沟做宽,超过三步。象熊男这种BOSS不要放在路*,他身后要有厚的门,打败他让门消失一段时间也可以实现偷渡,三步顺移就无效了。    
     
  再说加速:    
     
  1、普通网络加速,这是不可防和封的。一般情况下,网络程序发送消息出去时,如果消息很短,系统会自动把它保留0.1秒,看后面是否跟一个或几个消息,如果有跟的消息,系统把它们合成一个完整包发送出去。这是网络固有延迟,有程序的方法使这种延迟不存在。去掉这种延迟是种合法的行为,系统本身给了用户这个选择权。但通常情况下这是不道德的行为,因为消息包的小而碎,包数量大大增加,加大了交换机和路由器的负荷,对骨干网会造成不利影响,和在街上乱扔垃圾属于同一性质。有些外挂通过设置通信的模式实现这种加速,它对没用外挂的玩家来说很不公平。这类加速对魔力宝贝的效果可能不大,对UO和传奇有明显的效果,PK中你快那么一点别人就打不着你。    
     
  2、利用系统BUG加速:    
  石器的加速属于这种类型。石器客户程序内部固化一个定时器,人物动作快慢由这个定时器决定。石器外挂(【系统屏蔽非法词汇】版SADE源代码我看过)是用反汇编方法获取定时器代码地址,并对内存中代码进行修改来实现时间片控制的,黑客高手所为(对其反汇编水平深感佩服)。这个外挂一度盛行,直到华义买到石器源代码,才针对它进行了修改。后来服务器可能做了如下设置:为每次移动和战斗开始记录时间片,客户端每移动数步比较时间差,如果超出系统允许的速度就断线。战斗结束比较时间差,如果过快也是外挂所为。也就是说从服务器设计上进行防护而不是靠设备,这类外挂不难清理。怕的只是运营方没有源代码,或者有源代码技术又不足,或者开发方技术不足,这都会导致无法及时修正BUG。    
     
  再说改封包:    
     
  改封包的BUG其实也是系统设计导致的。(我不是说有BUG就是水平不行,这么大的程序百密一疏,BUG总是难免)。但有些BUG完全是设计水平低下造成的,比如石器的遇敌与否,居然是由客户端来决定。这件事交给服务器我想并不是难事,也不增加多少开销。黑客既然能反汇编石器代码,修改通信包更不是难事,所以原地、寸步、不遇敌太容易实现了。反过来如果遇敌交给服务器决定,这个功能外挂就根本实现不了。    
     
  再说看血外挂:    
     
  服务器在通信中告诉了客户端各怪物多少血,这个功能大概是游戏调试阶段所需要的,用于检查服务器的BUG。正式版本这个开关当然是关掉了,但问题是开关放在客户端而不是服务器,黑客们轻松地找到了这个开关,把它打开,于是大家可以看对面所有怪物的血了。    
     
  作为和石器差不多的引擎,魔力宝贝在系统设计上到底对这些因有BUG进行了多大程度的修正,我就不得而知了。如果没修正,某些针对引擎设计上固有BUG的外挂是根本防不住的。    
     
  现在魔力没有多少外挂,并不意味着将来没有。外挂的技术水平和游戏风行程度成正比,当前魔力还不是十分热门,如果它获得了大成功(根据网星的收费和服务水平暂时看不到这种希望),恐怕会变成下一个石器。    
     
     
      转载:[来看一下~~~~~~经验封包是海市蜃楼吗?]    
  刷经验的包是不可能的,只有刷角蝇的包是自己可以改的,因为不管刷钱还是刷裁决,是让系统以为你反复在做一件事,我经过大量的搜索数据发现,自己能改的包是在客户端的数据,而在盛大主机上的数据,也就是怪物都是主机控制,你能改的只有自己的数据.因为角蝇是数量多,主机处理就放在你们自己的客户端上处理,而其他怪物即使你看到涨的翻倍,百分比还是没有变,请大家不要上当        
             
     
     
  首先!封包是什么        
  封包就是数据流!        
  每一段独立的数据流就是一个封包!        
  封包分两种!        
  接收包(就是服务器发送给你的)        
  发送包(就是你发送给服务器)        
  这些修改都是利用服务器本身的漏洞而产生的,而不是你主动的做出来的!        
     
  打个比方!前段时间瞬移进赌场40的封包是什么原理呢!其实就是一个漏洞!        
  什么漏洞呢!        
  就是在第13个房间里面!可以让你选择1   2   3   4   5   6        
  漏洞就是,比如我点了6,我就发送了一个我瞬移前进6步的封包        
  于是我们就可以按照每个房间代码,套换上我瞬移前进6步的封包,就可以直接瞬移了        
     
  但是漏洞修补以后,变为,服务器可以有6个选项让我选择分别是   1   2   3   4   5   6        
  我选择了6,服务器说,ok,我让你前进6步        
     
  而什么经验风暴什么的,现在讲讲虚加经验的原理        
  mir.dat是处理接收封包,并做出相应回应的批处理文件        
  在反编译mir.dat后,把我所得经验值显示给我的那段乘以10        
  但是我实际上应该得多少经验值服务器已经定了!你怎么改!都是欺骗你自己这边客户        
  端的!所以只是虚加经验!        
     
  有的人说!哪我把我杀死一个教主的封包拦截下来!然后在我杀鸡的时候过滤发送可以吗?        
  NO,你在攻击的时候,全部是由服务器判定的!        
     
  比如,我现在点了一只鸡,于是我走过去!到了攻击范围,我出手,我杀死了鸡,这个对        
  与服务器是这样判定的        
  以下   s   代表发送       r   代表接收        
  s   我有个动作,鼠标点在某个地方        
  r   这个地方有只鸡,你的动作为攻击这只鸡,并且你走过去        
  s   我到了        
  r   你可以开始砍了        
  s   我继续砍        
  r   鸡死了,你得到5点经验值        
     
  而大家可能想象为        
  s   前面有个教主,我要攻击它   |        
  r   你去打吧                                   |====错误        
  s   教主死了                                   |        
  r   给你N多经验值                         |        
     
  也就是说,你攻击的是什么,全部是由服务器判定后给你发送过来的!你怎么改都没有        
  用的!甚至你现在是走动还是攻击,都是由服务器给你的!而不能由你自己控制!        
     
  现在再说说关于钱的问题        
  s   为发送         r   为接收        
     
  s   我有个动作,鼠标点在某个地方        
  r   那是个空地,你现在的动作是移动过去        
  s   我有个动作,鼠标点在某个地方(现在是点我的脚下)        
  r   这个地方有1000   gold,你可以把它捡起来        
  s   我捡了        
     
  大家不要想象为        
     
  s   地上有1000   gold,我要捡   |        
  r   你捡吧                                   |====错        
  s   我得到1000   gold                 |        
     
  其实你发送修改的封包只是在你发现系统漏洞后的一种延伸使用!它本身是没有实际作用的!