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

▒ 目录 ▒

    • 🛫 导读
      • 开发环境
    • 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: 文章中内容仅用于技术交流,请勿用于违规违法行为。

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

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

相关文章

MySQL数据库中的函数怎样使用?

函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那么,函数到底在哪儿使用呢? 我们先来看两个场景&a…

【FPGA-Spirit_V2】基于FPGA的循迹小车-小精灵V2开发板

🎉欢迎来到FPGA专栏~基于FPGA的循迹小车 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能…

Android下载apk并安装apk(用于软件版本升级用途)

软件版本更新是每个应用必不可少的功能,基本实现方案是请求服务器最新的版本号与本地的版本号对比,有新版本则下载apk并执行安装。请求服务器版本号与本地对比很容易,本文就不过多讲解,主要讲解下载apk到安装apk的内容。 一、所需…

Socket套接字编程(实现TCP和UDP的通信)

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

(链表)移除链表元素(双指针法)

文章目录前言:问题描述:解题思路(双指针法):代码实现:总结:前言: 此篇是针对链表的经典练习题。 问题描述: 给你一个链表的头节点 head 和一个整数 val ,请…

Js:apply/call/bind、作用域/闭包、this指向(普通,箭头,JS/Vue的this)

目录1、apply/call/bind2、作用域、作用域链和闭包核心1、预处理(解析阶段)——JS执行“代码段”之前2、生成执行上下文环境——对代码段(全局/函数体)进行处理3、执行上下文环境小结4、多个执行上下文环境5、作用域6、作用域和执行上下文7、从【自由变量…

小米万兆路由器里的 Docker 安装 Gitea

小米万兆路由器里的 Docker 安装 Gitea准备工作创建存储查看Docker Hub镜像信息拉取 gitea 镜像和运行容器配置通过 ssh 访问(Optional)其他小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装Gitea。 准备工作 先将一块US…

Java企业级开发学习笔记(2.1)MyBatis实现简单查询

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/zi0wB】 文章目录零、创建数据库与表一、基于配置文件方式使用MyBatis基本使用1.1 创建Maven项目 - MyBatisDemo1.2 在pom文件里添加相应的依赖1.3 创建与用户表对应的用户实体类 - User1.4 创建用…

没有他们,人工智能只能死翘翘

我过去写过一篇文章《很多所谓伟大的贡献,其实都是狗屎运》,今天我也写写人工智能。(1)人才深度神经网络如果不从明斯基和罗森布拉特说起,那就应该可以从1965年Ivakhnenko发明前馈神经网络说起。但关键里程碑是出自Rum…

SpringBoot2核心功能 --- 原理解析

一、Profile功能 为了方便多环境适配,springboot简化了profile功能。 1.1、application-profile功能 默认配置文件 application.yaml;任何时候都会加载指定环境配置文件 application-{env}.yaml激活指定环境配置文件激活 命令行激活:java -…

【快乐手撕LeetCode题解系列】—— 环形链表 II

【快乐手撕LeetCode题解系列】—— 环形链表 II😎前言🙌环形链表 II🙌画图分析:😍思路分析:😍源代码分享:😍总结撒花💞😎博客昵称:博客…

STM32与Python上位机通过USB虚拟串口通信

文章目录前言1. 查看原理图2. 新建工程3.添加代码与烧录4. python代码编写总结问题解决思路前言 在详细阅读广大网友的教程之后,我对STM32和Python通过USB通信的流程烂熟于心。 尝试用ST公司的NUCLEO-L476RG板子进行简单的回环通信测试,发现还是存在网上…

Linux·异步IO编程框架

hi,大家好,今天分享一篇Linux异步IO编程框架文章,对比IO复用的epoll框架,到底性能提高多少?让我们看一看。 译者序 本文组合翻译了以下两篇文章的干货部分,作为 io_uring 相关的入门参考: Ho…

【RocketMQ】顺序消息实现原理

全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用…

Web 攻防之业务安全:接口未授权访问/调用测试(敏感信息泄露)

Web 攻防之业务安全:接口未授权访问/调用测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台(操作系统、数据库,中间件等)、业务系统自身(软件或设备)、业…

ViT/vit/VIT详解

参考: Vision Transformer详解: https://blog.csdn.net/qq_37541097/article/details/118242600 目录: x.1 (论文中)模型理解x.2 代码理解 建议阅读时间:10min x.1 模型理解 ViT是发表在ICLR2021上的一篇文章,通过将图片分割…

Java并发控制 学习笔记1

一、并发控制的方法 1、悲观锁:常用的互斥锁都属于悲观锁,一个线程访问共享资源时其他线程不能访问。 2、乐观锁:允许同时访问共享数据,只有在提交时利用如版本号检查是否有冲突,应用github。 3、什么时候用乐观锁、什…

携程平台增长部总经理王绩强:原生互联网企业正在经历一场数字升级丨数据猿专访...

‍数据智能产业创新服务媒体——聚焦数智 改变商业以大数据和人工智能为核心,众多新兴技术开始赋能数字营销。于是,智能营销已然从工具化走向了业务化。如今,数字化营销已经成为了企业数字化转型中的重要一环。相较于传统营销逻辑&#xff0…

新版新款影视直播粉红色UI的麻豆CMS源码/带教程/支付已接

基于苹果CMS v10影视系统框架开发的前端模板,带会员中心,可设置试看付费观看等功能。 经过测试及修复,这套源码功能还是很强大的,可以设置一键采集,并且支付我们给他接到了易支付,拓展性强,基本…

【压测】通过Jemeter进行压力测试(超详细)

文章目录背景一、前言二、关于JMeter三、准备工作四、创建测试4.1、创建线程组4.2、配置元件4.3、构造HTTP请求4.4、添加HTTP请求头4.5、添加断言4.6、添加察看结果树4.7、添加Summary Report4.8、测试计划创建完成五、执行测试计划总结背景 通过SpringCloudGateway整合Nacos进…