这款游戏调用的发包函数为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点释 放技能,我们在极短的时间内向服务器发送移动封包,即使服务器会因为我们坐标变化极大(瞬移)而立刻修正坐标, 但是如果服务器验证不严谨,我们就可以在其修正前,释放技能,然后再被修正回原位置,这一系列的动作是在极短的 时间内完成的。在游戏界面内,我们看不出人物的移动。
而服务器在判断时,也会将我们的这一系列走动的当做是网络卡顿修正,或者它只是判断我们在短时间内是否移动了过 远的距离,如果没有就不会做修正或者判断异常。而在它判断我们释放技能时又单独的去判断我们当前移动到的位置是 否在技能可释放的范围内,这样就绕过了服务器的验证,实现了远距离施法。
为了防止对游戏造成的危害,只是写下了分析过程和原理,并没有拷贝过多的代码。在我们分析挖掘游戏漏洞的时候, 可以多尝试下各种思路,或许能达到意想不到的效果。