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

▒ 目录 ▒

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

导读

开发环境

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

1️⃣ 第7关:代码注入

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

翻译

步骤 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》窗口。
    按照下面步骤,执行菜单命令。
    【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)_第2张图片
    在弹出对话框中,点击确定。
    【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)_第3张图片
    最终将显示《下列操作码写入到XXXX》窗口。
    【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)_第4张图片
  1. 打开写入健康值的代码所在汇编窗口。
    按照如下步骤操作。
    【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)_第5张图片
    最终显示如下内容:
    【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)_第6张图片
  1. 分析代码
    从上图中可以看出,代码执行了健康值减1的操作。
    根据目标要求,我们将该代码改为健康值加2
  1. 修改汇编代码为健康值加2(根据图中描述进行操作)。
    【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)_第7张图片
  1. 验证。
    点击《Hit me》,数值从96变为98,《Next》按钮可以点击了。验证通过。
    【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)_第8张图片

代码注入完成任务

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

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

文章小结

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

参考资料

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

你可能感兴趣的:(#,CheatEngine,CE,cheat,engine,游戏安全)