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完成端口 这里。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开启MySQL远程访问权限,允许远程连接

1、登录mysql数据库 mysql -u root –p 如果端口不是默认的3306,此处端口为3308,使用该指令: mysql –u root –port3308 -p 2、输入密码: 3、使用mysql,查看user表 use mysql; 4、查询user表,root账…

SpringBoot启动报错:Failed to load property source from ‘file:/D:.....

SpringBoot启动报错:Failed to load property source from file:/D:… SpringBoot启动爆如图的错误 2024-02-22 20:57:42.865 ERROR 23024 --- [ restartedMain] o.s.boot.SpringApplication : Application run failedjava.lang.IllegalStateExce…

Centos7环境下安装Docker详细步骤

目录 0.前言 1.卸载旧版 2.配置Docker的yum库 3.安装Docker 4.启动和校验 5.配置镜像加速 5.1.注册阿里云账号 5.2.开通镜像服务 5.3.配置镜像加速 0.前言 环境:Centos7 推荐:买个Centos7阿里或者腾讯云服务,这样就可以不用安装虚…

智慧养老驿站健康监测系统场景需求和技术要求

场景建设需求 1.场景建设核心任务目标 搭建养老驿站的健康检测系统平台,以智慧化手段整合数据、视屏、物联设备,全方位提升对政府、老人、养老机构、服务机构、服务人员等对象的服务支撑能力,赋能居家养老、社区养老、机构养老等多种养老模…

消息中间件之RocketMQ源码分析(十二)

Namesrv启动流程 Broker启动流程 BrokerStartup.java类主要负责为真正的启动过程做准备,解析脚本传过来的参数,初始化Broker配置,创建BrokerController实例等工作。BrokerController.java类是Broker的掌控者,它管理和控制Broker的…

2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽

思维导图 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",…

【Java 面试题】MySQL与Redis 如何保证双写一致性

目录 方案一:延时双删方案二: 删除缓存重试机制方案三:读取biglog异步删除缓存系列文章版本记录方案一:延时双删 延时双删流程 先删除缓存再更新数据库休眠一会(比如1秒),再次删除缓存。这个休眠一会,一般多久呢?都是1秒? 这个休眠时间 = 读业务逻辑数据

计算机网络:传输层知识点汇总

文章目录 一、传输层概述二、UDP协议三、TCP协议特点和TCP报文段格式四、TCP连接管理五、TCP可靠传输六、TCP流量控制七、TCP拥塞控制 一、传输层概述 我们通信的时候,虽然都说是主机之间的通信,但实际是主机之间的进程和进程通信。比如我和你发微信&am…

【AIGC】开源声音克隆GPT-SoVITS

GPT-SoVITS 是由 RVC 创始人 RVC-Boss 与 AI 声音转换技术专家 Rcell 共同开发的一款跨语言 TTS 克隆项目,被誉为“最强大中文声音克隆项目” 相比以往的声音克隆项目,GPT-SoVITS 对硬件配置的要求相对较低,一般只需 6GB 显存以上的 GPU 即可…

mysql 2-22

变量 查看系统变量 修改 用户变量 赋值 定义处理程序 流程控制 IF CASE LOOP语句 WHILE循环 REPEAT leave ITERATE 游标 使用步骤 全局系统变量持久化 触发器 查看触发器 优点 MYSQL8的新特性 移除的旧特性 窗口函数 公用表表达式 JDBC 存储引擎 MYISAM存储引擎 InnoDB存储引擎…

【已解决】c++如何将文件夹打包成zip

c将文件夹或者文件打包成zip是需要用到第三方库,本博文假设读者都已安装了zlib库了,这里就直接使用了。如果读者没有安装好,可以参考我的上一篇博文 vs2015零基础编译zlib从失败到成功 文章目录 1、配置目录2、源码3、代码效果 1、配置目录 …

Druid无法登录监控页面

问题表现:在配置和依赖都正确的情况下,无法通过配置的用户名密码登录Druid的监控页面 检查配置发现 配置的用户名和密码和请求中参数是一致的🤔 Debug发现 ResourceServlet 是Druid的登录实现, 且调试发现usernameParam是null&am…

文件上传漏洞--Upload-labs--Pass131415--图片马

声明:Pass13、14、15 都使用相同手段--图片马进行绕过。 一、什么是图片马 顾名思义,图片马即 图片 木马。将恶意代码插入图片中进行上传,绕过白名单。 图片马制作流程: 1、在文件夹中打开 cmd,输入指令。 /b&…

【MySQL】数据库索引详解 | 聚簇索引 | 最左匹配原则 | 索引的优缺点

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【JS逆向学习】同花顺(q.10jqka)补环境

逆向目标 目标网址&#xff1a;https://q.10jqka.com.cn/ 目标接口&#xff1a; https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/3/ajax/1/ 目标参数&#xff1a;cookie 逆向过程 老规矩&#xff0c;先分析网络请求&#xff0c;发现是 cookie 加…

2024年学习的最高薪酬编程语言

2024年学习的最高薪酬编程语言 10. Scala Scala是一种在Java虚拟机&#xff08;JVM&#xff09;上运行的函数式编程语言。它通常用于大数据处理、机器学习和后端Web开发。 关于Scala编程语言及其常见用途的要点如下&#xff1a; Scala是一种通用编程语言&#xff0c;运行在J…

Sora:OpenAI引领AI视频新时代

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展&#xff0c;AI视频模型已成为科技领域的新热点。而在这个浪潮中&#xff0c;OpenAI推出的首个AI视频模型Sora&#xff0c;以其卓越的性能和前瞻性的技术&#xff0c;引领着AI视频领域的创新发展。让我们将一起探讨…

Uniapp真机调试没有检测到设备,请插入设备或启动模拟器后刷新再试

最近用HbuilderX开发遇到了一个问题&#xff0c;之前插上手机就能调试&#xff0c;但最近再写app的时候&#xff0c;插上手机&#xff0c;也打开了开发者模式&#xff0c;但就是检测不到设备。 后来发现是要打开MIDI模式。vivo手机路径为&#xff1a;系统管理与升级->开发者…

【无刷电机学习】基础概念及原理介绍(持续更新中...)

目录&#xff08;2024.02.22版&#xff09; 1 定义 2 各种电机优势比较 2.1 有刷与无刷比较 2.2 交流与直流比较 2.3 内转子与外转子比较 2.4 低压BLDC的一些优点 3 基本原理 3.1 单相无刷电机 3.2 三相无刷电机 4 驱动方法 4.1 六步换相控制 4.1.1 基本原理 4…

数据结构——串——KMP算法

1.KMP算法是什么&#xff1f; KMP算法是一个模式匹配算法&#xff0c;可以大大避免重复遍历的情况&#xff08;也就是避免掉了传统的朴素模式匹配算法的低效&#xff09; 因此我们KMP算法用于解决的就是字符串匹配问题 因此&#xff0c;假设我们有两个串&#xff0c;一个文本串…