CS420 附加篇笔记 P1 - 如何寻找基址、偏移、实体的地址和指针

news2024/11/25 9:29:58

文章目录

    • Intro
    • Health variable
    • Entity
    • How cheat engine works
    • What is an object / a class
    • Static addresses
    • Pointers
    • Relative addresses
    • Summary

Intro

这一篇进入了进阶内容,讲的内容也变得即有广泛又有深入,推荐有一定基础和实践或者编程经验的观看!

通常来说,进入游戏的第一件事往往是找 生命值,你可以从生命值地址追溯到本地玩家对象并获取其地址

Health variable

首先确认我们的生命值,搜索 4bytes 的精确数值 Exact value,随后通过挨打/穿脱装备来改变生命值!
在这里插入图片描述
在这里插入图片描述
如果生命值是精确数值的话,仅改变一次后,即可找到2个数值,通过经验判断一个是生命值最大值,一个是当前生命值,我们再穿一件装备看一下哪个数值在跳就可以知道留哪个了

在这里插入图片描述
如果你在操作的是单机游戏,直接修改或者冻结是更不错的办法!需要注意的是,有可能数值仅用于 GUI 显示,即你获得的地址是 GUI 从玩家对象获取的备份数据地址,而不是 玩家对象的真实数据,一般这种情况筛选重找就好了

在这里插入图片描述

Entity

一般来说我们都要找到一个 Object 对象,而生命值 Health 存储在里面

例如 Player 就是 C 语言里面定义出来的一个类,在这情况下也就是是一个 struct 结构体。所以我们的 Local Player 也就是一个实体对象 Entity Object

所以现在生命值有可能在实体对象内部,一般来说汇编代码知道如何访问 Health 地址,因为汇编指令需要从 Player 处出发开始寻址,找到 [PlayerAddr + 0B0] 这样的地方来获取生命值

How cheat engine works

这一部分推荐多看原视频,比较玄学,有一点在讲内功的感觉

编译器要想办法实现这个过程,对我们来说不必关注里面的细节,只需要找到是什么在 read/write 这个地址即可,也就是CS420课程中学到的 Find out what accesses/writes to this address,一般来说 accesses 包含了 read & write,但 write 只有 write,需要根据情况来判断使用

通过 找出是什么访问了这个地址,有时这个过程不会这么轻松,你要通过 writes 和 accesses 一起找,熟能生巧!而且有的时候你不能直接一眼判断出他就是生命值偏移,很多时候这是不可靠的,需要借助后续的技巧来判断,假设,验证

有一个情况是:有可能所有对象都是 GameObject,包括矿石,家具,栅栏,GameObject 衍生出了 Player,那么你想找 XYZ 坐标,很有可能就无法通过 Player 结构体找到了!这需要你保持一些直觉性,对数据的敏锐性,和重复大量的实验和试错,很多时候这些东西是没办法讲述教学的

这是写入的情况:
在这里插入图片描述

这是读取的情况:
在这里插入图片描述

我们来试着理解这个案例:[eax+40] 获取了生命值,然后把他读取到了一些地方,比如 UI,技能计算线程等等,那么这个 eax 地址的数据或许只是一个 数据引用锚点,开放给 UI 数据通信之类的,这种帧刷新的,往往就不是实际有用的线索
在这里插入图片描述
再看看上面的写入,经过尝试,发现 eax 就是实际的 Player 对象基址,即为 317161D78

在这里插入图片描述

What is an object / a class

object 就是编程时你设置的 class 的实例,class 包含了一个类型的数据,而 object 是实际生成的一个类的实例(这一部分讲的很绕,推荐结合后续理解、找其他资料或者学习一些面向对象编程知识!

PlayerEntity obj = new PlayerEntity();

还是 CS420 里面讲过的,我们可以用 内存视图 Memory view 里面的 Tool 来解析结构体 Struct,这个功能非常好用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输入地址,添加新的结构,这就得到了我们想要的结构分析。他不总是正确的,只是作为一个大致的猜测和指导,你可以通过这个找到很多好的信息,比如:如果你找到了3个连续的 Float,那基本上就是找到 XYZ 坐标了!如果你跳一下发现有东西变了,那就是 Z 坐标(我这里就是上面说的阴间情况,Player 数据和 GameObject 数据是分开的)

在这里插入图片描述
这样一来,我们就知道了 entity object 的基址 Base address,还有 health 的偏移 Offset
在这里插入图片描述

Static addresses

下一步是要找到静态地址,静态地址始终与模块相关,而模块总是加载到同一位置

所以,我们想找到指向实体的指针对象,指针只是一个 包含另一个地址 的地址

Pointers

现在我们进行新的扫描,这里要使用 Hex 十六进制,因为我们要粘贴十六进制数据进来了
在这里插入图片描述
扫描出来的结果都是包含地址或者实体对象的变量,在视频作者的演示中,他这里已经是最终的指向 Player 对象的模块
在这里插入图片描述
而有时有可能扫描出来这样的效果,根据经验,显然这就是我们上面所说的:GameObject 中存储的指向 PlayerState 的指针!
在这里插入图片描述
此时根据新的地址进行结构体分析,就可以找到 XYZ 坐标了,这里展示了 Tool 不能良好处理的地方:
在这里插入图片描述
此时他们被解析成 4 bytes,显然这个值不会是 int 类型,回顾一下之前了解到的 byte 信息:
在这里插入图片描述
float 和 int 都是 4bytes,我们点击 4 Bytes 把数据的解析方式改成 Float 类型

这就得到了正确的 XYZ 坐标信息!

在这里插入图片描述
当你发现一些绿色的地址,打开以后发现内部是这样的
在这里插入图片描述
其中这个 ac_client.exe 就是模块,模块加上偏移,最终指向的代码块是固定不变的,每次重启游戏都不会变化

在这里插入图片描述

可以按下 Ctrl + H 或者通过 Memory View -> Tools -> Dissect PE headers 内存查看器来剖析 PE 标头
在这里插入图片描述
这些都是加载到内存里的不同模块,当你点击 INFO 信息时可以查看里面的具体信息

在这里插入图片描述

Relative addresses

上面的 PE 标头将会在后续其他课程中介绍,回到刚刚我们找到的地址处

在这里插入图片描述
这些找到的 绿色的地址 是固定在模块的某个位置上的,而 黑色的地址 也就是最常见到的动态地址,他们可能是通过 C 语言的 new 或者 malloc 分配得到的,所以他们会随着虚拟内存初始化进行加载

因此查找指针的目标就是向后追踪,直到找到一个静态地址,现在我们只是一个 1-level pointer 即 1级指针

在这里不是简单的把 ac_client.exe + 10F4F4 相加,而是通过相加之后得到的地址进行解引用,最终得到了 00A3A7D0 这个指针路径上的中间量

在这里插入图片描述

通过这样的多级指针,我们最终就寻址到了玩家生命值处!

在这里插入图片描述

Summary

对于非从业者来说,学习指针的过程可能需要耗费六个月之久,这是一个抽象的概念,不断尝试!不断试错!试着找到他们之间的逻辑!多做练习多看论坛!

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

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

相关文章

【MongoDB】Ubuntu22.04 下安装 MongoDB | 用户权限认证 | skynet.db.mongo 模块使用

文章目录 Ubuntu 22.04 安装 MongoDB后台启动 MongoDBshell 连入 MongoDB 服务 MongoDB 用户权限认证创建 root 用户开启认证重启 MongoDB 服务创建其他用户查看用户信息验证用户权限删除用户 skynet.db.mongo 模块使用authensureIndexfind、findOneinsert、safe_insertdelete、…

关于灾备系统中滚动备份是什么?

备份可以为数据提供安全性和某种形式的“撤销”功能,减少甚至消除不稳定性和风险。最常见的备份类型是完全备份和增量备份。但是,如果您需要频繁的、实时的备份,那么滚动备份就是一种更好的方法。 滚动备份: 在可接受的时间间隔…

ArcGIS 10.8软件安装包下载及安装教程

【软件名称】:ArcGIS 10.6 【安装环境】:Windows 【下载链接 】: 链接:https://pan.baidu.com/s/1wKpTeiFdhMBmbRWrJRCsoA 提取码:0987 复制这段内容后打开百度网盘手机App,操作更方便哦 软件简介 ArcGIS D…

手术麻醉管理系统源码的开发及应用

手术麻醉管理系统针对麻醉科、手术室和外科病房开发,用于管理与手术麻醉相关的信息,实现有关数据的自动采集、报告的自动生成以及病历的电子化,是医院信息系统的一个重要组成部分。采集和管理的数据包含患者的手术信息、麻醉信息,…

大数据和数据要素有什么关系?

大数据与数据要素之间存在密切的关系。大数据是指海量、多样化、高速生成的数据,而数据要素是指构成数据的基本元素或属性。数据要素包括但不限于数据的类型、结构、格式、单位、精度等。 大数据的产生和应用离不开数据要素的支持。数据要素确定了数据的基本特征和…

14. 线性代数 - 线性方程组

文章目录 线性方程组矩阵行列式全排列和逆序数N阶行列式(非)齐次线性方程Hi,大家好。我是茶桁。 结束了「微积分」部分的学习之后我们稍作休整,今天正式开始另外一部分:「线性代数」的学习。小伙伴们放松完回来要开始紧张起来了。 我们之前说过,不管是哪一个工程学科,根…

一定要看!超好用的音频剪辑软件推荐

“有没有好用的音频剪辑软件推荐呀?最近需要剪辑一个混合音乐,用来参加学校的歌曲比赛,但是现在没有办法进行剪辑,音频现在很多杂音,根本用不了,求推荐一个好用的音频剪辑软件,谢谢啦” 随着科…

WordPress 网站 “Error Establishing a Database Connection” 建立数据库连接时出错的解决方法

WordPress 网站 “Error Establishing a Database Connection” 建立数据库连接时出错的解决方法 有事半年没管网站,今天突然访问网站居然出现了这个: 以下是解决方案: 检查数据库是否运行,重启数据库 1.检查数据库是否正常运…

在校学生如何白嫖黑群辉虚拟机和内网穿透,实现海量资源的公网访问?(小白专用)

文章目录 前言本教程解决的问题是:按照本教程方法操作后,达到的效果是前排提醒: 1 搭建群辉虚拟机1.1 下载黑群辉文件vmvare虚拟机安装包1.2 安装VMware虚拟机:1.3 解压黑 群辉虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群辉的解…

Purple Pi OH(Debian/Ubuntu)使用python控制gpio

本文分享的是Purple Pi OH开源主板搭载Debian/Ubuntu系统如何使用python控制gpio。 Purple Pi OH作为一款兼容树莓派的开源主板,采用瑞芯微RK3566 (Cortex-A55) 四核64位超强CPU,主频最高达1.8 GHz,算力高达1Tops,支持INT8/INT16,支持Tensor…

好玩的js特效

记录一些好玩的js特效 1、鱼跳跃特效 引入jquery:https://code.jquery.com/jquery-3.7.1.min.js 源码如下&#xff1a; <!--引入jquery--> <script src"https://code.jquery.com/jquery-3.7.1.min.js"></script> <!--引入跳跃源码--> <s…

【PHP】使用TCPDF导出PDF文件

目录 一、安装TCPDF类库 二、安装字体 三、使用TCPDF导出PDF文件 目的&#xff1a;PHP通过TCPDF类库导出文件为PDF。 开发语言及类库&#xff1a;ThinkPHP、TCPDF 效果图如下 一、安装TCPDF类库 在项目根目录使用composer安装TCPDF&#xff0c;安装完成后会在vendor目录下…

深化超低时延技术合作,中科驭数助力金仕达开创极速行情新高度

近日&#xff0c;金仕达副总经理吴江带领FPGA低延时、终端和分布式团队主要负责人赴中科驭数武汉研发中心考察调研。双方深入探讨低延时技术&#xff0c;并在FPGA国产化成果、高性能开发平台等方向展开合作研讨。以此次交流为起点&#xff0c;双方将充分发挥各自优势&#xff0…

2023-简单点-编译是什么?gcc是什么?

编译目的 把一种 程序 变成 另一种更接近机器指令 编译的术语 “接近专家的最快方法第一步&#xff0c;直接了解100行业黑话” 那么来了解一下&#xff0c;编译过程中的黑话&#xff1a; 词法分析语法分析中间代码目标代码代码优化出错管理表格管理 gcc是个什么? 一种编译…

【liunx】进程的状态

进程的状态 1.进程的状态2.僵尸进程3.孤儿进程 1.进程的状态 我们或多或少了解到进程的状态分为&#xff1a; 运行&#xff0c;新建&#xff0c;就绪&#xff0c;挂起&#xff0c;阻塞&#xff0c;等待&#xff0c;停止&#xff0c;挂机&#xff0c;死亡… 首先解释一点&…

windows系统edge浏览器退出账户后还能免密登录的解决方式

edge浏览器明明退出登录了&#xff0c;还能不用输密码一键点击就能登录&#xff1b; 这是因为微软的煞笔产品经理用脚后跟想出来的方案。 解决方案&#xff1a; 去设置里的账号管理&#xff0c;注销自己的微软账号登录&#xff1b;如果你发现自己并没有登录&#xff0c;那么看…

Spring框架中bean的生命周期(理解)

1.解释Spring框架中bean的生命周期 在传统的Java应用中&#xff0c;bean的生命周期很简单。使用Java关键字new进行bean实例化&#xff0c;然后该bean就可以使用了。一旦该bean不再被使用&#xff0c;则由Java自动进行垃圾回收。 相比之下&#xff0c;Spring容器中的bean的生命…

2023什么好用的工具可以传大文件?

在当今的信息时代&#xff0c;数据已经成为了企业和个人的重要资产。无论是视频、音乐、图片、文档等各种格式的文件&#xff0c;都需要在不同的场景和需求下进行传输或分享。然而&#xff0c;随着数据量的不断增长&#xff0c;传输或分享大文件就成了一个难题。 常见的传输方式…

SpringBoot通过自定义注解实现日志打印

目录 前言&#xff1a; 正文 一.Spring AOP 1.JDK动态代理 2.Cglib动态代理 使用AOP主要的应用场景&#xff1a; SpringBoot通过自定义注解实现日志打印 一.Maven依赖 二.ControllerMethodLog.class自定义注解 三.Spring AOP切面方法的执行顺序 四.ControllerMethodL…