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 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体…

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

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

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

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

opencv c++编程基础

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

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

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

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

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

awk编辑器

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

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

方法重载 基本介绍 java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致! 比如: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 对象数据容灾能力再提升

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

TikTok电商带货特训营,跟随时代潮流,跨境掘金(8节课)

课程内容: 1-先导课 2-一、店铺运营认知与思路 3-二、店铺风控注意事项 4-三、美区Tiktok前期工作-1店铺入驻模式 5-三、美区Tiktok前期工作-2指纹浏览器介绍 6-三、美区Tiktok前期工作-4绑定电话号码 7-三、美区Tiktok前期工作-5添加仓库地址 8-三、美区Ti…

【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖

【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖 前言 大家好,好久不发文章了。(快一个月了- -)最近有很多学习的新知识想和大家分享,但无奈最近项目蛮忙的,很多文章写了一半搁…

深入Java:JSON解析与操作的艺术

哈喽,大家好,我是木头左! 一、初识JSON:数据格式的优雅舞者 在现代Web开发中,JSON(JavaScript Object Notation)以其轻量级和易于阅读的特点成为了数据交换的首选格式。它基于JavaScript的一个…

FreeRTOS_信号量_学习笔记

信号量的特性 消息队列用于传输多个数据,但是有时候我们只需要传递状态,这个状态值需要用一个数值表示。套用队列笔记中的流水线例子,可以理解为流水线上工件的数量。 信号:起通知作用 量:还可以用来表示资源的数量 当…

打印机手动双面打印技巧

一、WORD和PDF (1)首先选择要打印的页面范围,然后选择仅奇数页打印 (2)将打印完的纸张翻过来,白纸朝上,纸张的头部先放入打印机 (3)选择要打印的页面范围,然…

大模型部署_书生浦语大模型 _作业2

本节课可以让同学们实践 4 个主要内容,分别是: 1、部署 InternLM2-Chat-1.8B 模型进行智能对话 1.1安装依赖库: pip install huggingface-hub0.17.3 pip install transformers4.34 pip install psutil5.9.8 pip install accelerate0.24.1…

Elasticsearch之文本分析

文本分析基本概念 官网:Text analysis | Elasticsearch Guide [7.17] | Elastic 官网称为文本分析,这是对文本进行一直分析处理的方式,基本处理逻辑是为按照预先制定的分词规则,把原本的文档进行分割成多个小颗粒度的词项&#x…