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

news2024/11/15 17:53:15

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

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

内容参考于:易道云信息技术研究院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.coloradmin.cn/o/1534811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈游戏地图中位置实时更新的技术方案

地图如今在游戏中发挥的作用越来越重要,随着电子竞技的兴起,地图逐渐成为了为玩家创造体验的直接舞台。希望本文能对有兴趣了解游戏地图背后实现原理的同学一些帮助。 什么是游戏地图 在游戏中可以通过3D场景虚拟一个完整的世界,当3D场景较为…

基于springboot的大学生租房平台系统

技术:springbootmysqlvue 一、系统背景 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对大学生租房信息管理混乱…

C语言每日一题07

一、题目 二、解析 逻辑与 &&、逻辑或 || 均有“短路”特性: 逻辑与&&“短路”:当逻辑与&&的左操作数为逻辑 “假“ 时,就足以判断该逻辑运算的结果为假了,故右操作数就不再被执行。 逻辑或||“短路”&#xff1a…

使用PLCSIM Advanced仿真博途运动控制

作者顾工首先,添加一个CPU,直接添加一个1518T,反正仿真,不用最好的干嘛呢。是吧。当然,你也可以添加一个你喜欢的PLC,这里不强求。 然后添加工艺对象,我们简单添加一个定位轴。 在工艺对象&am…

GPT-5揭秘:Lex Fridman与Sam Altman播客热议,AGI时代的新变革即将来临!

嘿,朋友们,你们知道吗?Lex Fridman和Sam Altman又聚在一起了,这次是在播客上。 在播客中,他们聊了很多,包括董事会的幕后故事、Elon Musk的诉讼案,甚至还提到了Ilya、Sora这些名字。 但真正让…

跟着官方文档一步一步搭建Elastic Stack(3节点ES集群+Kibana+Filebeat+Metricbeat)

文章目录 源码仓库硬件要求配置文件docker-compose.ymlfilebeat.ymlmetricbeat.yml 配置项解读以及注意事项docker-compose.yml解读filebeat配置解读metricbeat配置解读SSL配置ILM配置 运行运行截图 写在最后 本篇文章是使用Filbeat将产品环境的access_lo同步至Elastic Stack中…

SSTI漏洞详解

目录 前备知识 模块引擎: 模块渲染函数: 继承关系: SSTI漏洞简介 SSTI漏洞成因 SSTI漏洞原理 一些常见模块介绍 php Twig模块引擎 代码演示1 Twig模块引擎代码演示2 python flask模块 代码演示1: python jinja模块 代…

Net安卓app BroadcastReceiver 使用记录一坑

1.背景 由于项目需要,需要对接别的app的广播,就看了看Net 安卓开发的广播接收,看官网的介绍单纯广播和接收都挺简单的,于是上手样板项目弄了两个demo出来,app1用来发,app2用来收。 2.版本 :使…

2024格行VS华为VS飞猫哪个是最值得购买随身WiFi?中兴随身WiFi好用吗?

经常出差旅行,或者户外工作的朋友因为长期在外,手机流量经常不够用,想必都是随身WiFi的忠实用户,但是也都被这款产品割韭菜割的头皮发麻。今天,我们统计了市面上最靠谱的、最热销、口碑最好的几款随身WiFi。排名依据来…

查询表中数据(全列/特定列/表达式,where子句(比较/逻辑运算符),order by子句,limit筛选分页),mysql执行顺序

目录 select 全列查询 特定列查询 用表达式查询 (as) 名字 distinct 去重 where子句 比较运算符 列数据之间的比较 ​编辑 别名不能参与比较 null查询 between and in ( ... , ...) 模糊匹配 逻辑运算符 order by子句 可以使用别名 总结mysql执行顺…

【蓝桥杯选拔赛真题71】python判断字符 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python判断字符 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python判断字符 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…

Google colab中如何从kaggle中接入数据?

写在前面 使用google colab进行数据分析和探索时,可引用的数据源包括但不限于:1.可上传的数据文件用本地加载的的方式打开数据资源;2.从网络链接中直接打开后加载到缓存中的文件资源;3.通过API或者外部的开放接口加载数据&#x…

软考 网络工程师 每日学习打卡 2024/3/21

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论,在此基础上深入理解网络安全协议的工作原理,并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

C语言之strsep用法实例(八十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

除了Confluence,有没有其他工具一样好用?

每个团队都需要一个协同工作工具,以更有效地管理任务、跟踪进度和分享知识。这就是Atlassian的Confluence发挥作用的地方。然而,尽管它相当强大,其昂贵的价格和复杂的界面可能会让某些用户望而却步。所以,还有其他工具可以替代Con…

面试算法-65-二叉树的层平均值

题目 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释:第 0 层的…

python中获取当前项目的目录

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 今天介绍一下,如何在python中获取当前项目所在的目录,而不是运行脚本的目录。 class ProjectPaths:# 初始化时获取当前脚本的路径staticmethoddef get_script_dir():…

mysql数据库的索引管理

目录 一、索引的概述 1、索引的概念 2、索引的作用 3、索引的副作用 4、创建索引的原则依据 5、索引优化 6、索引的分类 7、数据文件与索引文件 二、管理数据库索引 1、查询索引 2、创建索引 2.1 创建普通索引 2.2 创建唯一索引 2.3 创建主键索引 2.4 创建组合…

java 方法重写

1、方法重写概述 重写发生在两个类中,这两个类必须有继承或实现关系。 子类中出现了和父类中一模一样的方法声明。这一模一样指的是什么? (1)方法名、返回值类型、参数(个数、类型、顺序)与父类一样&…

zabbix6.4报错问题汇总:zabbix server无法连接zabbix agent主机

在配置zabbix server连接本机agent时报错&#xff1a; Get value from agent failed: cannot connect to[[xxx.xxx.xxx.xxx]:10050]: [111] Connection refused 检查10050端口是否开放&#xff0c;以下三种方式都可以查看端口是否开放。 1.nc -zv <服务器IP> <端口号…