7.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-通过逆向分析确定游戏明文接收数据过程

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:易道云信息技术研究院VIP课

上一个内容:通过逆向分析确定游戏明文发送数据过程

上一个内容中得出它是使用的send函数发送的数据包,所以接收数据它指定用的是recv函数接收的数据

然后在跳转recv函数分析时发现跳转到了wsock32.dll里的recv,recv是Windows api,应该是跳进 Ws2_32.dll里才对

859b1e9e3dfd407f8a25c663a16ba6c1.png

微软文档写的recv函数:recv 函数 (winsock2.h) - Win32 apps | Microsoft Learn

通过百度wsock32.dll和ws2_32.dll区别,发现:http://t.csdnimg.cn/U7Dgl

如果上方我百度的东西看不懂,自行百度 wsock32.dll和ws2_32.dll区别 这个关键字找

然后x96dbg按ctrl+g跳转时,可以加模块名,如下图

06662c9fd58040cab711145dbf3988e4.png

然后它就断下来了

56a1fe73a9e84583926090c282e31fa0.png

然后按ctrl+f9,再按f8,来到下图位置,然后下图中call的函数时0Rdinal#16它没有写调用的recv,这个原因是没有fxnet2.dll的符号表,这个符号表是游戏的,我们没法下载,自己备注一下这个函数名也一样

06f5a683e1d24346a19904e5865d2597.png

recv函数的返回值是长度,下图中可以看出它返回了800个字节,这说明,不只有一个数据包,一个数据包不可能这么哒

572a459793b543ad9deb3a9f90cb6964.png

然后它的入参有一个0x800,这个应该是接收数据的内存大小

ba7c03221caf4bb9af31ff3450daf0df.png

然后往下滑,看到esp+edi+0x37C,也就是esp+0x37C位置就是接收数据的内存空间,它有800个大小

3f4e21eb3b424f199c6e6f43028f8c70.png

然后函数头部,进行了压栈B78

7969e9ee9a384db78ee615240b40345e.png

然后b78-37c=7FC,7FC+4=800,正好是内存大小

46f93c48d940497d924bd8dd4616bd00.png

然后往下滑可以看到,现在处于循环中,就是遍历的接收的数据包

0084b7c426844ec6bca07f781a6545aa.png

然后当数据循环到0xEE位置,就来到了下图函数里,这说明,这个函数是处理一个数据包的函数

cf770c0cd0f14a65875e5298395e35c5.png

然后按f7进入函数,看到下图红框位置的函数是一个俩参数的函数,然后从栈里可以看出它的一个参数满足数据长度条件

8ca325b5eb7b45a6b1f482f51f46c723.png

现在的数据包我们不知道是什么,所以接下来我们发送一个聊天数据,看看它的数据包结构,然后还由于此处函数干扰很重,就是会频繁断下来,所以要下一个条件断点,发送一个很长的数据,然后用esi>0x50这样的条件,就可以断到我们认识的数据上了

82e37f64e3184616b33397c3cd103f56.png

输入条件:然后发现0x50还是干扰很大,我所在的地图有很多npc与怪物,所以搞这个的时候要找一个无人的地方,最终加到0x70(esi>0x70)还有所好转

53ba5ee4023f4239ba1b2ea2ef3b3783.png

然后断下来了

102fd4c7a28a42b295519e4bdaeda803.png

然后把下图的位置由原本的4改成9

bfd90d67b3a049f0a182b3d7cacfadca.png

然后把我名字改了,所以它就是明文数据包所在位置

50668953a75547e0be1fdaed98e41d1d.png

现在记录关键点0x10617FD7位置调用的0x10618480函数,0x10618480函数是用来处理数据包的,然后现在查看它与发送数据的位置用的是不是一个连接,接收数据的ebx是0x3687B658

a1d53275675648d1abc4114d23f4d383.png

发送数据的位置是0x106180A5,然后它的值也是0x3687B658

176062285d444c0d8c36e2598c2ba16b.png

所以现在已经清楚知道,游戏在建立网络连接的时候会创建一个结构体一个类,它的指针在网络连接的时候就能够截取到,截取到以后发送数据接收数据就能用得到,然后现在之所以分析的过程很简单是因为要少逆向找功能,要利用封包把功能做起来,尽量往脱机的角度走。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值