【CE】Mac下的CE教程Tutorial:进阶篇(第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:**文章中内容仅用于技术交流,请勿用于违规违法行为。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值