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

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

从本关开始,各位会初步接触到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点,该功能就这样被实现了。

目录
相关文章
|
5月前
|
编译器 C# 开发者
C# 10.0中的全局`using`指令:简化命名空间引用的新方式
【1月更文挑战第4天】本文介绍了C# 10.0中引入的全局`using`指令,该指令允许开发者在项目级别统一管理命名空间引用,从而消除源文件中重复的`using`语句。全局`using`指令通过减少冗余代码、提高可维护性和统一命名空间管理,为开发者带来了更高效的编码体验。文章详细解释了如何实现全局`using`指令,并探讨了其在实际项目中的优势和适用场景。
|
4月前
|
Java API Android开发
ASM 框架:字节码操作的常见用法(生成类,修改类,方法插桩,方法注入)
ASM 框架:字节码操作的常见用法(生成类,修改类,方法插桩,方法注入)
76 0
|
5月前
|
JavaScript 前端开发 编译器
TypeScript【可选属性、只读属性、额外的属性检查、函数类型、类类型、继承接口】(四)-全面详解(学习总结---从入门到深化)
TypeScript【可选属性、只读属性、额外的属性检查、函数类型、类类型、继承接口】(四)-全面详解(学习总结---从入门到深化)
60 0
|
11月前
|
存储 监控
2.4 CE修改器:代码替换功能
代码替换功能,需要使用 Cheat Engine 工具的“代码查找”功能,来查找游戏数据存储在内存中的地址。首先找到当前数值的存储地址,并将其添加到下方地址列表中。然后右键单击该地址,并选择“找出是什么改写了这个地址”,将弹出一个空白窗口。接着,点击本教程窗口上的“改变数值”按钮,并返回 Cheat Engine,如果操作没有问题,在空白窗口中将出现一些汇编代码。选中代码并点击“替换”按钮,将其替换为什么也不做的代码(空指令),同时,修改后的代码也将放置在“高级选项”的代码列表中保存。点击“停止”,游戏将以正常方式继续运行,关闭窗口。现在,再次点击教程窗口上的“改变数值”,如果锁定速度足够快,
184 0
2.4 CE修改器:代码替换功能
|
11月前
2.2 CE修改器:未知数值扫描
本关需要扫描未知数只扫描,要在不知道初始值的情况下找到一个在0到500之间的数值。首先,选择“未知的初始值”扫描方式,在数值类型中选择 4 字节,并点击“首次扫描”以开始扫描。扫描结束后,点击“打我”按钮进行一些操作,回到 Cheat Engine,选择“减少的数值”作为扫描类型,点击“再次扫描”并重复操作直到检索出很少的几个地址。由于该数值在0到500之间,可以挑出最为相似地址,并将其加入到下方的地址列表。接着,将健康值更改为 5000 以便进入下一关。需要记住的重点是,在开始新的扫描之前,务必要先点击“新的扫描”按钮。
88 0
2.2 CE修改器:未知数值扫描
|
5月前
|
XML Java 数据格式
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
64 0
|
11月前
|
存储 C语言 开发者
2.8 CE修改器:寻找共享代码
本关我们将学习共享代码,在C语言中角色属性都是以结构体的方式进行存储的,而结构体所存储的信息都是连续性的,这一关我们将会解释如何处理游戏中的共用代码,这种代码是通用在除了自己以外的其他同类型对像上的常常你在修改游戏的时候,你找到了一个单位的健康值或是你自己角色的生命值,你会发现一种情况,如果你把生命值相关代码移除的话,其结果是你的角色无敌,但你的敌人也无敌了,这就是共享代码的问题。
53 0
|
数据安全/隐私保护
CE修改器入门:运用代码注入
从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一。在第6关的时候我们说到指针的找法,用基址定位动态地址。但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大。
397 0
CE修改器入门:运用代码注入
|
存储 数据安全/隐私保护
CE修改器入门:代码替换功能
某些游戏重新开始时,数据会存储在与上次不同的地方, 甚至游戏的过程中数据的存储位置也会变动。在这种情况下,你还是可以简单几步搞定它。这次我将尽量阐述如何运用"代码替换"功能,第五关的数值每次启动教程的时候都会存放在内存不同的位置,所以地址列表中的固定地址是不起作用的。
389 0
CE修改器入门:代码替换功能
|
存储 C语言 数据安全/隐私保护
CE修改器入门:查找共享代码
本关我们将学习共享代码,在C语言中角色属性都是以结构体的方式进行存储的,而结构体所存储的信息都是连续性的,这一关我们将会解释如何处理游戏中的共用代码,这种代码是通用在除了自己以外的其他同类型对像上的 常常你在修改游戏的时候, 你找到了一个单位的健康值 或是你自己角色的生命值, 你会发现一种情况: 如果你把生命值相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了,这就是共享代码搞的鬼。
422 0
CE修改器入门:查找共享代码