天道酬勤 发表于 2025-1-3 06:00:16

CE修改器入门:查找共享代码

本关我们将学习共享代码,在C语言中角色属性都是以结构体的方式进行存储的,而结构体所存储的信息都是连续性的,这一关我们将会解释如何处理游戏中的共用代码,这种代码是通用在除了自己以外的其他同类型对像上的
常常你在修改游戏的时候, 你找到了一个单位的健康值 或是你自己角色的生命值, 你会发现一种情况: 如果你把生命值相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了,这就是共享代码搞的鬼。

> 步骤 9: 注入++: (密码=31337157)
>
> 本关模拟一种游戏,其中左边为我方,而右边为敌人,当我们点击重新启动并自动执行的时候我方血量不足会死亡。
> 你的任务是找到改写健康的代码, 并且修改以至于你可以获得胜利,但"绝不能"使用锁定HP的方法。
> 提示:在遍历血量的时候应该使用单浮点数进行搜索。

1.首先你需要根据第一关中的搜索方法,分别将下面四个人物的血量搜索到,下面我已经搜索好并做好了备注。

![](/mdimg/githubPVZCheatImage//1379525-20220718132515615-415347961.png)

2.你可以分别在每个动态地址上面,右键选择`找出是什么改写了这个地址`,会发现这四个地址都指向了同一条汇编代码,这也就说明了其使用了共享代码。

![](/mdimg/githubPVZCheatImage//1379525-20220718132616079-1667348228.png)

3.我们直接在每一个地址上面右键选择`浏览相关内存区域`,然后对比四个地址会发现一些规律。

![](/mdimg/githubPVZCheatImage//1379525-20220718132628324-193059533.png)

我方队友的结构

![](/mdimg/githubPVZCheatImage//1379525-20220718132640633-938618625.png)

![](/mdimg/githubPVZCheatImage//1379525-20220718132652430-534782107.png)

敌人的结构

![](/mdimg/githubPVZCheatImage//1379525-20220718132704923-461455345.png)

![](/mdimg/githubPVZCheatImage//1379525-20220718132714472-1797843114.png)

上方的四个图片可看出我方队友编号为1而敌人的编号为2,我们可以通过编号来判断是否为敌人,来决定要不要让其掉血。
当然也可以判断名字的开头字母来决定,如果是D或E开头,则说明是队友不能让其掉血,否则的话则直接执行扣血代码。

4.接下来我们要注入代码了,CE切换到内存浏览窗口,然后选择`工具 -> 自动汇编`,`模板 -> 代码注入`点击确定。

![](/mdimg/githubPVZCheatImage//1379525-20220718132730518-515388846.png)

上方原始代码是 mov ,eax,意思就是,血量处于 ebx+04 的位置。

5.为了能够遍历到状态位,我们需要计算出队伍编号和血量的偏移值,

观察下图发现 Dave 血量地址是 019E0794 和队伍编号地址 019E07A0,两者十六进制相减(019E07A0 - 019E0794 = 0C)得到0C,如果血量是 ebx+04,那么队伍编号就应该是 ebx+04+0C 就是 ebx+10。

![](/mdimg/githubPVZCheatImage//1379525-20220718132743385-1654791738.png)

6.直接写以下汇编代码,然后执行,注入完成后回到练习程序中然后点击`重新启动游戏并自动执行`,本关会顺利通过。

![](/mdimg/githubPVZCheatImage//1379525-20220718132801086-1550305405.png)
页: [1]
查看完整版本: CE修改器入门:查找共享代码