网络通信封包解析

本文探讨了如何通过解析网络游戏通信系统,定位并理解明文数据在聊天功能中的加密过程,揭示了发送数据的关键函数和可能的破解路径。通过跟踪栈信息,作者展示了如何在多线程通信中找到加密前的数据组织点,对于游戏开发者和逆向工程师具有实用价值。
摘要由CSDN通过智能技术生成

项目需求:

为游戏聊天功能制作增强功能,能够使用户在脱离游戏界面的情况下使用窗口化助手进行聊天,能够设置自动回复,记录关键聊天记录,自动说话等

        游戏聊天功能本身比较不容易找到切入点,类似这种不容易找到切入点的功能,我们都可以通过解析网络游戏的通信系统,来找到切入点,另外一个软件或者网络的通信系统是一个程序的核心命脉,全面解读通信系统有助于我们二次开发

首先是网络通信系统的解读和还原

应用程序网络通信的经典流程

  1. 组织数据-> 加密数据 -> 发送数据
  2. 接收数据 -> 解密数据 -> 处理数据

一般游戏里加密都是 凯撒密码的变种 它的特点就是替换 或者加偏移 加密前后大小不变

发送的时候可能有中间人攻击,就是这个数据会被截取,那么有了加密算法加密以后,中间人没有加密算法的话,只要做个变种,就算知道是凯撒密码,稍微调一下,破解难度还是比较大的,攻击成本就变高了

加密完了就是发送

服务器处理完了还要把数据传回来,就要接收数据,服务器一般也会对数据加密,接着就解密,然后处理数据...

所有的基本都是这个流程

应用程序网络通信的两种架构:
一、单线程通信

  1. 组织数据->加密数据->发送数据
  2. 接收数据->解密数据->处理数据

二、多线程通信

  1. 组织数据->加密数据->投递数据进入发送队列
    读取发送队列->发送数据
  2. 接收数据->解密数据->投递数据进入处理队列
    读取处理队列->处理数据

一般找切入点是找发送数据去回溯,如果是多线程通信 那么只能找到 读取发送队列这个点
就要监视它的读取和写入情况就能顺利切换到 投递数据进入发送队列这个位置上
        这两个有连接的一个点

接收数据也是同样的道理

应用程序网络通信的常用函数:
        recv send sendto recvfrom WSARecv WSASend
        recv send 多采用多线程通信架构
        WSASend WSARecv 多采用单线程通信架构,并且配合完成端口使用

recv 和 send 是比较老式的函数,容易造成阻塞,这个函数没发送完以前是啥也干不了的
WSASend WSARecv 这两个支持完成端口,那么这两个是支持异步操作的,一般出现了这个就没必要用多线程了

定位铭文发送数据的关键函数

不管是单线程还是多线程,组织数据对我们不是很重要,主要是要找到组织数据到加密数据的这个过程,因为这个地方的数据是我们看得懂的,到了加密以后的数据就看不懂了,发送数据就对我们没有意义。

组织数据是一个统称,在不同的过程都有不同的组织形式,比如跑步室是有跑步的方式,上线有上线的方式没说话是说话的方式,最后统一都会来到这个组织数据的这个地方,然后再统一有一个加密的地方,一般都是明文的。这个地方加密的可能性不高,因为其实加密了也没啥用,到前面又找到了,而且加密了到服务器还得解密,到服务器也不好处理。

那么怎么找到明文的地方呢?,如果是从前面开始,比如聊天,那么就从读取对话框文本内容开始。如果倒着来,那么就从发送数据开始,找到认识的地方就是个头,比如 使用物品就 物品id..
当然最好的方式就是从聊天入手,因为聊天这个接口是可以自己去指定内容的,但是要注意,有的软件里是有两套系统的聊天是一套通信系统,其他操作是一套通信系统,所以也要区分,但有一说一,破解了其中一套再去破解另外一套也是很方便的.

这次就通过聊天系统来找把。。这里面有几个关键信息,发送一个数据包,肯定要给一个数据包的地址,还有数据包长度,所以一般就是个指针指向数据包,还有就是数据包长度这就是比较敏感的信息.

掏出调试工具 

发送这个 断下

往上追了两层 

 

看看esi 

内存窗口并不能看到什么和1111有关的东西,这里可能是已经加密过了 

再往前

 这里就有点像了

 但0不好理解

看eax还是看不到

再往前 

看一眼edx 出现了1111

发送函数是包含了这个数据的,这个数据在这是没发出去,因此改变这个数据会导致发送 出去的数据是会发生变化的  这个数据看一眼是不太好解读,前面那一片可能是记录的数据包

 长度数据倒是那个03

这个地方解读也不是很明确,看看有没有更好的地方

 结构体还是没啥。。

再往前

 这个数据还是没啥变

再往前

 

 还是没啥变化的样子,但我们发现了这个数据来自edi

我们还要看edi是不是来自上级菜单,再往前,

 

这个时候就不能继续往前了不然就去细节组织数据 那边了,我们只是想找通用过程

发现栈里有关键性数据 

 看看这个函数也不是很大。

 edx+2c 是个虚函数

上面那个12A3AB0就是网络类了

刚刚这一步一步分析,过程还是比较长的,

一个字符串传递 那就变成了参数,它的内存空间在栈上,也有可能是局部变量,也在栈上,一路走来,可能有N个函数  A->B->C->D->send  如果B是明文 也就是要找的这个点,那么参数就出现在A函数或者A以前,那么栈里面就一定存在相应的关键信息,所以可以直接看栈,通过栈里的信息来看

 最精确的就这地方 最近的一次出现直接一步到位

前提是有一个明确的确定的消息去用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#A#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值