2.6 CE修改器:代码注入功能

从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一。在第6关的时候我们说到指针的找法,用基址定位动态地址。但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大。代码注入是将一小段你写出的代码注入到目标进程中并执行它的技巧。在这一步教程中,你将有一个健康值和一个每按一次将减少 1 点健康值的按钮,你的任务是利用”代码注入”,使每按一次按钮增加2点的健康值。

在 Cheat Engine 修改器中使用代码注入功能的步骤如下:

  • 找到需要修改的数值的地址,并查找是什么在改写它。
  • 查找减少数值的汇编代码,选择 [显示反汇编程序],然后打开 [自动汇编窗口]。
  • 在自动汇编窗口中,选择 [模板] 中的 [代码注入]。
  • 在代码注入部分,使用 [ADD] 汇编指令编写你修改数值的代码。
  • 在代码注入部分,使用相同的手法处理减少数值的那条原代码方括号之间的部分。
  • 删除减少数值的原代码行,点击 [应用代码] 使修改生效。

代码注入功能可以将一小段你编写的代码注入到目标进程中并执行它。如果可以找到正确的修改地址和编写适当的代码,代码注入功能可以大大改变游戏行为。需要提醒的是,在操作代码注入前,确保你理解代码的含义,并注意程序的稳定性和安全性。

首先老样子,读者需要通过基础知识找到该数值所对应的内存地址,并找到是什么改写了这个内存地址,如下图所示;

按一下打我按钮,会出现一行汇编代代码004278C3 - 83 AB A4040000 01 - sub dword ptr [ebx+000004A4],01 <<

这条汇编指令的作用是将[ebx+000004A4]地址中的数据减1,sub指令是一条减法指令。它可以用来减去两个操作数中的第二个操作数(源操作数)的值,然后将结果存储到第一个操作数(目的操作数)中。sub指令通常用于数学运算和内存操作。

sub指令的语法如下:

sub destination, source

其中,destination是目的操作数,source是源操作数。两个操作数可以是立即数、寄存器或内存位置。

例如,以下代码将执行一个减法操作:

mov eax, 10  ; 加载10到寄存器eax中
sub eax, 5 ; 从eax中减去5,结果为5

在这个例子中,指令mov用于加载数字10到寄存器eax中,然后指令sub用于从eax中减去数字5。结果将存储回eax寄存器中,所以最终eax的值为5。除了sub指令,还有其他的减法指令,如sbb和dec指令。sbb指令用于减去两个操作数和进位标志位(CF)的和,而dec指令用于将一个操作数减去1。

此时我们打开详细信息列表,会看到如下图所示的数据,其中EBX=01A4A3C8EBX+4A4则正好等于‭1A4A86C‬也就是动态的内存地址。

读者可通过点击显示反汇编程序来到反汇编位置处,如下图所示;

根据题目要求,将减法改为加法,每次数据变为增加而不是减少,打开”自动汇编窗口”( 菜单 -> 工具 -> 自动汇编 或 按下快捷键 Ctrl+A ),选择 “模板” 中的 “代码注入”。CE 将自动生成一部分汇编代码并为你输入指令做好准备(如果 CE 没有给出正确的地址,你也可以手工输入它)。

根据题目要求,需要将减法每次减少1改为每次增加2,此时可直接add dword ptr [ebx+000004A4],03增加一个3,点击执行按钮分配作弊代码;

至此当用户再次尝试点击打我是,则每次会增加2点,该功能就这样被实现了。