【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)

news2025/1/12 0:50:19

▒ 目录 ▒

    • 🛫 导读
      • 开发环境
    • 1️⃣ 第7关:代码注入
      • 翻译
      • 非代码注入完成任务
      • 代码注入完成任务
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

开发环境

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

1️⃣ 第7关:代码注入

在这里插入图片描述

翻译

步骤 7:代码注入:(PW=013370)

代码注入是一种技术,其中将一段代码注入到目标进程中,然后重新路由代码执行,使其通过您编写的代码。

在本教程中,您将拥有一个健康值(Health)和一个按钮,每次单击该按钮,健康值会减少1。您的任务是使用代码注入使按钮每次单击时将您的健康值增加2。

首先找到地址,然后找到写入该地址的内容。
然后,当找到减少健康值的代码时,请在反汇编器中浏览到该地址,并打开自动汇编器窗口(Ctrl + A)。
在那里,单击“模板”,然后单击“代码注入”,并将其给定健康值减少的地址(如果尚未正确填写)。
这将生成一个基本的自动汇编器注入框架,您可以在其中编写您的代码。

还请注意 newmem:和 originalcode:以及文本“在此处放置您的代码”。正如您猜到的那样,请在此处编写代码,以将健康值增加 2。在这种情况下,有用的汇编指令是“ADD 指令”,以下是一些示例:
“ADD [00901234],9” 将 00901234 处的地址增加 9
“ADD [ESP+4],9” 将 ESP+4 指向的地址增加 9
在这种情况下,您将必须使用与原始代码相同的括号内的内容,因为原始代码会减少您的健康值。

注意:
建议删除减少健康值的原始代码部分,否则您需要增加 3 点健康值(您增加了 3 点,原始代码减少了 1 点,所以最终结果是增加了 2 点),这可能会让人感到困惑。但这完全取决于您和您的编程。

注意2:
在某些游戏中,原始代码可能由多个指令组成,有时(但不总是)可能会发生在其他位置的代码跳转到您的跳转指令,然后导致未知的行为。
如果发生这种情况,通常应该在该指令附近查找跳转并进行修复,或者甚至选择使用不同的地址进行代码注入。
只要您能够从注入的代码内部找到要更改的地址即可。

非代码注入完成任务

上面的翻译中,内容很多,但是目标很简单:使用代码注入使按钮每次单击时将您的健康值增加2
其中提到了代码注入,该词在翻译的最开头也给了解释:代码注入是一种技术,其中将一段代码注入到目标进程中,然后重新路由代码执行,使其通过您编写的代码。其实代码注入就是inline Hook,CE通过不同模板实现代码注入,达到修改代码的目的。

我们本小节,先使用直接修改代码的方案实现任务。先确认任务目标怎样能完成。

  1. 定位目标健康值(Health)地址,参考之前的文章即可。
  1. 打开《下列操作码写入到XXXX》窗口。
    按照下面步骤,执行菜单命令。
    在这里插入图片描述
    在弹出对话框中,点击确定。
    在这里插入图片描述
    最终将显示《下列操作码写入到XXXX》窗口。
    在这里插入图片描述
  1. 打开写入健康值的代码所在汇编窗口。
    按照如下步骤操作。
    在这里插入图片描述
    最终显示如下内容:
    在这里插入图片描述
  1. 分析代码
    从上图中可以看出,代码执行了健康值减1的操作。
    根据目标要求,我们将该代码改为健康值加2
  1. 修改汇编代码为健康值加2(根据图中描述进行操作)。
    在这里插入图片描述
  1. 验证。
    点击《Hit me》,数值从96变为98,《Next》按钮可以点击了。验证通过。
    在这里插入图片描述

代码注入完成任务

接下来,我们通过代码注入方式,实现目标。

  1. 重新打开教程软件,按照《非代码注入完成任务》章节中的步骤1~3,打开《Memory Viewer》窗口。
  1. 打开自动汇编器窗口。
    当前窗口为《Memory Viewer》窗口时(其它窗口处于激活状态时,菜单不一样的),点击菜单《工具 >> AutoAssemble》。
    在这里插入图片描述
    这时将打开自动汇编器窗口。
    在这里插入图片描述
  1. 创建代码注入模板
    当前窗口为《Auto assemble》窗口时(其它窗口处于激活状态时,菜单不一样的),点击菜单《Template >> Code Injection》
    在这里插入图片描述
    弹出对话框中点击确定。
    在这里插入图片描述
    最终将创建出如下代码。
    在这里插入图片描述
  1. 在注入框架中,我们需要分配一个内存块来放置代码,并在 “newmem” 和 “originalcode” 标签下编写代码,以使按钮单击时健康值增加 2。
    直接修改可以使用 ADD 指令来实现健康值的增加。代码如下,点击《执行》。
    在这里插入图片描述
    我们将原始代码,修改后的代码做如下对比。可以看出,代码执行流程变为了:
  • 跳转到一个新的地址
  • 执行add指令(增加健康值)
  • 跳转回原始代码下一条指令(原始指令sub dword ptr [r12+000007E0],01长度大于跳转指令长度5,所以直接执行了下一条一条指令;如果长度小于5,流程会有变化)
    在这里插入图片描述
    总的来说,排除jmp指令,执行的逻辑,只是替换sub为add,和我们的预期一样。

🛬 文章小结

  • 本节涉及到汇编知识,需要有一定的基础。
  • 代码注入本质就是Hook,有Hook经验的,对该操作不会有任何障碍的,可以参考detour等hook框架原理。

📖 参考资料

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

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

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

相关文章

PADS生成SMT坐标文件

做SMT时,除了“gerber文件”外,还要提供 “BOM文件” 和 “坐标文件”。 “gerber文件” 和 “BOM文件”,前面都有介绍过了,现在详细说一下生成“坐标文件”的方法。 贴片厂家提供了操作教程,如下: 所以&a…

Leetcode力扣秋招刷题路-0289

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 289. 生命游戏 根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&a…

应届生,实力已超6年,太卷了!

你好,我是田哥今晚上,给一位朋友做模拟面试,原本说好的90分钟左右,结果整了2个多小时。很多人估计也很好奇,我们这两个多小时聊聊什么,下面我给大致总结一下:面试技巧面试中,我们回答…

企业招采系统实现方案(SRM系统)

企事业数字化转型专家,提供各类应用解决方案。您身边的赋能小助手! 文章目录前言一、当下采购的痛点二、解决方案-供应商管理1.供应商管理三、解决方案-企业询价、供应商报价管理四、解决方案-采购订单五、送货、到货、订单管理总结前言 随着各类产业链…

JS实用技巧断点调试详解

调试能力是一个程序员的生存根本,可是很多初学者却忽视调试。今天我们就来讨究一下JS的调试技巧。本文章将会详细列举JS相关的各种实用调试技巧。 如果您是JS的初学者,那么这篇文章将对您有很大的帮助。为什么要调试?程序就是函数堆砌起来的…

智驾升级!ADB+AFS「起势」

目前,乘用车前大灯已经完成从传统卤素、氙气到LED的转型升级,高工智能汽车研究院监测数据显示,2022年中国市场(不含进出口)乘用车前装标配LED前大灯搭载率达到75.99%,同比2021年提高约7个百分点。 而相比而…

2023.4.16 第四十九次周报-2

目录 前言 文献阅读 :基于动态分类的长短期记忆网络模型,用于不同气候区日流量预报 背景 主要贡献 思路 动态分类 (DC) 方法 DC-LSTM 和 DC-B-LSTM 模型 Box -Cox数据转换 模型性能评估指标 克里金插值源码总结 第一部分 第二部分…

网络连通性测试-防甩锅套路

一、前言 为什么要写这个东西呢?怎么涉及到甩锅呢?说白了就是在各种对接过程中,总会遇到一些喜欢甩锅的人,说是你的问题,什么网络没毛病,是你的接口什么的不对,总之就是你的问题~ 这时候什么最…

游戏解密之常见网络游戏同步方式分析

一、为什么需要有同步呢? 同步机制是用来维护游戏的一致性,通俗的说就是虚拟世界中的事实;比如在CF中,大家的PING都很高,A和B两个玩家同时发现了对方,并向对方开火,如果没有很好的同步机制&…

50 Projects 50 Days - Rotating Navigation Animation 学习记录

项目地址 Rotating Navigation Animation 展示效果 Rotating Navigation Animation 实现思路 结构主要分为两部分,绕左上角旋转的部分:包括按钮圆盘和内容区,以及左下角移出的导航栏部分。 整个界面只在左上角圆盘的按钮点击时发生改变…

Sarsa VS Q-Learning

前言 1.如何计算价值函数? 为了使模型训练的最好,学习到更多有用的知识即完成任务的最好策略。对策略好坏的评价标准自然是得到最多最好的奖励,那么如何找到最好的最好的奖励,即如何得到最好的价值函数? 首先对于在状…

Leetcode.2280 表示一个折线图的最少线段数

题目链接 Leetcode.2280 表示一个折线图的最少线段数 Rating : 1681 题目描述 给你一个二维整数数组 stockPrices,其中 stockPrices[i] [dayi, pricei]表示股票在 dayi的价格为 pricei 。折线图 是一个二维平面上的若干个点组成的图,横坐标…

ROS学习——艰辛的环境安装之路一Ubuntu

文章目录Ubuntu安装和下载页面设置安装Vmware Tools安装VSCODE用几个常用命令简单熟悉下UbuntuUbuntu 安装和下载 Ubuntu的安装和下载 看这个链接 Ubuntu安装和下载1 或者这个链接 Ubuntu安装和下载2 页面设置 安装Vmware Tools 看这个链接 VMware Tools的介绍和安装 安装…

算法训练第五十五天 | 392.判断子序列、115.不同的子序列

动态规划part15392.判断子序列题目描述思路总结115.不同的子序列题目描述思路392.判断子序列 题目链接:392.判断子序列 参考:https://programmercarl.com/0392.%E5%88%A4%E6%96%AD%E5%AD%90%E5%BA%8F%E5%88%97.html 题目描述 给定字符串 s 和 t &…

RabbitMQ 基础篇 | 黑马

目录 一、RabbitMQ简介 1、AMQP 2、基本概念 3、工作模式 4、JMS 5、小结 二、快速入门 简单模式 生产者 消费者 三、工作模式 1、Work queues 工作队列模式 2、Pub/Sub 订阅模式 3、Routing 路由模式 4、Topics 通配符模式 四、SpringBoot整合RabbitMQ 1、生产…

ESP32设备驱动-BME680环境传感器驱动

BME680环境传感器驱动 文章目录 BME680环境传感器驱动1、BME680介绍2、硬件准备3、软件准备4、驱动实现1、BME680介绍 BME680 是一款集成环境传感器,专为尺寸和低功耗是关键要求的移动应用和可穿戴设备而开发。 BME680 扩展了 Bosch Sensortec 现有的环境传感器系列,首次集成…

电影《龙马精神》观后感

上周看了龙叔的电影《龙马精神》,整体故事围绕着一匹马而展开的,因为这匹马,饰演罗师傅的龙叔,被小混混催债,因为这匹马,罗师傅才有机会和女儿接触,因为这匹马,才有机会看见女婿。 看…

数据结构-排序

本节目标: 1.排序的概念及其运用 2.常见排序算法的实现 3.排序算法复杂度及稳定性分析 1.排序的概念及其应用 1.1排序的概念 排序就是按照某个我们设定的关键字,或者关键词,递增或者递减,完成这样的操作就是排序。 1.2排…

打开组策略提示:无法为文件xxx找到适当的资源文件,错误=2的解决方法

最近把自己的电脑升级成win11了,出现了一些bug,不见得是win11系统的问题,也可能是某个过程出现了问题,出现了问题咱就解决,参考了几个文档和视频,最终解决了,记录一下。 打开本地策略出现问题如…

7.Java中的String类、常用类及包装类

Java中的String类、常用类及包装类 一、String类 1、String类定义 String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为…