免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
如果看不懂、不知道现在做的什么,那就跟着做完看效果
内容参考于:易道云信息技术研究院VIP课
上一个内容:34.登录数据包的监视与模拟
首先登陆游戏,到角色选择界面,如下图,可以看到这个数据包很大2421个字节
首先确定它的常量和变量,所以返回登陆,重新登录一次,下图是重新登录之后
然后再次重新登录,通过三次数据包来确定数据包的变化情况
然后发现长度没有变化,开头的内容也没有什么变化,然后它的突破口就是名字
![]()
然后就搜索到了
![]()
这证明了,角色数据确实存在
然后从头开始分析,下图选中的位置,它就像 Unicode 数据,两个字节,它也正是角色名4399
![]()
然后它签名是一个0A 00 00 00,0A的十进制是10,然后下图红框圈起来的内容也正好是10字节长度,所以它签名的A是后面字符的长度,然后07应该是操作类型
![]()
然后现在就可以根据上方分析出来的结构继续拆分,然后后面有一个0x0220长度的字符串,这里直接往下找00 00 的位置,因为00 00是字符串结尾符
![]()
然后看到下图红框位置,就符合字符串结尾,所以在这里继续拆分
![]()
下图红框位置的数据就像是 数据解析约定,02表示int类型,05表示long long类型,06表示char类型,这样
![]()
然后下图红框又是另一个角色名了
![]()
然后下图红框又是它的数据,然后直接往后找 00 00 结尾
![]()
来到下图红框位置是 00 00 结尾,然后根据上方的得到的规律继续拆分
![]()
就找到了另一个角色
![]()
通过第一个角色数据,可以猜测每个角色是以05结尾,如下图红框
![]()
来到最后也可以证明数据是以05结尾
![]()
现在一个大体的结构就有了
然后看前面的部分
下图红框位置
![]()
![]()
每登陆一次它会自增1,可能会用来做加密,然后换一个账号登陆,它也是红框位置的数据自增1,头部其余数据不会变
![]()
然后下图红框的04对应角色的数量,所以删除一个角色看看它变不变
![]()
然后它变了,所以它是角色的数量
![]()
然后整理现在的情况,头部位置是基本不变的,所以它是数据结构约定,后面的数据是数据解析约定,然后选择角色进入游戏,找几个数据解析约定的数据包(只要能对上数据解析约定规律的数据包就是),再看几个数据包确定一下数据解析约定的数据结构
登陆成功之后返回的数据包里06是char类型,这里是char*类型,03是int类型,这里是 longlong类型,05没变还是longlong类型
![]()
然后04是float类型
然后08是longlong类型或者double类型
现在的结构:
00 还没见到
01 还没见到
02 int
03 long long
04 float
05 long long
06 cahr或者char*
07 wchar_t*
08 long long 或者 double类型