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的分析结构工具中看不到字符串,但是把它字符串添加到列表时选择字符串勾选代码也可以看到如下图:

字符串:

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

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

相关文章

路径规划算法--BFS

系列文章目录 文章目录 系列文章目录一、BFS二、BFS伪代码BFS与Dijkstra区别 一、BFS BFS(Breadth First Search)为广度优先搜索,是一种用于遍历或搜索树或图的搜索算法,适用于无权图的遍历。BFS从根节点开始,探索其相…

AI大模型:大数据+大算力+强算法

前言:好久不见,甚是想念,我是辣条,我又回来啦,兄弟们,一别两年,还有多少老哥们在呢? 目录 一年半没更文我干啥去了? AI大模型火了 人工智能 大模型的理解 为什么学习…

【Python】 Python中__slots__的妙用:提升性能与内存管理

基本原理 在Python中,每个类默认都会继承自object类,而object类在Python中是一个动态类,允许动态地添加属性和方法。这种灵活性使得Python在某些情况下非常强大和灵活,但同时也带来了一些性能和内存使用上的开销。 为了解决这个…

简化跨网文件传输摆渡过程,降低IT人员工作量

在当今数字化时代,IT企业面临着日益增长的数据交换需求。随着网络安全威胁的不断演变,网关隔离成为了保护企业内部网络不受外部威胁的重要手段。然而,隔离的同时,企业也需要在不同网络间安全、高效地传输文件,这就催生…

ubuntu strace命令

strace 是 Linux 系统中的一个调试工具,用于跟踪并记录系统调用(system calls)和信号(signals)。在 Ubuntu 中,strace 命令可以帮助开发者和系统管理员了解一个程序在运行时如何与操作系统内核进行交互&…

渗透测试工具Cobalt strike-1.CS介绍与配置

Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS。最近这个工具大火,成为了渗透测试中不可缺少的利器。其拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理&#x…

骨折分类数据集1129张10类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):1129 分类类别数:10 类别名称:["avulsion_fracture",…

使用 RT 矩阵进行 3D 点云变换详解(基于 PCL 和 Eigen 库)

在 3D 点云处理中,RT 矩阵是一个常用的工具,用于对点云进行旋转和平移操作。本文将详细介绍 RT 矩阵的概念,并通过一个示例程序演示如何基于 PCL 和 Eigen 库将一帧点云进行矩阵变换再输出。 本教程的示例代码和点云数据可在 GitHub 下载。 什…

100个 Unity小游戏系列六 -Unity 抽奖游戏专题四 翻卡游戏

一、演示效果 二、知识点讲解 2.1 布局 void CreateItems(){reward_data_list reward_data_list ?? new List<RewardData>();reward_data_list.Clear();for (int i 0; i < ItemCount; i){GameObject item;if (i 1 < itemParent.childCount){item itemParent…

垂类短视频:四川鑫悦里文化传媒有限公司

垂类短视频&#xff1a;内容细分下的新媒体力量 随着移动互联网的迅猛发展和智能手机的普及&#xff0c;短视频已成为当下最受欢迎的媒介形式之一。四川鑫悦里文化传媒有限公司而在短视频领域&#xff0c;一个新兴的概念——“垂类短视频”正逐渐崭露头角&#xff0c;以其独特…

⌈ 传知代码 ⌋ 高速公路车辆速度检测软件

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

WMS仓库管理系统是怎么操作的?WMS操作流程详解

WMS 是仓库管理系统(Warehouse Management System) 的缩写。通过标准化的来料管理、拣配管理、仓库管理&#xff0c;打造实时化、透明化、可视化的仓储管理体系。一款合格的wms系统具有以下优势 提供实时可视性和自动化仓储流程&#xff0c;帮助企业更好地应对复杂的供应链网络…

python fstring教程(f-string教程)(python3.6+格式化字符串方法)

文章目录 Python F-String 教程&#xff1a;深度探究与实用指南引言基础用法什么是F-String?表达式嵌入 格式化选项小数点精度宽度与对齐数字格式化 高级用法复杂表达式调用函数多行F-String嵌套格式化 总结 Python F-String 教程&#xff1a;深度探究与实用指南 引言 在Pyt…

AI赋能:人工智能技术驱动下的品牌海外市场精准分析与营销策略

随着全球化的加速和科技的飞速发展&#xff0c;品牌在海外市场的竞争愈发激烈。为了在竞争激烈的国际市场中脱颖而出&#xff0c;品牌需要更深入地了解海外消费者的行为、趋势和偏好。在这个过程中&#xff0c;人工智能&#xff08;AI&#xff09;技术以其强大的数据处理和分析…

闲话 .NET(6):.NET Core 各个版本的特性

前言 之前我们聊了一下 .NET Core 有哪些优势&#xff0c;.NET Core 发展非常迅速&#xff0c;不过短短几年&#xff0c;.NET Core 已经发布 .NET 8 了&#xff0c;基本上保持了一年一个版本的速度&#xff0c;每个版本都有自己的独有特性&#xff0c;下面我们来简单的盘点一下…

Enable Full Line suggestions 启用全行建议

开启后效果如下&#xff1a; 直接提示可能要输入的参数

医卫兰大药学试题及答案,分享几个实用搜题和学习工具 #媒体#微信

这些软件以其强大的搜索引擎和智能化的算法&#xff0c;为广大大学生提供了便捷、高效的解题方式。下面&#xff0c;让我们一起来了解几款备受大学生欢迎的搜题软件吧&#xff01; 1.彩虹搜题 这个是公众号 题库内容丰富全面&#xff0c;细致分类整理。找题再也不费力&#…

嵌入式学习记录5.23(超时检测、抓包分析)

目录 一.自带超时参数的函数 1.1 select函数 1.2 poll函数的自带超时检测参数 二、不带超时检测参数的函数 三、通过信号完成时间的设置 四、更新下载源 五、wireshark使用 5.1. 安装 5.2. wireshark 抓包 5.2.1 wireshark与对应的OSI七层模型 ​编辑5.2.2 包头分析 …

旺店通与金蝶云星空 就应该这样集成打通

在当今数字化商业环境中&#xff0c;企业需要高效、灵活的系统来支持其业务运营。旺店通和金蝶云星空作为两个领先的企业管理解决方案&#xff0c;它们的集成能够为企业带来无缝的业务流程和数据一致性。本文将详细介绍旺店通与金蝶云星空的全场景集成方案&#xff0c;包括主数…

netcat一键开始瑞士军刀模式(KALI工具系列六)

目录 1、KALI LINUX简介 2、netcat工具简介 3、在KALI中使用netcat 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、命令示例 4.1 测试某IP的端口是否打开 4.2 TCP扫描 4.3 UDP扫描 4.4 端口刺探 4.5 直接扫描 5、即时通信 5.1 单击对话互联 5.2 传…