32.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-网络数据分析原理与依据

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

如果看不懂、不知道现在做的什么,那就跟着做完看效果

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

上一个内容:31.其它消息的实现与使用优化

这是新的一个篇章(工具终于写完了)里的第一个章,如果没有写工具直接去上一个内容里找码云把代码下载下载,然后自行编译,然后根据上一个内容里的内容配置上配置数据,或者直接使用百度网盘下载,百度网盘里的是编译好的,双击就可以用,没有任何的坑,这个工具后面要用,这可能需要一点C++语言的知识,但是不知道C++语言也没事,因为主线是逆向(分析的部分),c++是次要的,涉及c++的部分当看个乐子,也就是写代码的部分当个乐子看,逆向搞好再随便搞一两个星期C++就能全接上了

网络数据分析与逆向有很大的区别,逆向根据线索一步一步的找,它是一个每操作一步都能得到及时反馈的一个事情,而网络通信就不是这样,网络通信是可能方向错了可能找不到方向,接下来写的就是解决这个问题,分析网络的原理和依据到底是什么,也就是搞清楚分析网络数据包这件事情本质上是在做一件怎样的事情。

首先在网络通信中一定是有发送方和接收方,发送方和接收方它俩发送方发送一个数据接收方收到一个数据,想要接收方明白发送方的意思,它俩就要知道数据该怎样解读,也就是说本质上来讲,它们必须在发送和接收之前,提前知道这个数据该怎样去读或者该怎样解析,比如说可以约定好 01代表什么02代表什么,这样收到数据之后01执行对应的操作02执行对应的操作,也就是说发送方和接收方提前就有这么一套规则(编码规则),而做通信分析,做数据包分析,它的本质就是通过分析数据包,来确定它的规则。

编码解码的形式有两种:

1.数据结构约定

2.数据解析约定

首先假设下方是数据结构体:结合 数据结构约定 下面的文字看

struct chat_data{

char Id;

char Pid;

char Name[0x20];

short len;

char buff[0x100];

}

数据结构约定:

数据结构约定就是它数据组织的形式,组织的时候就有一个结构(结构体)这个结构体就是一个数据结构,但是这个数据结构我们不知道,接收方和发送方当时写代码的时候就定义在了一个头文件(头文件是写C++语言用的文件)里面,游戏用的时候就直接用了,比如一个聊天的数据 Id代表了消息序号,Pid代表聊天的频道(比如私聊还是什么)Name是目标的名字,len代表长度,buff代表说话的内容,就这样的一个结构,游戏在组织数据的时候比如id=01,Pid=02,然后内存对齐加两个00,然后目标名字是12345,然后Name有20个字节所以后面有15个0,然后就是len代表的聊天数据的长度,如下图的编码(数据包)

然后结构里有很多数据没有用完,所以它不可能全部发过去,这个时候就会发现,接收到的数据包就是下图的样子

然后就能通过之前写的分析工具来确定,下图红框的内容了,其它的地方的内容确定不了,通过不停的多发送,多更换目标,下图红框的内容就可以解码了,如果仔细的分析还可以发现06是字符串的长度

字符串这个东西要么末尾以0(这个0不是阿拉伯数字的0,是阿斯克码表里的0,如下图)结尾

要么就前面来个数字告诉我们字符串的长度是多少,基本来讲都是这样的情况,有时0会被处理,让它看起来像一个正常的字符,但这个东西签名的你认识后面的不认识,这样就能判断出这个字符串是以什么结尾了。

然后01和02也能通过数据包的比对就能发现它们是什么,数据包比对是一个很重要的方法,最后就通过这些数据写成上方的 chat_data 结构体,然后我们的任务也就完成了,只要有了数据结构,以后面对这样的数据,只要把它对应进去,也就能解析它的内容了,这样的话对于游戏来讲,它每一个里面每一个通信都有一个数据结构,接下来要做的就是把每一个数据结构都给解读出来,解读的越多就对它网络的控制能力也就越强,这就是基于数据结构约定。

数据解析约定或者叫数据解码约定:

首先还是一个结构体

struct chat_data2{

char Id;

char Pid;

char Name[0x20];

short len;

char buff[0x100];

}

就是没有数据结构,然后给发送的数据,它就是一段数据,比如用01代表char类型,02代表short类型,03代表bool类型,04代表int类型,05代表float类型,06代表double类型,07代表long long类型,08代表char[]类型,09代表wchar_t[]类型,这时就不用结构体来搞了,它是比如发送的是 chat_data2 这样的一个结构,然后它的数据包就是01 01 08 02 08 01 02 05 00 31 32 33 34 35 06 00 31 32 33 34 35 36,前面的 01 01 08 02 08 01代表的数据结构(01代表char、08代表char[]、02代表short),01 01 08 02 08 01后面的数据是基于 01 01 08 02 08 01来解读的,这种后面的数据基于前面的数据来解读的方式,就是解析约定,就是提前定义好怎样解,然后把解析的关键点布局图给游戏(接收方)然后根据这个布局图就能知道后面的数据该怎样读。

无非俩将就是 数据结构约定 和 数据解析约定这两种形式,也就的是混着用的,不管是哪一种,只要通过数据包分析工具确定关键内容,然后对于 数据解析约定 这种方式它的前面是不会变的,它也不能变,如果变量后面的数据会跟不上,唯一变的地方就是代表长度的地方,代表长度的地方通过数据包比对也能发现它,数据解析约定这种操作来讲其实不如数据结构约定,对于分析人员来讲,数据结构约定,需要把所有的数据结构都解出来,数据解码约定只要把解码规则搞明白,虽然解码规则没有那么好搞,但实际上也没有那么难搞,还是能够得到的,得到之后整个网络的系统解析就被掌握住了,所以在实际的开发中要用数据结构约定这种方式,后面就开始分析靶场(靶场是易道云信息技术研究院的,可能要花钱)这个程序它是用的什么约定,首先要切入的点就是登陆的环节


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/286117.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

隐语技术架构

隐语架构 产品定位 算法层 计算层 密码原语 互联互通–资源层 总结

Java使用itextpdf往pdf中插入图片

引入maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version> </dependency>java代码 import cn.hutool.extra.qrcode.QrCodeUtil; import com.itextpdf.text.*; i…

redis在docker安装并启动流程

1、启动server docker run -d -p 6379:6379 --name redis01 redis:7.2.4以上命令&#xff0c;每次启动新的Redis容器&#xff0c;数据会丢失。 我们需要挂载数据文件&#xff0c;在宿主机上面&#xff0c;这样就可以持久化数据. 2、挂载数据文件&#xff08;可根据需求选择…

【vue3(七)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ref二、TS接口泛型规范1.创建ts文件&#xff0c;定义接口2.引入规范 三、props的使用四、生命周期&#xff08;生命周期函数&#xff0c;生命周期钩子&…

c++翁恺

1、面向对象 Data&#xff1a;杯子的属性 Opera&#xff1a;杯子提供的服务 老师上课&#xff1a; C&#xff1a;按流程执行 C&#xff1a;定一个教室&#xff0c;有很多学生&#xff0c;投影仪&#xff0c;灯&#xff0c;每个学生反映不一样。 这个场景有什么东西&#xff0c…

C语言例4-7:格式字符f的使用例子

%f&#xff0c;实型&#xff0c;小数部分为6位 代码如下&#xff1a; //格式字符f的使用例子 #include<stdio.h> int main(void) {float f 123.456;double d1, d2;d11111111111111.111111111;d22222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n&qu…

补充--广义表学习

第一章 逻辑结构 &#xff08;1&#xff09;A()&#xff0c;A是一个空表&#xff0c;长度为0&#xff0c;深度为1。 &#xff08;2&#xff09;B(d,e)&#xff0c;B的元素全是原子&#xff0c;d和e&#xff0c;长度为2&#xff0c;深度为1。 &#xff08;3&#xff09;C(b,(c,…

深度解析 – 广告印象(AD impression)

广告印象(AD impression)通过表示广告在给定网络或出版商的应用程序上的浏览次数来衡量广告的影响。广告商可以区分独特印象和非独特印象&#xff0c;以评估特定个人是否看到了他们的广告&#xff0c;并了解广告的播放频率。 所有的数字营销人员都知道这一点。但是&#xff0c…

【单例测试】Mockito实战

目录 一、项目介绍二、业务代码2.1 导入依赖2.2 entity2.3 Dao2.4 业务代码 三、单元测试3.1 生成Test方法3.2 引入测试类3. 3 测试前准备3.4 测试3.4.1 name和phone参数校验3.4.2 测试数据库访问 3.4.3 数据库反例 总结 前面我们提到了《【单元测试】一文读懂java单元测试》 简…

Python小案例:数字炸弹游戏(优化版)

优化内容 上次所写的 数字炸弹案例 中所留了的bug&#xff1a;   a. 两次死循环&#xff0c;其实可以只用一次的&#xff1b;☑   b. 如果其中一个人输入的数据是无效的后游戏将会重新开始&#xff0c;规则上来讲是直接淘汰该玩家 ☑ 本次利用列表坐标 name_Nub 叠加&#…

【Linux】线程预备知识{远程拷贝/重入函数与volatile关键字/认识SIGCHILD信号/普通信号/实时信号}

文章目录 0.远程拷贝1.重入函数与volatile关键字2.认识SIGCHILD信号3.普通信号/实时信号 0.远程拷贝 打包资源&#xff1a;tar czf code.tgz *远程传输&#xff1a;scp code.tgz usr服务器ip:/home/usr/路径解压&#xff1a;tar xzf code.tgz 1.重入函数与volatile关键字 先看…

LLM - 大语言模型的分布式训练 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136924304 大语言模型的分布式训练是一个复杂的过程&#xff0c;涉及到将大规模的计算任务分散到多个计算节点上。这样做的目的是为了处…

10-shell编程-辅助功能

一、字体颜色设置 第一种: \E[1:色号m需要变色的字符串\E[0m 第二种: \033[1:色号m需要变色的字符串\033[0m ########################### \E或者\033 #开启颜色功能 [1: #效果 31m #颜色色号 \E[0m #结束符 1&#xff0c;颜色案例 2&#xff0c;效果案例 二、gui&am…

C语言内存函数之 memcmp函数

memcmp函数的记忆&#xff1a;mem表示内存&#xff0c;单位是字节&#xff0c;表示以单位字节来进行操作&#xff1b;头文件是string.h&#xff0c;cmp是compare的缩写&#xff0c;表示比较。总的意思就是在规定的内存下以字节为单位一个字节一个字节的进行比较。 memcmp函数的…

CI/CD实战-jenkins部署 3

安装 软件下载地址&#xff1a;Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 启动服务 安装推荐插件 不新建用户&#xff0c;使用admin账号登录 修改一下初始密码 新建项目测试 安装git命令 生成密钥 在gitlab中上传公钥 修改ssh 创建中…

【双指针】Leetcode 202.快乐数

题目解析 Leetcode 202.快乐数 看完题目描述相信大家已经知晓题目的含义&#xff0c;我们通过一张图再剖析一下题目含义 快乐数或者非快乐数都是可以成环的&#xff0c;这个是数学上已经证明了的。所以这道题的最后含义就是分辨出环中全部是1或者全部没有1的 双指针 成环问…

【SpringBoot】如何定义接口

定义get接口 使用GetMapping定义一个基本get接口 RestController //表示定义一个json格式返回给前端 public class test {private Map<String,Object> map new HashMap<>();GetMapping(value "/test") //定义接口路径public Object userInfo(Strin…

【CVPR2024】PEM: Prototype-based Efficient MaskFormer for Image Segmentation

研究挑战&#xff1a;基于Transformer的架构在图像分割领域取得了显著的成果&#xff0c;但这些架构通常需要大量的计算资源&#xff0c;特别是在边缘设备上。 为了解决这个问题&#xff0c;作者提出了 PEM&#xff08;prototype-based efficient MaskFormer&#xff09;&…

在Linux/Debian/Ubuntu上通过 Azure Data Studio 管理 SQL Server 2019

Microsoft 提供 Azure Data Studio&#xff0c;这是一种可在 Linux、macOS 和 Windows 上运行的跨平台数据库工具。 它提供与 SSMS 类似的功能&#xff0c;包括查询、脚本编写和可视化数据。 要在 Ubuntu 上安装 Azure Data Studio&#xff0c;可以按照以下步骤操作&#xff1…

YZ系列工具之YZ09: VBA_Excel之读心术

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套一部VBA手册&#xff0c;教程分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的…