5.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-测试需求与需求拆解

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

上一个内容:模拟游戏登陆器启动游戏并且完成注入

首先正常分析软件程序有没有漏洞,需要通过它的操作侵入,比如买东西,就通过买东西的按钮它背后有源代码就看源代码,没有源代码就逆向分析,然后尝试性的去修改它的参数,然后看看有没有什么不合理的地方有没有漏洞,对于网络游戏来讲前面说的东西就没必要了,因为网络游戏里不管你是吃药也好、走路也好,所有操作最后它一定是通过数据包的形式反映给服务器的,所以就直接观察它的数据包,或者说我们模拟数据包的发送,直接就进行测试,这样它有什么限制不严格的地方就可以看出来了。

游戏客户端与服务端协作形式:有两种

1.

        发送结果型,比如我们吃药,它的做法是,首先在界面里按了一个吃药的操作,按下之后生命值就会增加,这个时候在客户端就会看有没有药、有没有cd、能不能吃,能吃就增加了,本来还有1点生命值吃药之后100点,这时就要写到服务器,把100发送给服务器,这个操作存在漏洞,在发送之前这个100我们是可以更改的,这种操作它往往会有加密的技术,防止被修改,但是不管怎样这种结构就决定了是可以更改的,防止不了,大部分游戏不会采用这种结果,但是也有(某勇士)。

2.

        这一种由UI的操作吃药,还是检测有没有药,有没有cd、能不能吃(这里检测是为了让服务端压力变小),这个时候发送请求吃药(告诉服务器我要吃药了),服务器收到吃药请求就去看服务器上的数据(就是服务器再去判断能不能吃药、有没有cd、能不能吃),服务器验证完成得出可以吃药就把数据写到数据库里(完成吃药),然后就给客户端说吃药完成了,这样的过程可以攻击的点就很少。

        大部分游戏都是第一种和第二种相互结合的,要明白一个道理,安全的本质不是技术的对决,而是经济的对决,比如走路这样的操作,如果服务还是频繁验证的话是比较浪废性能的,走路这种请求会频发触发如果服务器还验证会导致很卡,所以服务器会不得不放弃一些验证的操作,改用第一种结果式,就是把结果给服务器比如走路的坐标,这就造成了漏洞、

还有本质上用的是第二种,但是第二种它是连续性的,比如要三个第二种操作才能完成一件事,其中一个被人为修改掉也会造成漏洞,不管怎样说核心的点都在网络通信的地方。

现在主线任务:

通过逆向分析,找到游戏发送数据,接收数据的过程,这个是很好找的,找到这个过程利用起来是不方便的,因为游戏往往都有加密的过程,所以要找它明文发送数据的位置,因为只有找到这种地方才能很好的利用,找到这种地方之后就可以接收数据发送数据了,这样就可以既可以欺骗客户端又可以欺骗服务端,这样测试漏洞就很方便了,找到漏洞之后要给出修改的建议,就是我们很清楚攻击什么位置,面对这种地方的攻击我们应该怎样防护,现在搞是跟安全有关的事情,然后这样的测试是很有必要的大量的网络游戏或者大量的游戏都有这样的漏洞,比如以前的吃鸡(绝地求生)飞天遁地瞬移秒杀千里万里子弹都是这种情况

游戏数据包的处理流程:

客户端发送数据:

        首先ui操作,比如吃药操作,就会根据吃药组织一个数据包给服务器,一般组织数据包的地方就是明文,为什么是明文,如果不是明文搞的很复杂,在开发的时候也是费劲,所以组织数据包的位置就是明文,比如01代表吃药02代表使用技能,然后组织的数据包就是 01 23,这个23就是代表吃的什么药,然后01代表吃药,然后02 01,02是使用技能01代表的技能,如果说可以用wpe一类的软件可以截取到这个数据直接改,就是不去动游戏而是在网卡这个阶段,就能把这个东西给截取到,所以游戏往往在组织完数据之后会有一个加密的操作,加密完才发送,然后现在可以看出攻击的点就在组织数据的位置。

客户端接收数据:

        接收数据之后,然后解密数据,然后根据包的内容调用对应的函数(分发数据),然后使用数据(函数执行中),然后现在看攻击的点就是分发数据这里,然后解读虽然是明文,但也不是很容易,但是真的可以全部解读出来以后会发现,大部分逆向工作都不需要做了

游戏网络通信架构模型:

单线程:

直接看发送数据的这里,首先我们写代码是一行一行的,然后调用一个函数之后,这个函数执行完返回之后再继续往下,然后假设这个函数是发送数据的,如果数据特别大,没发送完它就会卡住(阻塞),所以这种单线程模式用的比较少,这种模型,通过发送数据往回找可以找到组织数据,从ui操作往后找可以找到组织数据,接收数据时就是通过接收数据往后找可以找到解密数据之后分发数据之前,然后通过使用数据往后找也能找到分发数据前,只要它是这种模型就能找到。

然后使用数据,比如血量增加了,通过血量的变化就能找到分发数据之前


多线程:

它与单线程的不同是加密完数据之后写到一个缓存里,然后线程b去读取缓存然后发送数据,这种的从发送数据的位置就找不到组织数据的位置了,然后从ui操作找后面的东西也是找不到,这样的要找那块缓存空间,通过缓存空间的读写来找

接收数据也是通样的道理


一般就这两种架构

游戏网络通信常见函数:

send、recv 一般用于tcp通信,默认为阻塞型通信。

sento、recvfrom 一般用于UDP通信,它可以直接根据指定ip和端口进行访问,不行创建socket,微信和qq应该用的就是这个

WSASend、WSARecv 天生异步操作,配合完成端口使用(看这里:iocp完成端口,详细简单的完成端口使用)

recv:

recv之后就是处理数据

 WSARecv:

要去找 GetQueuedCompletionStatus 函数,详情看 iocp完成端口 这里。

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

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

相关文章

【PythonGIS】基于Python融合矢量数据(多面合一)

之前发过使用批量合并矢量数据的文章:【Python&GIS】基于Python批量合并矢量数据,正好前段时间有需求把矢量数据进行融合,然后就编了一段融合矢量数据的代码。今天就和大家分享一下如何使用Python对矢量数据实现融合的操作。 1.定义 首先…

基于Embedding召回和DSSM双塔模型

文章目录 基于Embedding召回介绍基于Embedding召回算法分类I2I召回U2I召回 DSSM模型DSSM双塔模型层次 基于Embedding召回介绍 基于embedding的召回是从内容文本信息和用户查询的角度出发,利用预训练的词向量模型或深度学习模型,将文本信息转换成向量进行…

三、创建脚手架和脚手架分析

三、创建脚手架 一、环境准备 1、安装node.js **下载地址:**https://nodejs.org/zh-cn/界面展示 2、检查node.js版本 查看版本的两种方式 node -vnode -version 出现版本号则说明安装成功(最新的以官网为准) 3、为了提高我们的效率&…

深度学习从入门到不想放弃-7

上一章的内容 深度学习从入门到不想放弃-6 (qq.com) 今天讲的也算基础(这个系列后来我一寻思,全是基础 ),但是可能要着重说下,今天讲前向计算和反向传播,在哪儿它都永远是核心,不管面对什么模型 前向计算: 有的叫也叫正向传播,正向计算的,有的直接把前向的方法梯度下…

祖龙娱乐 x Incredibuild

关于祖龙娱乐 祖龙娱乐有限公司(下文简称“祖龙娱乐”)是一家总部位于北京的移动游戏开发公司,成立于 2014 年,拥有成功的大型多人在线角色扮演游戏移动游戏组合,如《六龙争霸》、《梦幻诛仙》和《万王之王 3D》。公司…

微信小程序 ---- 慕尚花坊 项目初始化

目录 项目介绍 01. 项目概述 02. 项目演示 03. 项目技术栈 04. 接口文档 申请开发权限 项目初始化 01. 创建项目与项目初始化 02. 自定义构建 npm 集成Sass 03. 集成项目页面文件 04. VsCode 开发小程序项目 项目介绍 01. 项目概述 [慕尚花坊] 是一款 同城鲜花订购…

Context Capture无法量测连接点,Survey提示Read only只读模式

Context Capture无法量测连接点,Surveys提示Read only只读模式 出现这个问题一般是因为当前block已经完成三维重建,所以无法再编辑稀疏重建(空三)结果。只能把当前block复制一份,在复制的block上量测新的连接点。如下…

PowerDesigner 安装

PowerDesigner 安装汉化破解使用过程 - 沦陷 - 博客园 (cnblogs.com)https://www.cnblogs.com/huangting/p/12654057.html

不要浪费

解法&#xff1a; 记录一下tle的代码 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n bool check(vector<int>& a, int l,int k) {int sum 0;for (int i 0; i < a.size() && l…

vue3中使用 tui-image-editor进行图片处理,并上传

效果图 下载包 pnpm i tui-image-editor pnpm i tui-color-picker调用组件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…

基于springboot+vue的视频网站系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Stable Diffusion 模型分享:FenrisXL(芬里斯XL)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

IO进程线程第6天

1.使用有名管道完成两个进程的相互通信 send.c代码如下&#xff1a; #include <myhead.h>int main(int argc, const char *argv[]) {pid_t pidfork();if(pid>0){//父进程//从管道1中读取数据int fd-1;if((fdopen("./mkfifo1",O_RDONLY))-1){perror("…

【安卓基础3】Activity(一)

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职 &#x1f3c6;本文收录于 安卓学习大全&#xff0c;欢迎关注 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频链接 &…

Sora横空出世!AI将如何撬动未来?

近日&#xff0c;OpenAI 发布首个视频生成“Sora”模型&#xff0c;该模型通过接收文字指令&#xff0c;即可生成60秒的短视频。 而在2022年末&#xff0c;同样是OpenAI发布的AI语言模型ChatGPT&#xff0c;简化了文本撰写、创意构思以及代码校验等任务。用户仅需输入一个指令&…

【IC设计】Chisel API之Arbiter和RRArbiter的使用

文章目录 介绍Chisel的Valid和Ready流控build.sbtRRArbiter代码示例 介绍 仲裁器在NoC路由器中是重要的组成部分&#xff0c;虚通道仲裁和交叉开关仲裁都需要使用仲裁器。 Chisel提供了Arbiter和RRArbiter仲裁器 Arbiter是基础的低位优先仲裁器&#xff0c; RRArbiter初始情况…

前端构建效率优化之路

项目背景 我们的系统&#xff08;一个 ToB 的 Web 单页应用&#xff09;前端单页应用经过多年的迭代&#xff0c;目前已经累积有大几十万行的业务代码&#xff0c;30 路由模块&#xff0c;整体的代码量和复杂度还是比较高的。 项目整体是基于 Vue TypeScirpt&#xff0c;而构…

ProtoBuf认识与Windows下的安装

protobuf简介 Protobuf 是 Protocol Buffers 的简称&#xff0c;它是 Google 公司开发的一种数据描述语言&#xff0c;是一种轻便高效的结 构化数据存储格式&#xff0c;可以用于结构化数据&#xff0c;或者说序列化。它很适合做数据存储 或 RPC 数据交换格 式 。可用于通讯…

WebServer -- 定时器处理非活动连接(上)

目录 &#x1f34d;函数指针 &#x1f33c;基础知识 &#x1f419;整体概述 &#x1f382;基础API sigaction 结构体 sigaction() sigfillset() SIGALRM, SIGTERM 信号 alarm() socketpair() send() &#x1f4d5;信号通知流程 统一事件源 信号处理机制 &#x…

2024全球网络安全展望|构建协同生态,护航数字经济

2024年1月&#xff0c;世界经济论坛发布《2024全球网络安全展望》报告&#xff0c;指出在科技快速发展的背景下&#xff0c;网络安全不均衡问题加剧&#xff0c;需加强公共部门、企业组织和个人的合作。 报告强调&#xff0c;面对地缘政治动荡、技术不确定性和全球经济波动&am…