3.网络游戏逆向分析与漏洞攻防-游戏启动流程漏洞-游戏启动流程的分析

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

上一个内容:项目搭建

首先下图红框里是游戏启动的程序

游戏启动之后的名字(fxgame.exe)

一般游戏启动的架构:

第一种:登录器程序启动游戏主程序,然后游戏中完成登录。

说明:

也就是游戏会分为两个结构一个是登录器,另一个是游戏主程序,游戏的主要功能也肯定是在游戏主程序中,但是直接执行游戏主程序执行不了,必须要用登录器启动,原因有很多种情况,第一网络游戏的版本会经常更新,所以登录器启动的时候就可以验证一下版本,版本不行就更新,自己更新自己肯定不行,热更新中间也是有东西做跳板来做的,如果直接更新这个程序,也就是自己更新自己是一个很难操作的东西,第二主程序可能会被别人破坏,比如做硬件补丁,这时再用登录器检验文件发现CRC32和我登录器记录的不一样,这样就拒绝启动,这也是登录器的一个作用,起到一个防破解的作用,还有游戏主程序会有它自己的一套验证,也就是我们双击游戏主程序它其实是启动了,但是由于某种原因又退出了,所以要逆向分析这个原因是什么,然后还要分析登录器是怎样启动的游戏主程序,把这些东西都分析好,我们也就能做一个登录器了

第二种:登录器完成登录,传送token(输入账号密码点击登录会发送网络请求到服务器,如果密码账号都正确服务器会返回一堆乱码,也就是加密的数据,这个加密的数据就是token)至游戏客户端,游戏根据token登录。

说明:

然后这种在分析登录器的时候就不能只分析打开游戏客户端了,还要分析登录器的登录,这种方式启动的流程,首先是在启动器里登录,获取token,然后把token发送给游戏,游戏启动之后拿着这个token去访问服务器,看看这个token存不存,正不正确,如果正确就正常登录,如果不正确就退出

第三种:游戏客户端直接启动。

说明:

这种的启动之后会弹出一个窗口,用来输入账号密码登录,跟登录器一样,然后登录之后就关闭登录页面打开游戏页面,这种的就是一个ui显示隐藏的操作

上面的三种启动方式,都免不了从登录器到游戏主程序它们之间的通信,也就是跨进程的通信

进程之间传递信息的方式:就几种方法,如果遇到了只需要去了解对应的Windows api就可以了

1.命令行,用的最多

2.油槽管道,需要通过相关的api做入口点找我们需要的数据

3.共享内存,它很隐蔽,特别难做,需要从内存中读写去做这个事情

4.消息队列,这种特别少

5.信号量互斥量,只能传递简单的信息,复杂信息不好处理,之前一个篇章里的游戏就是用的信号量与互斥量

分析的时候就安装上面的五个一个一个的去排查,必定是其中的一个

设置任务管理器

如果任务管理器没有命令行这一列,鼠标右击 选择列,现在的系统是Windows 11,其它Windows肯定也都有这样的操作,应该会文字不一样但意思一样

然后勾选上命令行,再点确定就可以了

然后这些表头是可以,左右拖动排序的,这句话的意思懂得都懂

然后回到游戏,通过任务管理器看出它的命令行参数有很多,这就是一个典型通过命令行传递的操作

直接启动游戏客户端会弹出下图的弹框,然后就没反应了

然后接下来尝试把它的命令行全部复制下来,然后尝试直接启动游戏客户端

赋值命令行,首先打开x96dbg,附加到游戏,然后选择下图 改变命令行

然后赋值命令行

然后把游戏客户端发送到桌面快捷方式

然后把从x96dbg赋值的命令行,粘贴到快捷方式的目标里,然后双击

然后通过双击游戏客户端的方式就能正常启动了

然后在复制命令行的时候,游戏已经运行一会了,这时复制的命令行并没有成功,重新用登录器启动之后,再复制命令行,可以直接通过游戏客户端启动了,现在分析都有什么东西发声了变化,第一时间发声了变化,第二游戏它有一个隐藏的通信,过一段时间通信就会关掉,关掉之后就不能打开游戏客户端了

然后现在分析为什么不让打开了,首先它会弹框

这个弹框是在游戏进程中,不是登录器弹出的窗口

这个弹框是用MessageBox实现,MessageBox有一个特定就是不按确定它不返回,点了确定之后游戏会退出,这时就直接在MessageBox函数里下断点调试它,MessageBox已经启动了,函数头下断点无法触发,所以只能在ret位置下断点,然后 MessageBox有两个一个是 MessageBoxA一个是MessageBoxW,下图是在 MessageBoxA下断点

MessageBoxW下断点

然后点确定,就在MessageBoxA函数里断下来了

然后按f8,来当调用MessageBoxA函数的位置,这个位置没什么东西,应该是被封装了,比如封装成只需要传一个字符串,这个字符串就是弹框里的内容

所以按f8,再来当上一层

然后点击分析模块,就可以看到坐标有一个红线,顺着这根红线就可以找到从哪来的

然后顺着红线往上滑,就来到了下图红框位置

然后看到下图红框位置的函数,GetTickCount

GetTickCount函数是用来获取系统启动时间的,单位毫秒,上面说时间长了同样的命令行就打不开了,有两种情况一种是时间,一种是隐藏的通信,这里看到 GetTickCount函数 就可以确定它是通过时间做判断的

然后在下图红框位置,根据启动启动时间得出了一个差值,然后又cmp eax, 0x1D4C0,这个1D4C0是120000,然后eax是 GetTickCount 函数的返回值,也就是一个毫秒数,所以120000也是毫秒数据,然后120000 / 1000 = 120秒,然后这就破案了,为什么时间长了同样的命令行参数不能启动了,这因为命令行里肯定有一个东西代表了,一个毫秒数,这个毫秒数大于2分钟了,所以不能启动了

然后分析一下命令,看看哪一个数据可以代表时间

能代表时间的只有 7265218 了

然后eax = eax - esi,esi就可能是登录器传递的时间戳了,然后eax是第二个时间戳,它俩相减就得到一个时间的差值,差值超过2分钟就退出

然后在下图红框位置的函数得到的esi,一个call后面的eax,这个eax就要看做成函数的返回值

然后再往上滑还有 GetCommandLineA函数

GetCommandLineA函数说明,获取命令行

然后还看到了命令行传递过来的东西,如下图,直接就是明文数据,这就是一个给游戏公司提意见的点,如果把这些数据提前解析,解析出来之后进行加密,加密完,放到另一个变量里,使用时使用加密的数据,随着使用随着解密,这样只要找不到加密函数就破解不了,然后多调几个参数是命令行的无用函数做伪装,这个东西破解起来难度就更大了

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

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

相关文章

企业级 文件传输加密应用,干货分享

企业级 文件传输加密应用 简历一直在投,一直无音讯,今天我又从硬盘里翻出一个 好玩的加密软件,这个是 2017年的时候和荷兰某世界500强公司合作的小项目。 今天分享给大家 。 文章目录 企业级 文件传输加密应用1.目的2.软件介绍3.下载好 安装…

多进程(1)

1> 使用多个进程实现文件拷贝 #include<myhead.h> int main(int argc, const char *argv[]) {pid_t pid;pidfork();int fdr;char buf;if((fdropen(argv[1],O_RDONLY))-1){perror("open error");return -1;}int lenlseek(fdr,0,SEEK_END)-lseek(fdr,0,SEEK_…

基于springboot实现的音乐网站

一、系统架构 前端&#xff1a;html | js | css | bootstrap 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、 代码及数据库 三、功能介绍 01. 登录页 02. 用户注册 03. 首页 04. 喜欢 05. 查询

银河麒麟操作系统自动同步时间更新

1、银河麒麟操作系统基于Centos8的&#xff0c;因centos8取消了ntp服务器&#xff0c;所以导致之前使用ntpdate命令无法同步时间 2、centos默认使用chrony模块来进行同步时间 3、修改chrony配置同步时间服务器 vim /etc/chrony.conf 4、目前使用的是阿里云的时间服务器&…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(9)模型优化

模型训练后&#xff0c;就要进行模型优化了。 一般来讲&#xff0c;很简单&#xff0c;优化就是不换模型换参数&#xff0c;或者直接换模型。 换了之后来对比&#xff0c;最后选个最好的。 比如在本案例中&#xff0c;选择LinearRegression后&#xff0c;MSE从22下降到12&am…

Caddy 自动HTTPS 反向代理、重定向、静态页面 - docker版

简介 Caddy 是一个通用的、易于使用的 Web 服务器&#xff0c;具有以下特点&#xff1a; 快速: Caddy 使用 Go 语言编写&#xff0c;以高性能著称。 安全: Caddy 支持 HTTPS、自动证书生成、HTTP/2 等安全功能。 易用: Caddy 的配置文件简单易懂&#xff0c;易于配置。 功能丰…

K8S的架构(1)

目录 一.k8s K8S有 master 和 worker node 两类节点&#xff1a; ​编辑 二.K8S创建Pod资源的工作流程 三.K8S资源对象 Pod&#xff1a;是K8S能够创建和管理的最小单位。 Pod控制器: 四.K8S资源配置信息 一.k8s kubernetes &#xff1a; Google旗下的容器跨主机编排…

【STC8A8K64D4开发板】第2-12讲:数码管显示

第2-12讲&#xff1a;数码管显示 学习目的了解数码管分类、工作原理及驱动电路的设计。掌握STC8A8K64D4系列单片机驱动8位共阴数码管的动态显示的软件设计。 数码管概述 数码管是一种常用的显示设备&#xff0c;他有着价格便宜、使用简单的特点&#xff0c;在各个领域被广泛的…

全面解读视频生成模型Sora

2024年2月15日&#xff0c;OpenAI在其官网发布了《Video generation models as world simulators》的报告&#xff0c;该报告提出了作为世界模拟器的视频生成模型Sora。 OpenAI对Sora介绍如下&#xff1a; We explore large-scale training of generative models on video dat…

【漏洞复现】H3C 路由器多系列信息泄露漏洞

Nx01 产品简介 H3C路由器是一款高性能的路由器产品&#xff0c;具有稳定的性能和丰富的功能。它采用了先进的路由技术和安全机制&#xff0c;可以满足不同用户的需求&#xff0c;广泛应用于企业、运营商和数据中心等领域。 Nx02 漏洞描述 H3C路由器多系列存在信息泄露漏洞&…

ngnix网站服务详解

一 Nginx的简介 1 Nginx&#xff1a; ①Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器&#xff0c;而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启动&#xff0c;还能在不间断服务的情况下对软件版本进行热…

【大模型 知识图谱】ChatKBQA:KBQA知识图谱问答 + 大模型

ChatKBQA&#xff1a;KBQA知识图谱问答 大模型 提出背景传统方法处理流程ChatKBQA处理流程对比优势 总结ChatKBQA框架概览特征1&#xff1a;逻辑形式生成特征2&#xff1a;无监督实体和关系检索特征3&#xff1a;参数高效的微调特征4&#xff1a;GQoT 可解释的查询执行特征5&a…

初识ONLYOFFICE 8.0:办公软件的革命性升级

引言 随着数字化时代的到来&#xff0c;办公软件已经成为我们日常生活和工作的重要组成部分。在这个充满竞争的市场中&#xff0c;ONLYOFFICE凭借其卓越的性能和功能&#xff0c;脱颖而出&#xff0c;成为许多企业和个人用户的优选。近期&#xff0c;ONLYOFFICE推出了全新的8.…

Jdbc概述和基本使用

一、什么是JDBC呢&#xff1f; 目前市面上存在很多的数据库&#xff0c;比如Oracle、Mysql、SqlServer等…每一种数据库都有着自己的独特的实现原理。 那么我们在使用java链接这些数据库的时候就会出现一个问题&#xff0c;我们需要为每一种数据库开发一套专属于该数据库的链接…

通俗易懂地解释OpenAI Sora视频生成的特点有哪些?与Runway Gen2、Pika有什么区别?缺点是什么?

OpenAI的Sora模型是最近两天最火热的模型。它生成的视频无论是清晰度、连贯性和时间上都有非常好的结果。在Sora之前&#xff0c;业界已经有了很多视频生成工具和平台。但为什么Sora可以引起如此大的关注&#xff1f;Sora生成的视频与此前其它平台生成的视频到底有哪些区别&…

自媒体达人都在用的写作工具:6款ai写作实用工具推荐! #科技#学习方法#AI写作

这些宝藏AI 写作神器&#xff0c;我不允许你还不知道~国内外免费付费都有&#xff0c;还有AI写作小程序分享&#xff0c;大幅度提高写文章、写报告的效率&#xff0c;快来一起试试吧&#xff01; 1.元芳写作 这是一个微信公众号 面向专业写作领域的ai写作工具&#xff0c;写作…

IDEA插件推荐:免费好用!

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…

C#泛型及其应用:获取并显示员工信信息

目录 一、关于泛型 1.泛型定义 2.泛型与非泛型的区别 3.泛型的应用 &#xff08;1&#xff09;泛型类&#xff1a; &#xff08;2&#xff09;泛型方法&#xff1a; &#xff08;3&#xff09;泛型委托&#xff1a; &#xff08;4&#xff09;泛型接口&#xff1a; &a…

智慧公厕:让智慧城市的公共厕所焕发“智慧活力”

智慧城市的建设已经进入了一个新的阶段&#xff0c;不仅仅是智慧交通、智慧环保&#xff0c;如今甚至连公厕都开始迎来智慧化时代。智慧公厕作为智慧城市的神经末梢&#xff0c;正在通过信息化、数字化和智慧化的方式&#xff0c;实现全方位的精细化管理。本文以智慧公厕源头专…

代码随想录刷题笔记-Day21

1. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。…