这是一款2D的ARPG游戏,这类游戏的技能释放一般都是限制比较多的,比如攻击一定有范围限制,攻击的角度仅仅有8个方向等等,对于玩家来说,这些功能在正常不过了,谁能看到屏幕外的怪物呢?也就更谈不上攻击了。但是对于外挂来说,遍历到更远处的怪物是很容易的,这时,攻击得更远也就有了可能。
我对于这款游戏并不是很熟悉,无意中听说有些玩家用外挂可以将范围技能释放的很远,偷袭抢怪,杀人越货却无影无踪。于是便下来这个游戏分析下试试。
对于这种功能,首先想到是修改封包来尝试。这款游戏调用的发包函数为send,属于线程发包,在封包内容上下写入断可以轻易跳出线程,返回到封包加密解密以及明文封包的位置。对技能封包的分析如下
1C 00 包长
F2 03 包头
B5 99 EA 00 时间戳,具体的时间格式没有分析,不过调用函数可以直接获得
52 47 92 01 角色ID
4E 02 X坐标 2byte整数型
2F 02 Y坐标 2byte整数型
02 00 00 00 朝向值,从0-7分别为8个方向,这个值需要通过目标坐标所在象限进行近似计算
00 00 00 00
38 25 加密值,返回外层可以追到这个加密CALL,调用即可,如果乱写会掉线
00 00
分别通过修改协议XY坐标,修改游戏技能范围代码,强行JMP“无法释放”的代码函数等等方法,均无法实现这个功能。最终得到一个解释,那就是在服务器内对与技能的释放范围是有严格判断的,单纯的对一个封包或者对本地数据进行修改是无法达到远距离施法的效果的!
既然这样,那么为什么还会有这种外挂功能的出现呢,我也很纳闷
经过一段时间的思考和尝试,终于找到了真正的答案!有什么不懂可以关注微信公众号:任鸟飞逆向 进行技术交流。
服务器对于单一的封包有严格验证,那么出现这种情况只能是组合发包达到的效果。比如我们在A点要向屏幕外的B点释放技能,我们在极短的时间内向服务器发送移动封包,即使服务器会因为我们坐标变化极大(瞬移)而立刻修正坐标,但是如果服务器验证不严谨,我们就可以在其修正前,释放技能,然后再被修正回原位置,这一系列的动作是在极短的时间内完成的。在游戏界面内,我们看不出人物的移动。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)而服务器在判断时,也会将我们的这一系列走动的当做是网络卡顿修正,或者它只是判断我们在短时间内是否移动了过远的距离,如果没有就不会做修正或者判断异常。而在它判断我们释放技能时又单独的去判断我们当前移动到的位置是否在技能可释放的范围内,这样就绕过了服务器的验证,实现了远距离施法。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)为了防止对游戏造成的危害,只是写下了分析过程和原理,并没有拷贝过多的代码。在我们分析挖掘游戏漏洞的时候,可以多尝试下各种思路,或许能达到意想不到的效果。