41.【C语言之外】聊聊Cheat Engine官方教程步骤6的思考

0.看前须知

有一定指针概念的基础

推荐阅读前几篇博文:

19.【C语言】指针(重难点)(A) 37.【C语言】指针(重难点)(B)

38.【C语言】指针(重难点)(C) 39.【C语言】指针(重难点)(D)

40.【C语言】指针(重难点)(E)

1.打开官方教程

输入密码098712

16174a7b67dc4dc2869b0d42a7dd4b29.png
 

官方题目描述:

上一步阐述了如何使用"代码查找"功能对付变化位置的数据地址,但这种方法往往不能达到预期的效果,
所以我们需要学习如何利用指针。
在本关的 Tutorial.exe 窗口下面有两个按钮,一个会改变数值,另一个不但能改变数值而且还会改变数值在内存中存储的位置。
这一步,你不需要懂得汇编,但如果懂的话会很有帮助。
首先找到数值的地址,然后再查找是什么改写了这个地址。
再次改变数值,CE 便可以列出找到的汇编代码。 双击一行汇编代码(或选择它并点击"详细信息")并打开"详细信息"窗口以显示详细的信息,用来告诉你当这个指令运行时发生了什么事情。
如果在这条汇编指令中没看到方括号([])的存在,我们就应该查看下一条汇编代码的详细信息,
如果看到了方括号,那很可能表示我们已经找到了需要的指针。
返回到主 cheat engine 窗口 (只要你愿意,你可以保持这个额外的信息窗口为打开状态。如果你要关掉它,那么要记好方栝号中间的代码)并做一次 4 字节的扫描,扫描"详细信息"窗口中告诉你的一串十六进制数值。
扫描完成时它可能返回一个或几百个地址。大多数时候你需要的地址将是最少的一个。现在点击"手工添加地址"按钮,并勾选"指针"选项。
"添加地址"窗口将发生变化,多出了"Address of Pointer(指针地址)"和"Offset (Hex)(偏移量(16进制))"的文本框,以便您键入一个指针的地址和偏移量。
请尽量填入刚才扫描到的地址。
如果汇编指令中的方栝号里存在计算(例如:[esi+12])则把数值部分填在"Offset (Hex)"的文本框中,如果不存在,则让它保持为 0 。
如果看上去是更复杂的计算指令的话(举例说明一下):
[EAX*2+EDX+00000310] eax=4C 并且 edx=00801234.
这种情况下 EDX 便是数值的指针,而 EAX*2+00000310 则是它的偏移量, 所以你要填在"Offset (Hex)"的将是 2*4C+00000310=3A8。(这些都是在十六进制下计算的,你可以使用WINDOWS的计算器,在科学方式下用十六进制计算)。
回到教程,点击"确定"这个地址便会加到 CE 主窗口下方的地址列表中,如果没做错,在地址栏将显示 P->xxxxxxxx,而 xxxxxxxx 和你扫描到的地址数值是一致的,如果不一致,那么可能是哪里出错了。
现在, 改变那条指针地址的数值为 5000 并锁定它,然后点击 Tutorial.exe 窗口上的"改变指针"按钮,如果一切正确,"下一步"按钮将变为可点击状态。

备注:
你也可以使用"指针扫描"的方式来查找这个指针地址。

 

2.载入进程

f0c3d1fbf4b04a359a08dce0f48ff56e.png

3.精确数值查找

0714231ca0c64b90947c31834309f179.png

 

查找1009486b833a55946a8b8e82beb8666af9d.png

改变数值再查一次b992657d62db4a5a89e540b79ae19ee8.png

筛查到一个地址9032d5841e1041e99fe1af7fcbad1257.png

01914130地址没有用绿色显示,说明不是基址,因此要找指针

3.查找指针

回忆

int a = 653;
int* p = a;

设b变量a存储653,此时&a==01914130

单击改变数值时程序通过改变*p来改变a-->说明指针p改写了a处地址的数据

显然要找出是什么改改写了这个地址

acd4750dd6794b359c258372143ab760.png

教程中点击0412a884161f478b98b5f83bd29536f6.png

变成c15cc343b7194977841739bd5a9ac554.png

出现了一行汇编代码d346c5bc7cf14f3fae4f589545e3c329.png

解释:mov [edx],eax

把eax的数据移动到[edx]中,这个[edx]含义:把edx寄存器中存储着数据视作地址,把eax的数据移动到这个地址

单击汇编指令查看1bdde777eebb4be7a72a71cbdfb55514.png

发现EDX存储着的值刚好就是01914130

ec38ff345b3041f2bb46a46ca4eca9fa.png主界面点击查看内存

右击转到地址

490d6c99e2f14a998cf1f157a3743be4.png

填01914130 点确定
f2a2f89299a74bc296fe27550c2da9cf.png

发现改地址存储着的数据C2 02刚好是706

51a2916e9ffe4c78ae8e8a389aae5eb3.png

所以mov [edx],eax含义 edx==01914130,程序会访问01914130这个地址来改写数据(即把eax的数据覆盖到01914130地址处)

 

要查edx的位置,先查edx存储着的数据:01914130

62ec9d9f630c442689fb9de227c4a7da.png

(一定要√上HEX,地址都是十六进制显示的)点击新的扫描-->点击首次扫描

筛查到一个结果

70b36ad37db24ffa8dd3162ad86e70ba.png

右击选99ed695eb3ee4ad8a31b25b59dc53ddd.png

 

右击选03634ac824ae488a9fe7bc10da7e0033.png

(00656B0是edx(即指针)所在的地址)

8e5c735bdac34830aec406a68c534cf9.png

30 41 91 01--倒着写-->01 91 41 30-->刚好是01914130,验证了前面的想法

4.把地址设置为指针

右击00656B0

修改成这样,向Cheat Engine说明是指针,取消十六进制,勾选指针,其余不要动,点确定

063446d37ee742338031638b20e2e394.png

变成d0a3ff4b3ecd4f669cdc5cb410d524db.png

P->01914130即指针指向01914130这个地址

注:f9ba96002ba04625851f405c715cd538.png

0代表edx+0

由于mov [edx],eax中[edx]即[edx+0],所以不用改偏移

 

这两个数值均为706,指针找的是正确的

3d9969cacc4a4b29805c5eb75c865334.png

原因:

int a = 706;
int* p = a;
printf("%d",*p);
printf("%d",a);

*p和a的打印结果是一样的

5.改变数值为5000

点击改变指针,3s内把指针的数值改为5000

再次点击改变指针

下一步按钮变为可点击状态e5cdd2883e3046fca99e17c378d550f0.png

 

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

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

相关文章

【python】模块包

前言 模块化是python中的重要知识。随着我们接触的工程项目变得越来越大时,就需要把我们的运行代码进行拆解以便我们检查和项目的推进。有些时候,几个程序都需要同一个功能,那python就提供一种方法,把需要重复利用的代码放在同一…

Spring Boot 3.x Web MVC实战:实现流缓存的request

上一节《Spring Boot 3.x Filter实战:记录请求日志》实践最后遇到了request对象的流不可重复读的问题,本小节我们将通过流数据缓存以及流的装饰器模式来解决这个问题。如果觉得对你有帮助,记得点赞收藏,关注小卷,后续更…

Linux部署MySQL8.0

目录 一、部署前准备1.1、查看系统版本和位数(32位或64位)1.2、下载对应安装包 二、开始部署1、将安装包解压并且移动到目标安装目录2、准备MySQL数据和日志等存储文件夹3、准备MySQL配置文件 my.cnf4、创建mysql单独用户组和用户,将安装目录…

<数据集>灭火器识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3262张 标注数量(xml文件个数):3262 标注数量(txt文件个数):3262 标注类别数:1 标注类别名称:[extinguisher] 使用标注工具:labelImg 标注规则&#xf…

无人机培训机构推广运营理论技术

一、市场定位与品牌建设 在无人机培训行业的激烈竞争中,精准的市场定位是成功的第一步。首先,需明确目标学员群体,如航拍爱好者、农业植保服务者、应急救援人员或专业无人机操作员等。基于目标群体的需求,构建差异化的品牌形象。…

FlexBV电路查看软件

FlexBV - Macbook, iPhone, PC/Laptop & Electronics BoardViewer with PDF Cross Referencing 免费。 支持tvw,cad格式。 支持Windows,Linux,Mac。 而且我发现cad格式是文本的!意味着可以自由编辑!

git拉取代码出现“remote: The project you were looking for could not be found.”错误分析

git拉取代码出现“remote: The project you were looking for could not be found.”错误分析 如果输入的远程地址正确,那么极大可能是用户未登录或多个用户登录无法正确获取你想要的用户,如下图所示, 由于之前有同事在我电脑登录git账号&a…

leetcode 103.二叉树的锯齿形层序遍历

1.题目要求: 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。2.做题思路:由题我们可以判断,树中每到偶数…

spring过滤器和拦截器的区别

1出身不同。 过滤器来自servlet,拦截器来自spring框架。 2触发时机 不同请求的执行顺序是:请求进入容器 > 进入过滤器 > 进入 Servlet > 进入拦截器 > 执行控制器 过滤器先执行,会在servlet请求之前和相应之后进行处理。 拦…

写一个Vue2和vue3的自定义指令(以复制指定作为示例)

文章目录 一、自定义指令是什么?二、自定义指令有啥用?三、自定义指令怎么用?1.自定义指令的参数2.自定义指令的钩子函数(1)五个钩子函数的说明(2)钩子函数的参数(主要参数:el和valu…

【活动预告】研讨会+开源集市,IoTDB “登录” GOTC 2024!

由开源中国与上海浦东软件园联合举办的 GOTC 2024 即将开幕!本次大会结合 “GOTC(全球开源技术峰会)” 与 “GOGC(全球开源极客嘉年华)”,将集结全球范围内对开源技术充满热情的开发者、社区成员、创业者、…

Oracle是如何保证数据不丢的

上一篇文章给大家梳理了一条更新语句在Oracle数据库中是如何执行的,我们也提到只要更新记录成功写入到在线重做日志文件,Oracle就能保证数据不会丢失。同时也向大家解释了,其实这个时候数据并没有写入到数据文件,因此这个时候仍然…

为什么不用postman做自动化

面试的时候被问到:为什么不用postman做自动化 打开postman,看到用例集管理、API 管理、环境管理这三个功能,用户体验感算得上品牌等级了 为什么不用呢,文心一言给了一些答案 不适合大规模自动化测试:Postman 主要是为…

React 后台管理项目 入门项目 简洁清晰保姆级内容讲解

序章 React Hook的后台管理项目,从0到1搭建,内容非常丰富涵盖项目搭建、路由配置、用户鉴权、首页报表、用户列表、前后端联调等功能,推荐指数:5颗星! 视频学习链接: React 通用后台管理-零基础从0到1详细的入门保姆…

数据结构(5.5_3)——并查集的进一步优化

Find操作的优化(压缩路径) 压缩路径——Find操作,先找到根节点,再将查找路径上所有结点都挂到根结点下 代码: //Find "查"操作优化,先找到根节点,再进行"路径压缩" int Find(int S[], int x) {…

50 mysql 的 “where 1 = 1“ 的优化处理

前言 问题是来自于 chinaunix 问题 ”mysql查询后面加 where 1 1 影响效率吗?” mysql 中在 java 代码中我们经常会使用到 ”where 1 1 and username ‘jerry’ ” 之类的条件 然后 我们这里 来看一下 “where 1 1” 的相关处理 where 条件在 select_lex, QUP_shared…

LeetCode面试150——14最长公共前缀

题目难度:简单 默认优化目标:最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 横向扫描 3.2 纵向扫描 3.3 分治 3.4 二分查找 参考文献 1 题目描述 编写一个函数来查找字符串数组中的最长…

【面试题】设计模式-责任链模式

设计模式-责任链模式 前言责任链简历案例代码小结 前言 我们知道,设计模式是面试时经常被问到的问题之一,这是因为设计模式能够体现出代码设计的美感,且在很多框架的底层也都会使用到各种设计模式,所以对设计模式的考察&#xff…

用Manim创建条形图【BarChart】

BarChart是Manim库中用于创建条形图的函数。它允许用户通过一组值创建一个条形图,其参数可以调整条形的外观和布局。 BarChart(values, bar_namesNone, y_rangeNone, x_lengthNone, y_lengthNone, bar_colors[#003f5c, #58508d, #bc5090, #ff6361, #ffa600],bar_w…

js第四天-函数

例1&#xff1a;选出最大值&#xff1a; <script>function getmax(x, y) {return x > y ? x : y}let max getmax(1, 3)</script> 例2&#xff1a;返回数组的最大值 <script>function getArrValue(arr []) {let max arr[0]for (let i 1; i < arr.…