CE修改器入门:运用代码注入

简介: 从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一。在第6关的时候我们说到指针的找法,用基址定位动态地址。但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大。

从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一。在第6关的时候我们说到指针的找法,用基址定位动态地址。但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大。

代码注入是将一小段你写出的代码注入到目标进程中并执行它的技巧。在这一步教程中,你将有一个健康值和一个每按一次将减少 1 点健康值的按钮,你的任务是利用"代码注入",使每按一次按钮增加2点的健康值。

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

教程中每按一次按钮,会自动减少1点血,你的任务是将其改成每按一次按钮增加2点血。
还记得第5关的不伤血的修改方法吗?这一关就是第5关的加强版。
推荐你从原代码中删除减少健康值的那行代码,否则你得加 3 点健康值。

老样子,根据动态数据反复查找,查找血量的地址,然后再地址上 右键=> 查找写入的地址,为啥不是查找访问的地址呢?这里不需要明白,照着做就可以了

image.png

然后按一下打我按钮,会出现一行汇编代码 0042585D - 83 AB 78040000 01 - sub dword ptr [ebx+00000478],01 <<

这条指令的作用是,将[ebx+678]地址中的数据减1,sub为减法的汇编格式。

image.png

双击那行代码,看下详细信息:

image.png

这行代码什么意思呢?sub 大家都知道是减少的意思

图示红框处:EBX=0184D5E0,我们用计算器算一下(注意是16进制的)

image.png

184D5E0+ 478 = 184DA58 ---> 正好是血量的动态地址

sub [ebx+00000478] = sub [184DA58] 够清楚了吧,这就是让血量减1的代码(1省略了),其实CE中也有提示 Decrement by 1 。

明白了这行代码的意思,我们回去看看Tutorial的要求:把减1改成加2。

继续操作。选择反汇编程序,如下步骤

image.png

点击工具,选择自动汇编

image.png

第一步:选择CT表框架代码

image.png

第二步:选择代码注入

image.png

对应的地址不要搞错了,是"Tutorial-i386.exe"+2585D,这里不需要动,保持默认就可以

image.png

然后按确定,会自动生成汇编代码,这些代码是什么意思,我们不用管,找到关键的一行:sub dword ptr [ebx+00000478],01

image.png

将原来的sub dword ptr [ebx+00000478],01,改成 add dword ptr [ebx+00000478],02,每次递增2

image.png

然后在地址栏就可以看到这个脚本了,点击前面的 单选框 执行,然后点击Tutorial中的打我,这关就可以过了。

image.png

你感觉到他的神奇了吗?逆天级的修改:

1、怪物每次打我从伤血变成加血。
2、子弹越打越多。
3、钱越花越多。

如果你学会了这一关,你已经脱离菜鸟的行列了,已经可以对付绝大部分的游戏了。

相关文章
|
6月前
|
程序员 C++ 索引
在C++语言中Vector的命名空间的作用
在C++语言中Vector的命名空间的作用
49 0
|
2月前
|
C++
C++(十九)new/delete 重载
本文介绍了C++中`operator new/delete`重载的使用方法,并通过示例代码展示了如何自定义内存分配与释放的行为。重载`new`和`delete`可以实现内存的精细控制,而`new[]`和`delete[]`则用于处理数组的内存管理。不当使用可能导致内存泄漏或错误释放。
|
6月前
|
Java
Java【代码分享 11】yaml配置List和Map参数对象的配置信息及类文件实例分享(效仿GatewayDynamic+DynamicDataSource的注入方法)
Java【代码分享 11】yaml配置List和Map参数对象的配置信息及类文件实例分享(效仿GatewayDynamic+DynamicDataSource的注入方法)
257 0
|
6月前
|
XML Java 数据格式
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
69 0
|
JSON Java 数据库
代码重构实战-将值对象改为引用对象(Change Value to Reference)
一个数据结构中可能包含多个记录,而这些记录都关联到同一个逻辑数据结构。例如,我可能会读取一系列订单数据,其中有多条订单属于同一个顾客。遇到这样的共享关系,既能将顾客信息作为值对象看待,也能将其视为引用对象
102 0
|
存储 数据安全/隐私保护
CE修改器入门:代码替换功能
某些游戏重新开始时,数据会存储在与上次不同的地方, 甚至游戏的过程中数据的存储位置也会变动。在这种情况下,你还是可以简单几步搞定它。这次我将尽量阐述如何运用"代码替换"功能,第五关的数值每次启动教程的时候都会存放在内存不同的位置,所以地址列表中的固定地址是不起作用的。
411 0
CE修改器入门:代码替换功能
|
存储 C语言 数据安全/隐私保护
CE修改器入门:查找共享代码
本关我们将学习共享代码,在C语言中角色属性都是以结构体的方式进行存储的,而结构体所存储的信息都是连续性的,这一关我们将会解释如何处理游戏中的共用代码,这种代码是通用在除了自己以外的其他同类型对像上的 常常你在修改游戏的时候, 你找到了一个单位的健康值 或是你自己角色的生命值, 你会发现一种情况: 如果你把生命值相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了,这就是共享代码搞的鬼。
438 0
CE修改器入门:查找共享代码
|
数据安全/隐私保护
CE修改器入门:未知数值扫描
经过第二关的练习,你已经理解了如何利用"精确数值"扫描查找数值了,让我们进行下一步,本关主要用来搜索进度条,人物血条等,因为这些数据通常是一个进度条,我们无法直接看到的数据,此时可以通过变更的数据一步步筛选找到动态地址。
384 0
CE修改器入门:未知数值扫描
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
160 0
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )