68.网游逆向分析与插件开发-角色数据的获取-利用蓝量属性分析角色数据基址

news2024/10/2 12:36:24

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

上一个内容:67.网游逆向分析与插件开发-角色数据的获取-分析角色数据基址-CSDN博客

然后分析任何一个东西,逆向分析的本质就是找东西的意思,找东西核心的观念是内存里得有,就是找的东西得知道它什么时候出现,如果连这个都想不清楚一定是找不着的,比如游戏中的一个怪物它有固定的寻址方法或者基址之类的东西吗?多半来讲它是没有的,人物有吗?人物是有的,一般来讲为了方便,基本上会把人物的数据独立出来,就是为了操作起来很便捷,如果没有基址能不能访问这个数据,当然是可以的,有各种各样的方法去访问(比如通过鼠标坐标),对于人物的数据来讲它比较特殊,就是对于我们玩家来说它比较特殊,这么特殊的数据要单独给它做一个指针然后指向它,这是很正常的一种现象,但是这个东西怎样找?有的时候是1级指针有的时候是N级指针,如果是多级指针的话,首先就要想到,游戏中它会怎样去使用这个数据,比如蓝量MP这个数据来去找这个基址,MP这个数据对于我们人物的数据来讲,第一个问题是人物的结构体和怪物的结构体是很有可能是同样的一种结构体,实际上大部分来讲基本都是,或者不是同一个类,那它也会是同一个基类,或者兄弟类,它们肯定有关系存在的,有关系存在那就说明在内存里的结构都差不多,这个时候用MP,MP代表通用属性,就是怪物人物它都拥有的属性,那如果怪物和人物都有的属性,利用这样的一个属性去找它的基址,其实不是特别好,因为会遇到一个问题,就是游戏中在处理这种问题的话,它一定是通用方法,就是怪物也有这种方法人物也有这种方法,那将来的话就才用系统化的方法去处理这个问题,到时它前面一定有非常非常复杂的过程用来游戏自动化获得,这个对象是人物还是怪物的,但是有一个情况是例外的,面对这种通用属性情况下,UI的显示时例外情况,怪物的MP或者某些特定属性,虽然跟人物都有,比如等级怪物也有人物也有,这个时候怪物的属性它基本上来讲不太可能显示,但是人物的属性比如蓝量,它就会在UI界面上显示出来,显示它就会访问,如果我们作为ui的设计的时候,要显示这个数据,是不是要最快最便捷的方式去访问到蓝量这个数据(或者其它人物属性),所以这个地方往往都是一个好的突破口,所以接下来就要找到蓝量,要找访问不要找写入

然后打开 Cheat Engine 搜索蓝量

然后就找到了

然后找是什么访问了这个地址

这个时候就一定能找到ui的访问情况

然后查看eax值的由来,上一个内容可以说是凭借着运气搜索,现在是通过有理有据凭借技术上的逻辑找到的这个东西,在不同的游戏里,这个过程可能会复杂,但是也不会太复杂,基本上会很轻松找到的,因为要考虑到游戏开发的时候,它处理这个问题的时候,它也不会去用很复杂的逻辑去处理这个事情,当然也有极个别的游戏是有的,但是如果说它那个很复杂的话,也可以采用它的逻辑去处理这个问题,而现在第一个点面对这种东西ui是一个非常好的突破口,因为ui和怪物,怪物是不存在ui显示这个问题的,所以这个时候就把怪物的信息干掉了,那这就基本上是针对人物的情况来处理,所以逆向分析的时候要找它独立出现的场景,这是非常重要的点

然后在看第二个函数:可以看到它有一些%d什么的,这就说明是ui数据处理的函数了

然后还有攻击的字符处理,所以第二个函数应该是角色面板绘制的过程

然后接下来用错误的方式写入去找,试一下是怎样的

然后

这时的代码:是get方法,一个成员函数的封装

然后打开动态分析工具,x96dbg,5C94F0,然后接下来追ecx

ctrl+f9,再按f8,来到调用方,ecx来自于esi,这个时候就会出错

然后现在的esi,这里很奇怪,1037D3C是它的基址,这是上一个内容中找到的,现在假设我们不知道,这上来一看esi,在看代码里的1037D3C,它俩能对的上,但是它实际用的时候是用的esi,它这个是个什么操作,它是为了读取蓝量,这只是一个巧合,实际遇到这样的东西不能采纳,因为它不准,所以只能看esi怎么来的

然后点一下高亮模式看一下esi怎么来的

可以看到有两个地方

然后加两个断点看看哪一个是,第一个数值正确

第二个位置不会执行,也就是说,调用下图红框里的函数得到了人物基址,然后它有一个参数edi

后续图中的人物地址变了,因为掉线重连了,98489B,然后edi的值看下图红框位置

然后进入AB4230函数

然后最后哪一个jmp的作用是跳到下图函数,下图函数是一个处理异常的,因为它会有ret,正常函数是用ret的,所以它是处理异常的一般不会进入

经过分析,看出下图红框的两个指令是不等于跳转,再加上调用下图函数式传入的值,它可能把人物指针放到了一个链表结构里,下图中第二个不等于就是判断是不是链表最后一个

所以如果想要人物指针就要得到调用上图函数的参数,参数来自于edi,所以接下来就要看edi从哪来的,然后上方就还剩两个函数,第一个函数调用之前还不存在那个参数,

调用之后出现了参数

514CD0函数它的参数

然后把就把eax值的位置进行更改了,也就是传一个指针进去,它就会把指针内容写成另外一个东西

想求它就要知道ebx是什么,ebx来自于栈,是一个参数,所以ctrl+f9再按f8来到上一层

然后来到了

再ctrl+f9再按f8来到上一层:

然后在这一层会被不断的调用,首先看它的入参与514CD0那里的ebx是否一致

是一致的

然后 它的edi参数,相似操作类型,然后edi又是来自于上一级的参数,这个函数再往上就不好追了

然后这里看测试一下91FAE5它是做什么的,满蓝的时候不会触发

移动的时候会触发,这时的eax的值是B021,所以B021更新的是人物的坐标

自动回蓝的时候是3057

使用物品是B04C

减物品数量时305C,它可能是一种同步数据的操作,所以当到了这个地方就不用再追了,就可以放弃了,它前面一定有一种管理整个数据组织的过程,而且一定很麻烦,再继续往上找就会到了常断的函数了,所以通过写入去追踪的话,最终通过蓝量的事情就白玩了,这是很正常的,一般来讲这个方法它是一种通用方法,就是人物怪物或者跟其它对象共用的方法的话,那么它一般管理起来都会有可能用到通用性的管理方法,会发现这种方式很痛苦,所以分析一个问题的时候要找好一个切入点,这个切入点一定是要找到的场景是它会独一无二出现的场景,就是出现的地方越少我们处理起来就越有力,通过写入找的数据就很明显不是一个有力的

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

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

相关文章

【群晖NAS】记一次FRP报错:login to server failed: connection write timeout

报错如下: rongfuDS224plus:~/fff/frp$ ./frpc -c ./frpc.toml 2024/01/12 23:08:31 [I] [root.go:139] start frpc service for config file [./frpc.toml] 2024/01/12 23:08:41 [W] [service.go:131] login to server failed: i/o deadline reached 2024/01/12 2…

2024 IAA增长变现玩法拆解,NetMarvel提出进阶版攻略!

2023年的国内外市场,很多大甲方都表示消极,字节游戏业务高歌猛进后大撤退更是直接震惊了整个行业,更别说第二第三梯队的服务商了。 动荡和低迷的经济局势还没有消散,这给开发者带来接连不断的挑战。 01 市场反馈是正向的&#x…

Spark SQL基础

SparkSQL基本介绍 什么是Spark SQL Spark SQL是Spark多种组件中其中一个,主要是用于处理大规模的结构化数据 什么是结构化数据: 一份数据, 每一行都有固定的列, 每一列的类型都是一致的 我们将这样的数据称为结构化的数据 例如: mysql的表数据 1 张三 20 2 李四 15 3 王五 1…

每天刷两道题——第十四天

1.1矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法。 输入:matrix [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]] 原地算法(…

vulnhub靶场之DC-5

一.环境搭建 1.靶场描述 DC-5 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. The plan was for DC-5 to kick it up a notch, so this might not be great for beginners, but should be ok for p…

YOLOv5改进系列(25)——添加LSKNet注意力机制(大选择性卷积核的领域首次探索)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系

经典算法-模拟退火算法求解旅行商问题TSP

经典算法-模拟退火算法求解旅行商问题TSP 旅行商问题(Traveling Salesman Problem, TSP)是组合优化中的经典问题。简单地说,一个旅行商需要访问N个城市,并返回到出发城市,问题是找到最短的可能路线,使得每…

基于汽车胎压检测及温度预警

课题简介 汽车胎压监测系统可分为两种:一种是间接式胎压监测系统,是通过轮胎的转速差来判断轮胎是否异常;另一种是直接式胎压监测系统,通过在轮胎里面加装四个胎压监测传感器,在汽车静止或者行驶过程中对轮胎气压和温…

基础篇_开发命令行程序(输入输出,类型、变量、运算符,条件语句,循环语句,方法,package与jar)

文章目录 一. 输入输出1. System.out2. System.in3. Scanner4. 变量名5. 关键字 二. 类型、变量、运算符1. 字符与字符串字符值与字符串值转义字符文本块 2. 类型何为类型数字类型字符类型 3. 变量与运算符变量运算符 4. 练习 - 房贷计算器Math.pow()数字格式化查阅 Javadoc 三…

instanceof、对象类型转化、static关键字

instanceof 与 对象类型转换 instanceof是判断一个对象是否与一个类有关系的关键字 先看引用类型,再看实际类型 *例子:obj instanceof A 先看obj的类型是否与A有关联,无关联则报错,有关联则判断obj的实际类型 因为obj的实际类…

Unity 编辑器篇|(一)MenuItem菜单栏

目录 1.MenuItem 属性2.创建多级菜单3.创建带快捷键的菜单4.创建可被勾选的菜单5.检查菜单是否使用6.菜单排序7.扩展右键菜单7.1 Hierarchy 右键菜单7.2 Project 右键菜单7.3 Inspector 组件右键菜单 8. AddComponentMenu 特性9. ContextMenu 特性 添加组件右键菜单 1.MenuItem…

从vue小白到高手,从一个内容管理网站开始实战开发第八天,登录功能后台功能设计--业务逻辑层基础接口和基础服务实现

上一篇我们介绍了项目后续要使用到的工具类,关于工具类的创建可以查看 从vue小白到高手,从一个内容管理网站开始实战开发第七天,登录功能后台功能设计--通用分页、枚举以及相关工具类-CSDN博客文章浏览阅读2次。本次内容主要介绍了项目后续用到的部分工具类,这些工具类,在…

Go并发快速入门:Goroutine

Go并发:Goroutine 1.并发基础概念:进程、线程、协程 (1) 进程 可以比作食材加工的一系列动作 进程就是程序在操作系统中的一次执行过程,是由系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程…

Java内存模型之原子性

文章目录 1.什么是原子性2.Java中的原子操作有哪些3.long和double的原子性4.原子操作 原子操作 ! 原子操作 1.什么是原子性 一系列的操作,要么全部执行成功,要么全部不执行,不会出现执行一半的情况,是不可分割的。 注意&#x…

Asp .Net Core 系列: 集成 Consul 实现 服务注册与健康检查

文章目录 什么是 Consul?安装和运行 ConsulAsp .Net Core 如何集成 Consul 实现服务注册和健康检查Consul.AspNetCore 中的 AddConsul 和 AddConsulServiceRegistration 方法 究竟做了什么?AddConsul 方法AddConsulServiceRegistration 方法 配置 Consul 检查服务封…

【回顾2023,展望2024】砥砺前行

2023年总结 转眼间,迎来了新的一年2024年,回顾2023,对于我来说是一个充满平凡但又充实又幸运的一年。这一年经历了很多的事情,包括博客创作、技术学习、出书、买房等,基本上每件事情都是一个前所未有的挑战和机遇、使…

科研学习|论文解读——信息世界映射方法

题目:信息世界映射的下一步是什么?在情境中理解信息行为/实践的国际化和多学科方法(What is next for information world mapping? International and multidisciplinary approaches to understanding information behaviors/ practices in …

Jmeter Linux环境压测Lottery接口

1、把Dubbo插件放到Linux中Jmeter的lib/ext目录下 2、参数化 3、设置线程数 4、把测试计划中的Dubbo路径替换成Linux中的路径 /home/apache-jmeter-5.5/lib/ext 5、上传压测脚本到压力机 6、执行压测,观察是否有消息积压 ①Jmeter中执行压测脚本 ②检查mq控制台是…

flask框架基本使用

一、使用pycharm创建项目 1.创建项目 2.调整默认终端 3.打开虚拟终端 打开终端可以看出使用的是p1的虚拟机终端了 4.pyCharm小技巧 在flask种输入一个完整并且存在的函数名称或者类明, 然后 Alt 回车,pycharm可以自动导包,不用在手动在代…

【java八股文】之多线程篇

1、简述线程、进程的基本概念。以及他们之间关系是什么 进程:是程序的一次执行的过程,是系统运行的基本单位,其中包含着程序运行过程中一些内存空间和系统资源。进程在运行过程中都是相互独立,但是线程之间运行可以相互影响。 线程…