3.游戏中自定义数据类型的解读分析

知识来源于腾讯课堂易道云

结构的解释:

计算机里的所有东西都是用二进制表示的,二进制是数字,我们用的阿拉伯数字0-9这个数字是十进制,计算机用的是二进制只有0或1,然后都是一堆0或1的数字,游戏中怎么把这一堆0或1的数字当做成血量、蓝量、攻击力、名字的?这就用到了结构

结构这个词很抽象,任何东西都可以叫做结构,在游戏中角色有血量、蓝量、攻击力、防御力...

血量、蓝量、攻击力、防御力这四个东西(角色中肯定不会只有这四个东西,比如还有经验、力量加点等,但是为了方便说明只用血量、蓝量、攻击力、防御力这四个东西来举例)组合起来产生的东西就称为结构,为了方便称呼会把血量、蓝量、攻击力、防御力产生出的东西称为人物的数据结构,结构的首地址指的是,比如血量、蓝量、攻击力、防御力,结构的首地址就指的血量,然后蓝量、攻击力、防御力、血量这时结构的首地址就指的是蓝量,然后防御力、血量、蓝量、攻击力这时结构的首地址就是防御力,这样的一个好处假设现在的结构是防御力、血量、蓝量、攻击力这样,防御力是首地址,然后知道首地址之后然后又知道防御力是由几个0或1组成的然后用首地址+防御力的0或1的个数得出的结果就是血量的位置,,结构与结构的首地址就是这样的一个意思。

然后上方提到了防御力有多个0或1,这又涉及到结构的概念了,这样产生的东西就被称为防御力结构,可能很难理解,不过现在不重要,现在只要知道防御力、攻击力...会由多个0或1组成(防御力由多个0或1组成,或者说防御力代表了多个0或1,攻击力也会由多个0或1组成,或者说攻击力代表了多个0或1),结构只是为了方便称呼多个0或1组合产生的东西,给多个0或1组合成的东西起的名字,然后防御力、攻击力...又会产生出叫人物的数据结构的东西。

然后带着上方的想法,再看下方从游戏中复制出来的人物数据

自定义数据类型也就是对象(class或struct ),然后首先定位对象头部的方式(定位尾部的后面写),在一个对象中的函数操作它内部的成员变量时本质上是this->xxx这样去获取成员变量,this->xxx这样的代码在汇编里的样子是[xx+0xXXX]它通过一个地址加偏移的方式来表示this->xxx,然后这时就去逆向找类似[xx+0xXXX]这样的汇编代码。经过 2.搜索游戏中不可见的数据坐标 它里面的分析可以确定游戏中的生命值是一个对象中的成员变量,生命值是很好触发更改的然后让怪物打我们然后跟踪是谁更改了它的值,然后Eheat Engine中有一个功能看下图:可以跟踪谁更改了它

点了找出是什么改写了这个地址之后会弹出下面的弹框,这时再让怪物打我们

在怪物打我们的时候可以看到出现了一个指令并且怪物每打一次它的计数就会加1

选择指令然后点击反汇编,这里的首地址是esi的值,esi值在详细信息里,[sei+10],这个esi位置是什么就是谁的值,它可能还会有[eax+10]、[ecx+10]...这样的写法,[eax+10]首地址就是eax的值,[ecx+10]首地址就是ecx的值

反汇编之后很满足this->xxx它的反汇编,所以它就是this->生命值,然后生命值的地址-10就是对象的指针也就是结构的首地址

知道首地址之后把添加到列表中如下图:

然后右击首地址选择浏览相关内存区域,然后复制出一段内容放到文本文档中,分析再分析结构

拿出来之后密密麻麻的数字很头疼,然后有一个分析的规则继续往下看

首先一个结构是有内存对齐的4字节对齐

class a1{

char c1;

int i1;

}

a1类的大小是8字节它会把char对齐成4字节,内存展示的样子就是 char(01 00 00 00)int( 02 03 04 05)

class a2{

char c1;

short s1;

}

a2类的大小是4字节它会把char对齐成2字节 内存展示样子char(01 00) short(11 11)

然后如果是字符串数组(char*)的类型是 11 11 31 12 00,末尾一定是00

宽字符(wchar_t*)类型是 11 00 22 00 33 00 00 00,末尾是00 00内容是每隔一个是00

一般在分析时默认分析成4字节就可以,然后字符串特殊处理按着字符数组与宽字符的特征去分解

通过上述规则分析之后:从游戏中复制出来的人物数据,下方比如2E 00 00 00它为什么不是0或1?这是因为0或1太乱了,2E是由8个0或1组成的,也就是 00101110 这个8个二进制数字的十六机制数字就是2E,8个0或1称为1字节

2E 00 00 00 // 不知道是什么

02 00 00 00 // 不知道是什么

00 00 00 00 // 不知道是什么

00 00 00 00 // 不知道是什么

78 02 00 00 // 生命值

1A 06 00 00 // 最大生命值

EC 00 00 00 // 体力

1F 01 00 00 // 最大体力

2B 01 00 00 // 内力

4B 01 00 00 // 最大内力

6E 01 00 00 // 攻击力

1D 01 00 00 // 防御

0D 00 00 00 // 不知道是什么

0D 00 00 00 // 等级

01 00 00 00 // 不知道是什么

74 0E 00 00 // 经验

26 0F 00 00 // 升级

01 00 00 00 // 移动速度

00 00 00 00 // 不知道是什么

06 00 00 00 // 不知道是什么

00 00 00 00

00 00 00 00

63 00 00 00

86 00 00 00

00 00 00 00

00 00 00 00

00 00 00 00

63 00 00 00

86 00 00 00

63 00 00 00

86 00 00 00

0A 00 00 00

01 00 00 00

01 00 00 00

00 00 00 00 00 00 00 00

01 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00

01 00 00 00

01 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00

C4 CF B9 AC B7 C9 D4 C6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 人物名 32长度的char数组

7A 2D C4 CF B9 AC B7 C9 D4 C6 2E 69 6E 69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 32长度的char数组

7A 30 31 2D C4 CF B9 AC B7 C9 D4 C6 CA AC CC E5 2E 69 6E 69 00 00 00 00 00 00 00 00 00 00 00 00 // 32长度的char数组

70 6C 61 79 65 72 2D 6D 61 67 69 63 2D B3 A4 BD A3 2E 69 6E 69 00 00 00 00 00 00 00 00 00 00 00 // 32长度的char数组

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

D6 F7 BD C7 CB C0 CD F6 2E 74 78 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 32长度的char数组

02 00 00 00

01 00 00 00

Eheat Engine中也有分析结构的功能

然后再选:

然后点确定

效果图:

以十六进制展示

效果图:

在Eheat Engine的分析结构工具中看不到字符串,但是把它字符串添加到列表时选择字符串勾选代码也可以看到如下图:

字符串:

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

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

相关文章

AD使用问题

设计流程: 1.先创建项目——添加原理图,原理图库,PCB,PCB库 2.画原理图库和封装库 主要有三种方法: (1)手动画库和封装,常常用于嘉立创查询不到的器件 (2&#xff0…

双机多网口配置同网段地址,可以通过目的IP确定接收数据的网卡吗?

环境 两台机器两网卡同网段接入同一个二层交换机。 机器A ens38 00:0c:29:a4:8b:fb 10.0.0.11/24 ens39 00:0c:29:a4:8b:05 10.0.0.12/24 机器B ens38 00:0c:29:4f:a6:c4 10.0.0.21/24 ens39 00:0c:29:4f:a6:ce 10.0.0.22/24 初始ARP表 只有管理口接口的ARP表项&#xff0c…

浙江大学数据结构MOOC-课后习题-第十讲-排序4 统计工龄

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 这道题很明显就是利用桶排序的思路 受到课程内容的影响,我一开始是想着建立一个链表数组,数组内每个元素下方都存放链表,最后再遍历统计输出。 但是&…

【华为OD机试-C卷D卷-200分】反射计数(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体…

算法训练营第四十二天 | LeetCode 42 不同路径、LeetCode 63 不同路径 II

LeetCode 62 不同路径 这题首先确定下dp数组下标和含义。主要有两种方式,一种是按照位置在数组中下标直接确定,另一种是依据递推时边上的位置需要再往上和往左递推时会出界,将位置设为序号而非下标。这一题第二种方式会比较好一些。递推逻辑也…

Android和flutter交互,maven库的形式导入aar包

记录遇到的问题,在网上找了很多资料,都是太泛泛了,使用后,还不能生效,缺少详细的说明,或者关键代码缺失,我遇到的问题用红色的标注了 导入aar包有两种模式 1.比较繁琐的,手动将aar…

The Sandbox DAO:投票决定元宇宙的未来!

赋予用户治理权,打造由社群运营的开放式数码国度 随着The Sandbox DAO的启动,我们邀请全球社群——这个新数字国度的公民们——提出建议并参与治理,共同塑造开放元宇宙的未来。 介绍 在The Sandbox,我们正在建立一个开放的元宇宙…

聚酯输送带的原材料

揭秘聚酯输送带原材料:高效耐用背后的秘密武器 在现代化工业生产中,聚酯输送带以其出色的耐用性和稳定性,成为众多行业不可或缺的传输工具。然而,你是否好奇,究竟是什么原材料赋予了聚酯输送带如此卓越的性能&#xf…

opencv c++编程基础

1、图片的本质 图像在 OpenCV 中的本质 在 OpenCV 中,图像被表示为一个多维数组,其中每个元素对应于图像中的单个像素。图像的维度取决于其通道数和像素数。 **通道数:**图像可以有多个通道,每个通道存储图像的不同信息。例如&…

一维扫描线,有多少对相交线段

D - Intersecting Intervals 目录 正向: 反向: 正向: 从左往右扫描,记录当前边数。 来了新边,它此刻与当前边数相交,加到总数中。边结束,当前边数中减去即可。 const int maxn 5e55; int …

Uniapp横竖屏切换让某一个页面只能横屏或者竖屏

先看官方属性 plus.screen.lockOrientation(default); // 默认横竖屏切换 plus.screen.lockOrientation(portrait-primary);// 竖屏展示 plus.screen.lockOrientation(landscape-primary); // 强制横屏简单需求:允许横竖屏切换 在 page.json增加以下代码 "gl…

李廉洋:5.22黄金原油高位震荡,今日最新行情分析策略。

黄金消息面分析:根据4月份的通胀数据,加拿大央行6月5日降息应该是“理所当然的”。加拿大的整体通货膨胀率在4月份降至2.7%,为自2021年初以来的最低水平,核心CPI中加拿大央行的两项首选数据均降至3%以下。加拿大央行在决定降息之前…

鸿蒙学习第一课--认识目录结构

项目结构介绍 module.json5 src > main > module.json5:Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明,详见module.json5配置文件。 资源分类和访问 关于s…

vue使用asiox 下载后端返回的excel数据流

一、前端代码 <template><div class"hello"><h1>{{ msg }}</h1><button style"color: brown" click"exportExcel">excel导出</button></div> </template><script> import axios from &q…

awk编辑器

目录 工作原理 命令格式 普通格式 BEGIN格式 语句循环格式 awk常见的内建变量&#xff08;可直接用&#xff09; 按行打印行内容 统计行数量 按字段输出文本 通过管道、双引号调用 Shell 命令 awk编辑器是一种流编辑器 工作原理 逐行读取文本,默认以空格或tab键为分…

二叉树,先序遍历、中序遍历、后序遍历和层序遍历实现 C++

二叉树基类声明 template<typename T>class Tree{protected:Tree() default;virtual ~Tree() default;virtual const Tree& root()const 0;virtual Tree& root() 0;virtual const Tree& left()const 0;virtual const Tree& right()const 0;virtua…

java第十八课 —— 重载、可变参数

方法重载 基本介绍 java 中允许同一个类中&#xff0c;多个同名方法的存在&#xff0c;但要求形参列表不一致&#xff01; 比如&#xff1a;System.out.println(); out 是 PrintStream 类型 重载的好处 减轻了起名的麻烦减轻了记名的麻烦 注意事项和使用细节 方法名&…

【Vue】Vue2中的Vuex

目录 Vuex介绍Vuex 中的核心概念 在vue2中使用Vuex安装 Vuex创建一个 Vuex Store在 Vue 实例中使用 Vuex编写 Vuex 的 state、mutations 和 actions在组件中使用 Vuex Vuex的核心State组件中获取 Vuex 的状态mapState 辅助函数对象展开运算符 Getter基本使用示例 通过属性访问通…

从多站点到多活,XEOS 对象数据容灾能力再提升

近日&#xff0c; XSKY SDS V6.4 新版本发布&#xff0c;其中 XEOS V6.4 全新升级并完善了统一命名空间功能&#xff0c;更进一步增强和完善了异地容灾方案&#xff0c;配合强一致代理读&#xff0c;可以实现异地多活&#xff1b;同时大幅降低管理复杂度&#xff0c;有效降低容…

Nginx中的limit_req模块和limit_conn模块详解

引言 在高流量场景下&#xff0c;良好的限流和连接控制策略至关重要&#xff0c;以防止服务器过载&#xff0c;确保服务稳定性和高可用性。Nginx 提供了 limit_req 和 limit_conn 模块&#xff0c;用以实现请求频率和并发连接数的限制。本文将详细介绍这两个模块的生效阶段和生…