本文主要是介绍104.网游逆向分析与插件开发-网络通信封包解析-接收数据的初步逆向分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
内容参考于:易道云信息技术研究院VIP课
上一个内容:网络完成端口模型的流程
下图登录了游戏,此时此刻 WSARecv 已经投递
然后打开x96dbg来到WSARecv函数
然后WSARecv的线程id:5BAC
WSASend函数的线程id:主线程 66C0
然后根据上一个内容里的理论,WSARecv是在一个循环里,所以先找到循环,一路CTRL + f9再按f8,最终来到下图位置没反应了,这时因为到了一个循环里,它根本就没结束,返回没地方返
然后往上滑可以看到,完成端口的api,用来查询完全端口,GetQueuedCompletionStatus 函数,现在记录一下地址0x493E49
然后在函数头部下断点也断不下来,因为这个循环已经启动了,不会到头部了
这个时候需要两个账号,一个调试一个用来给调试的账号发消息,制作明文数据,然后首先在WSARecv函数里断下来,一路CTRL + f9再按f8,每按一次 CTRL + f9再按f8,就在上一行代码加上备注,然后网络返回分发函数的位置是在哪,首先在下图打断点
然后在游戏中移动触发断点,然后按f7,然后进去之后找我们的标记,也就是WSARecv这个备注,如果这个备注存在,就说明没到分界点,如果不在了,说明已经找到了分界点,最终在下图位置按f7之后的函数,找不到 标记 了,所以它是分界点,这里记录一下位置0x4813FC
然后发现当eax的值是2的时候,它才会调用WSARecv函数
也就是当eax的值是2的时候,可以来到下图位置,调用WSARecv函数
根据上一个内容中的理论,完成端口处理完数据的时候,会调用WSARecv函数再次注册iocp,所以数据解密就在0x481AE9上方的代码中,所以在0x481AE9上方所有call位置打断点,查看每个函数的入参,查看是否是两个参数,一个大小一个字符串的内存地址,只要入参与大小、内存地址有关就要主要关注,然后iocp的GetQueuedCompletionStatus函数第二个参数是接收的数据长度,这时就要用到另一个账号了,用另一个账号给被调试的账号发消息,查看明文数据在什么函数里得到
最终在下图断点位置(0x48194C)看到了入参是明文数据的
0xC3B3C0函数会被调用多次,上图中可以看出,明文数据前面还有一些我们不认识的数据,它会处理这些东西,然后把数据给它修改一下,原本是31,现在改成32
游戏中也改变了
然后下图是发送消息的账号,它的数据是1234567890,经过修改内存,在接收的账号那边变成了2234567890
所以找到了接收数据的明文数据,这里就是上一个内容中解密之后,WSARecv之前的环节里
这篇关于104.网游逆向分析与插件开发-网络通信封包解析-接收数据的初步逆向分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!