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函数说明,获取命令行

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

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

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

相关文章

prometheus基于consul的服务发现

文章目录 一、基础二、安装consul下载地址启动consul访问consul 三、编写服务发现文件nodes.json四、prometheus配置consul发现修改prometheus.yml重启Prometheus 参考 一、基础 二、安装consul 下载地址 https://developer.hashicorp.com/consul/install 启动consul mkdi…

小程序端学习

P2 创建Uni-app 分离窗口 一样的Ctrl S P3 细节知识点 创建新的小程序页面

Web基础②nginx搭建与配置

目录 一.Nginx概述 1.定义 2.Nginx模块作用 (1)main模块 (2)stream服务模块 (3)邮件服务模块 (4)第三方模块 (5)events模块 (6&#xff…

AWS安全组是什么?有什么用?

最近看到小伙伴在问,AWS安全组是什么?有什么用?今天我们大家就来简单聊聊,仅供参考哦! AWS安全组是什么?有什么用? 【回答】:AWS安全组是一种虚拟防火墙,用于控制进出…

刷LeetCode541引起的java数组和字符串的转换问题

起因是今天在刷下面这个力扣题时的一个报错 541. 反转字符串 II - 力扣(LeetCode) 这个题目本身是比较简单的,所以就不讲具体思路了。问题出在最后方法的返回值处,要将字符数组转化为字符串,第一次写的时候也没思考直…

龙腾虎跃---2024广东少儿新春大联欢圆满成功

2024年2月11日大年初二,由广东津虹数字科技有限公司特别赞助,中国电信股份有限公司广州分公司大力支持的《龙腾虎跃——2024广东少儿新春大联欢》在广东少儿频道中午12:30顺利播出并圆满成功,这次春晚在广播电视台1600演播厅录制,…

一不小心,脱臼了?别怕!来get处理肩关节脱位小妙招

人体的构造非常复杂,当各项身体机能都正常,身体才能正常运作。但是,生活中难免会有磕磕碰碰,或是突然遭受外力的撞击,则很有可能会出现关节脱位的情况,其中肩关节脱位就是比较常见的一种。 不少人应该有过这…

LabVIEW风力机智能叶片控制系统

​LabVIEW风力机智能叶片控制系统 介绍了一种风力机智能叶片控制系统的开发。通过利用LabVIEW软件与CDS技术,该系统能够实时监测并调整风力机叶片的角度,优化风能转换效率。此项技术不仅提高了风力发电的稳定性和效率,而且为风力机的智能化管…

C#上位机与三菱PLC的通信09---开发自己的通讯库(A-3E版)

1、A-3E报文回顾 具体细节请看: C#上位机与三菱PLC的通信05--MC协议之QnA-3E报文解析 C#上位机与三菱PLC的通信06--MC协议之QnA-3E报文测试 2、为何要开发自己的通讯库 前面开发了自己的A-1E协议的通讯库,实现了数据的读写,对于封装的通…

NDK的log.h使用__android_log_print报错app:buildCMakeDebug[x86_64]

org.gradle.api.tasks.TaskExecutionException: Execution failed for task :app:buildCMakeDebug[x86_64] 重点是 Execution failed for task :app:buildCMakeDebug[x86_64]. 我的代码&#xff1a; #include <android/log.h> #define LOG_TAG "MyJNI" #d…

Docker Image(镜像)

“脚印会旧而梦还在走” Docker 镜像介绍 (1) 如何理解镜像&#xff1f; &#x1f3af; docker image本质就是一个 read-only(只读)文件&#xff0c;这个文件包含了文件系统、源码、库文件、依赖文件、工具等一些运行 application 所必须的文件。 &#x1f3af; 我们也可以…

微服务篇之监控

一、为什么要监控 1.问题定位 假设客户端查询一些东西的时候&#xff0c;需要经过网关&#xff0c;然后服务A调用服务H&#xff0c;服务H调用K&#xff0c;服务K调用MySQL&#xff0c;当查询不出来的时候&#xff0c;我们不能快速定位到底是哪个服务的问题&#xff0c;这就需要…

“替代云”知多少?Akamai Linode 重新定义公有云服务!

自2006年云计算概念提出以来&#xff0c;云产业已经成为数字化时代所必备的底层基础&#xff0c;但随着多元化的业务需求的增多&#xff0c;多云战略、本地部署所形成混合环境&#xff0c;都使得云复杂性&#xff0c;日渐成为了迫在眉睫的挑战。 451 Research 云价格指数 (CPI…

【Linux】MySQL数据库的使用

【Linux】MySQL数据库的使用 一、访问MySQL数据库二、创建及删除库和表1、创建新的库2、创建新的表3、删除一个数据表4、删除一个数据库 三、管理表中的数据记录1、插入数据记录2、查询数据记录3、修改数据记录4、删除数据记录 四、数据库用户授权1、授予权限2、查看权限3、撤销…

ChatGPT丨成像光谱遥感技术中的AI革命:ChatGPT应用指南

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…

互联网高科技公司领导AI工业化,MatrixGo加速人工智能落地

作者&#xff1a;吴宁川 AI&#xff08;人工智能&#xff09;工业化与AI工程化正在引领人工智能的大趋势。AI工程化主要从企业CIO角度&#xff0c;着眼于在企业生产环境中规模化落地AI应用的工程化举措&#xff1b;而AI工业化则从AI供应商的角度&#xff0c;着眼于以规模化方式…

http和https的区别(简述)

HTTP&#xff08;HyperText Transfer Protocol&#xff09;和HTTPS&#xff08;HTTP Secure&#xff09;都是用于在客户端和服务器之间传输数据的协议&#xff0c;但它们在安全性方面有重要的区别。 1.HTTP: 概述&#xff1a; HTTP是一种用于传输超文本的协议&#xff08;超文…

SAP MIGO发货过账的时候批次库存确定:事务码MBC1进行激活即可

事务码&#xff1a; MBC1 ~ MBC3 使用MBC1按照工厂层级进行激活 接下来MIGO发货过账的时候就可以使用批次库存确定了&#xff0c;点击下图中圈出来的库存确定按钮

Git详解及 github与gitlab使用

目录 1.1 关于版本控制 1.1.1 本地版本控制 1.1.2 集中化的版本控制系统 1.1.3 分布式版本控制系统 1.2 Git简介 1.2.1 Git历史 1.3 安装git 1.3.1 环境说明 1.3.2 Yum安装Git 1.3.3 编译安装 1.4 初次运行 Git 前的配置 1.4.1 配置git 1.4.2 获取帮助 1.5 获取 G…

使用python构建Android,探索跨平台应用开发Kivy框架

使用python构建Android&#xff0c;探索跨平台应用开发Kivy框架 1. 介绍Kivy框架 Kivy是什么&#xff1f; Kivy是一个开源的Python跨平台应用程序开发框架&#xff0c;旨在帮助开发者快速构建创新的、可扩展的移动应用和多点触控应用。Kivy采用MIT许可证&#xff0c;允许开发…