免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了
内容参考于:易道云信息技术研究院
上一个内容:75.伪造服务端更新属性消息欺骗客户端
到现在为止,角色的信息,附近玩家,附近怪物,角色信息的修改,都已经做完了,接下来是角色移动相关的,本次是分析角色移动时产生的数据包,分析完成之后写c++代码,通过C++代码让角色移动、让角色高速移动
上一个内容里,尝试修改了,移动速度,然后发现修改移动速度会被服务器发现(移动之后会跳回移动之前的位置),服务器它怎么发现的?整个移动的过程是在本地,如果在服务器计算这种东西会导致服务器性能变差,就算在服务器计算也肯定不能计算的很准确,所以要么就是设置的速度太快要么它还是有什么检测的方法,上一个内容里发现了一个0A数据包里,也就是发送移动数据的数据包里,它里面有移动速度的数据,接下来要做的是想办法突破这个东西,尝试实现完美的加速
首先抓包
下图红框位置,有0x13和0xF这两个数据包,这两个数据包在没有移动的时候就有,所以它是与移动不相关的数据包,为了方便抓取移动的数据(发送的0xA数据包),要把0x13和0xF给屏蔽掉
屏蔽0x13数据包,0x13的十进制是19,如下图红框,把输出相关的全部取消
屏蔽0xF数据包,0xF的十进制是15,如下图红框,把输出相关的全部取消
未加速时的数据包
移动的时候会先发一个下图样子的数据包15,15是操作码,表示移动,1看这个看不懂,8表示有8个数据,下图所示就是8个小数
当停止移动的时候,会有一个下图样子的数据包,也是15,这次15后面是0,不是1了,这可以猜测1表示移动中,0表示未移动,未移动的数据只有4个,坐标和面向,上图移动的数据包可以看出它里面有移动速度,还有移动的目标位置
接下来修改移动速度
在停止移动的时候,会多出一个1F的数据包
它的值都是浮点数,如下图,分别是三个坐标和一个面向,它应该是起到修正的作用,修正我们的坐标,导致回弹
它与最初的坐标一样
然后通过分析多个移动的数据包
每次当前坐标超过预计移动的位置之后会重新发送一个数据包
如下图第一次移动,发送的数据包,现在是当前-445.359314预计移动到-433.755157
第二次发送的移动数据包当前位置是 -435.553711未达到-433.755157,这可能在走一步就超过了-433.755157,所以发送的是未超过 -433.755157 的那个位置
第三次发送的移动数据包,也都是那样的一个规律,当前坐标和预计移动到的位置坐标
然后接下来看一次跳,跳也会涉及到坐标的更新
原地跳发送的数据包
往前跳第一个数据包,往前走的数据包 15 1 8
往前跳第二个数据包,跳的数据包 15 2 9
然后发现了游戏的一个漏洞,我们修改了移动速度,走完之后会通过1F数据包对我们的坐标进行修正,然后跳跃的时候,并没有因为修改了速度而修正我们的坐标,也就是不可以快走但可以快跳
然后再试一试高空坠落的数据包,由于修改了移动速度会重置我们的坐标,必须要跳很麻烦,所以重新登录了一次让移动速度恢复了正常,所以后面图中移动速度不会是10
首先来到高的地方
然后往下跳,摔掉血了
然后分析这时的数据包,然后看到有两个890的数据包
一个是890 2
一个是890 1,这俩可能是高空坠落掉血的,之后尝试屏蔽它俩,看看是否可以实现高空坠落不掉血
然后高空坠落的数据包是 15 2 9,与跳跃的区别就是下图红框位置,少了4.5,所以这个4.5应该是跳跃的高度,或者往上跳的速度
移动完之后都会有的 15 0 4
然后闪避移动的数据包
闪避移动的数据包是211
然后是1019
然后是15 5889 8
然后还是 15 5889 8,一共有9个15 5889 8,出了坐标相关数据不同,其它都一样
然后第9个15 5889 8之后是一个1021
然后是 15 0 4
总结:到这初步分析就结束了,接下来尝试写C++代码
15 2 9是跳跃或高空坠落
15 1 8是移动
15 0 4是移动完
1F 是修正坐标
211 是闪避移动