【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

news2025/1/23 22:27:25

▒ 目录 ▒

    • 🛫 导读
      • 开发环境
    • 1️⃣ 第8关:多级指针
      • 翻译
      • 操作
      • 验证
      • 其它方案
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

开发环境

版本号描述
文章日期2023-03-
操作系统MacOS Big Sur 11.5
Cheat Engine7.4.3

1️⃣ 第8关:多级指针

在这里插入图片描述

翻译

Step 8: Multilevel pointers: (PW=525927)
This step will explain how to use multi-level pointers.
In step 6 you had a simple level-1 pointer, with the first address found already being the real base address.
This step however is a level-4 pointer. It has a pointer to a pointer to a pointer to a pointer to a pointer to the health.

You basicly do the same as in step 6. Find out what accesses the value, look at the instruction and what probably is the base pointer value, and what is the offset, and already fill that in or write it down. But in this case the address you'll find will also be a pointer. You just have to find out the pointer to that pointer exactly the same way as you did with the value. Find out what accesses that address you found, look at the assembler instruction, note the probable instruction and offset, and use that.
and continue till you can't get any further (usually when the base address is a static address, shown up as green)

Click Change Value to let the tutorial access the health.

If you think you've found the pointer path click Change Register. The pointers and value will then change and you'll have 3 seconds to freeze the address to 5000

Extra: This problem can also be solved using a auto assembler script, or using the pointer scanner
Extra2: In some situations it is recommended to change ce's codefinder settings to Access violations when 
Encountering instructions like mov eax,[eax] since debugregisters show it AFTER it was changed, making it hard to find out the the value of the pointer

Extra3: If you're still reading. You might notice that when looking at the assembler instructions that the pointer is being read and filled out in the same codeblock (same routine, if you know assembler, look up till the start of the routine). This doesn't always happen, but can be really useful in finding a pointer when debugging is troublesome

8关 多级指针

这一步将解释如何使用多级指针。

在步骤6中,您有一个简单的一级指针,第一个地址已经找到了实际基地址。

这一步是一个四级指针。它有一个指向指针的指针的指针的指针。

您基本上做了同样的事情,找出访问值的是什么,看看指令和可能是基地址值,并填写它或记录它。
但在这种情况下,您将找到的地址也将是一个指针。
您只需要找出指向该指针的指针的方式与您在值中找到的方式相同。找出您找到的指向该地址的指针,看看汇编指令,注意可能的指令和偏移量,并使用它。

并继续直到您无法再进一步(通常当基地址是静态地址时,显示为绿色)。

单击“变更值”以允许教程访问健康状况。

如果你认为你已经找到了指针路径,请单击“变更寄存器”。指针和值将更改,您将有3秒钟冻结地址为5000。

额外1:这个问题也可以通过使用自动汇编脚本或使用指针扫描器解决。

额外2:在某些情况下,建议更改ce的代码检查设置,以在遇到像mov eax,[eax]这样的指令时,显示访问违规,因为debugregisters在指针被更改后显示,这使得很难找出指针的值。

额外3:如果你仍在阅读。你可能会注意到,当你在同一代码块中查看指针时,指针被读取和填充在同一代码块中(如果你知道汇编,查找直到程序开始的代码块)。这并不总是发生,但在调试困难时可以非常有用。

操作

  1. 定位目标值
    点击《Change value》按钮,多次扫描精确值,定位目标值地址
    在这里插入图片描述
  1. 查看目标值被访问代码。
    在这里插入图片描述
  1. 查看访问地址
    在这里插入图片描述
  1. 查看并分析汇编代码
    第3步中打开Memory Viewer窗口,查看汇编代码。
    不断向上查找,发现所有访问地址均使用了r12寄存器,经过4次偏移,找到基址tutorial-x86_64+322D98
    下图为精简后的代码:
    在这里插入图片描述

附汇编代码如下:

tutorial-x86_64+2C344 - 48 89 54 24 58        - mov [rsp+58],rdx
tutorial-x86_64+2C349 - 85 C0                 - test eax,eax
tutorial-x86_64+2C34B - 0F85 84010000         - jne tutorial-x86_64+2C4D5
tutorial-x86_64+2C351 - 48 8D 05 406A2F00     - lea rax,[tutorial-x86_64+322D98] { (1010D7F80) }
tutorial-x86_64+2C358 - 4C 8B 20              - mov r12,[rax]
tutorial-x86_64+2C35B - 4C 89 E0              - mov rax,r12
tutorial-x86_64+2C35E - 8B 50 04              - mov edx,[rax+04]
tutorial-x86_64+2C361 - 3B 10                 - cmp edx,[rax]
......
tutorial-x86_64+2C394 - 49 83 7C 24 10 00     - cmp qword ptr [r12+10],00 { 0 }
tutorial-x86_64+2C39A - 0F84 35010000         - je tutorial-x86_64+2C4D5
tutorial-x86_64+2C3A0 - 4D 8B 64 24 10        - mov r12,[r12+10]
tutorial-x86_64+2C3A5 - 4C 89 E0              - mov rax,r12
tutorial-x86_64+2C3A8 - 8B 50 04              - mov edx,[rax+04]
tutorial-x86_64+2C3AB - 3B 10                 - cmp edx,[rax]
......
tutorial-x86_64+2C3D4 - E8 27AE1900           - call tutorial-x86_64+1C7200
tutorial-x86_64+2C3D9 - E9 F7000000           - jmp tutorial-x86_64+2C4D5
tutorial-x86_64+2C3DE - 49 83 7C 24 18 00     - cmp qword ptr [r12+18],00 { 0 }
tutorial-x86_64+2C3E4 - 0F84 EB000000         - je tutorial-x86_64+2C4D5
tutorial-x86_64+2C3EA - 4D 8B 64 24 18        - mov r12,[r12+18]
tutorial-x86_64+2C3EF - 4C 89 E0              - mov rax,r12
tutorial-x86_64+2C3F2 - 8B 50 0C              - mov edx,[rax+0C]
tutorial-x86_64+2C3F5 - 3B 50 08              - cmp edx,[rax+08]
......
tutorial-x86_64+2C429 - 49 83 3C 24  00       - cmp qword ptr [r12],00 { 0 }
tutorial-x86_64+2C42E - 0F84 A1000000         - je tutorial-x86_64+2C4D5
tutorial-x86_64+2C434 - 4D 8B 24 24           - mov r12,[r12]
tutorial-x86_64+2C438 - 4C 89 E0              - mov rax,r12
tutorial-x86_64+2C43B - 8B 50 04              - mov edx,[rax+04]
......
tutorial-x86_64+2C473 - E8 1814FEFF           - call tutorial-x86_64+D890
tutorial-x86_64+2C478 - 41 89 44 24 18        - mov [r12+18],eax

  1. 添加指针
    根据上面分析,添加四级指针,最终结果就是1935,的确是正确的。
    在这里插入图片描述

验证

  1. 按照如下步骤操作上一小节中创建的指针地址。
    在这里插入图片描述
  1. 点击《Change pointer》按钮,等待3秒,即可过关。
    在这里插入图片描述

其它方案

除了上面分析汇编代码的方案,还可以按照下面方案执行。

  • 一级一级的指针扫描,直到找到基址(参考《第6关:指针》https://blog.csdn.net/kinghzking/article/details/129848329)
  • CE提供的指针扫描器工具。

🛬 文章小结

实际应用中,大量存在指针的访问。我们需要通过分析汇编代码扫描指针指针扫描器等多种方案定位目标地址,有事更是需要使用AOB代码注入等方案实现目标定位。

📖 参考资料

  • 【CE】Mac下的CE教程Tutorial:基础篇(第6关:指针) https://blog.csdn.net/kinghzking/article/details/129848329

ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。

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

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

相关文章

DCT-Net工业级轻量化人像漫画

工业级轻量AI人像漫画开源模型技术解析_哔哩哔哩_bilibiliModelScope 旨在打造下一代开源的模型即 服务共享平台,为泛 AI 开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎使用魔搭社区:ModelScope.cn, 视…

JVM:线上服务CPU爆满,如何排查(三)

0. 引言 前一段时间出现了一个正则表达式引起的线上CPU爆满的问题,一开始没有在第一时间定位到问题,这里也特此记录一下,同时也系统的梳理下CPU爆满问题的排查思路和方法,为后续的同学提供参考。 1. CPU爆满问题产生的原因 我们…

八大排序算法之插入排序、希尔排序、选择排序

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 本篇主要讲解八大排序算法中的三种排序,分别是:插入排序、希尔排…

yum源配置

一、互联网yum源(centos7为例): cd /etc/yum.repos.d/ && rm -f *.repo;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo…

Golang编译报错 ‘invalid char’

现象 最近在新电脑安装go环境,发现 golang 包名如果有汉字就不能编译运行。 具体来讲,就是 go mod tidy 报错 ‘invalid char’ 但是,我在以前的电脑上运行 go mod tidy 没有问题 原因 我对比了 go sdk 版本,旧电脑用 go 1.13…

Html5钢琴块游戏制作(音乐游戏)

当年一款手机节奏音游,相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法:点击下落的黑色方块,弹奏音乐。(下落的速度会越来越快) 可以进行试玩,手机玩起来效果会更好些。 点击…

Java就业前景如何?

Java还有出路吗?2023年的就业市场依然经历着面临挑战,很多有经验有技术的人被淘汰下来,而马上又有一千多万的新鲜血液涌入就业市场。经济大环境对于各行各业的影响是非常大的,也为IT行业的内卷推波助澜。在2023年想学习Java入行就…

面试造航母,入职拧螺丝,工资...

有粉丝跟我吐槽说:金三银四去面试软件测试岗,真的是面试造航母,入职拧螺丝,工资还低 这种现象很正常,因为找一个测试员,当然希望他能做的业务越多越好,最好像机器猫一样,啥事儿都能…

Chatgpt 实践经验分享

数据准备:ChatGPT 需要大量的训练数据来支撑模型的训练和优化,因此需要进行充分的数据准备。在数据准备方面,需要考虑数据的质量、覆盖范围以及数据的预处理方式等。模型训练:ChatGPT 使用端到端学习的方式训练模型,需…

自动控制原理模拟卷1

自动控制原理模拟题一 Question1 已知机械系统和电网络如下图所示,求解两个系统的传递函数,并证明这两个系统是相似系统. 解: 【图a系统】 由电网络原理图并根据复阻抗原理,可得系统传递函数为: E o ( s ) E i

离线安装k8s/kubernetesv1.17.1

条件: 3台没有网络的centos7.9服务器 1.系统优化 hostnamectl set-hostname k8s-master && bash #只在master节点上执行 hostnamectl set-hostname k8s-node1 && bash #只在node1节点上执行 hostnamectl set-hostname k8s-node2 && …

基于stm32单片机和rt-thread操作系统的智能灯

目 录 一、 总体概况 二、 各部分介绍 2.1 STM32F4开发板 2.2 光敏模块 2.3 麦克风模块 2.4 超声波模块 三、 RT-Thread介绍 四、 开发过程 五、 未来设想 六、 开发心得 总体概况 本次测试技术与信号处理课程作业,我利用了stm32单片机和rt-thread…

SpringBoot中使用WebSocket Demo

大概目录结构 依赖只引入了JSP 和SpringBoot整合WebSocket Spring Web index.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><meta charset"utf-8"><s…

STM32开发(十三)STM32F103 片内资源 —— 外部中断 按键 详解

文章目录一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解五、结果演示一、基础知识点 外部中断/事件控制器主要特征&#xff1a; 每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达20个软件的中断/事件请求检测脉冲宽度低于APB2时…

校园一键报警柱的作用

校园一键报警柱是一种用于校园安全的紧急报警系统&#xff0c;可以随时随地向校园安全管理部门发送紧急警报。这种系统通常采用带有紧急按钮的电缆或无线警报装置&#xff0c;使学生、教师和工作人员可以在出现紧急情况时轻松报告安全问题&#xff0c;迅速地通知校园安全人员&a…

彻底理解java中泛型

一、什么是泛型&#xff1f; 泛型是JDK5引入的一种特性&#xff0c;是一种类型安全检测机制&#xff0c;开发者在编译阶段发现类型相关的报错。 泛型即参数类型化&#xff0c;将操作的数据类型定义为参数&#xff0c;可定义在类、接口、方法中。 可以把类型参数看作是使用参数化…

CorelDRAW2023中文版矢量制图及设计软件更新发布

矢量制图及设计软件&#xff0c;CorelDRAW Graphics Suite 2023中文版&#xff08;以下简称CorelDRAW 2023&#xff09;对新手来说&#xff0c;对于自己多久才能学会cdr软件这个问题是比较关心的。如果你的学习能力比较强&#xff0c;一周时间是有可能完全学会cdr的。但由于每个…

您可以找到的 5 种最佳数据恢复软件

数据恢复软件对很多人来说是一个非常有价值的工具。无论您是否意识到&#xff0c;宝贵的数据都有被删除的风险&#xff0c;而且很多人直到丢失数据才知道数据的价值。 5 种数据恢复软件 如果发生这种情况&#xff0c;您需要最好的软件来恢复数据并确保这种情况不会再次发生。这…

PostgreSQL 函数(一) 数学函数和字符串函数

1.数学函数 1.1.符号函数sign 用于判断正负 1.2.求余函数mod 1.3.圆周率函数pi 1.4.平方根函数sqrt 1.5.向上取整函数ceil和ceiling 1.6.向下取整函数floor 1.7.绝对值函数abs 1.8.四舍五入函数round 第2位参数为保留位数 1.9.其他函数 正弦函数sin, 反正弦函数asin, 余弦…

考研复试确认神操作!

终于进行到了研究生考试的尾声&#xff0c;但让考生感到无力吐槽的事情&#xff0c;却还在继续上演&#xff0c;比如苏科大&#xff0c;再比如中地大、苏大&#xff0c;三所学校的神操作&#xff0c;着实让无数考生忍不住调侃&#xff1a;原来考研不仅拼实力&#xff0c;还得拼…