CE修改器第8/9关记录

CE教程第8/9关记录

第8关:密码525927

1.找到给定数值的地址。

image

地址为0x18d4440

2.右键点击改写该地址

image

可以看见只有一条指令。并且也推荐了一个指针,恰好也是esi寄存器的值。0x18d4428

3.新的16进制扫描刚才esi的值。

image

把这唯一的一条添加到地址(如果不唯一,就需要采取其它方式过滤一下)

得到指针0x1863300,继续扫描看看。

image

把这唯一的一条添加到地址(如果不唯一,就需要采取其它方式过滤一下)

得到指针0x18d411c,继续扫描看看

哦吼,搜不到了。这个时候只能继续用调试器了。但是因为没有改变这个值,就只能通过访问的方式。

image

然后点击改变数值。

调试器如下:

image

cmp不是移位指令,不用管。直接看下面这条。

需要注意的是,我们并不能总是看指令里面包含的寄存器,而应该看看CE推荐的指针地址。

这里是0x18d4108,我们继续搜索。

image

把这唯一的一条添加到地址(如果不唯一,就需要采取其它方式过滤一下)

得到指针0x186342c,继续扫描看看。

还是找不到,只能继续调试了。

数一数,已经三级偏移了。

*(*(*(*186342c+14)+0)+18) = 2556

题目说是四级,这个时候,就利用改变指针的条件了。

使用改变该地址的调试器。

image

哦吼,直接炸裂,归0了。

从头开始走一遍,到这里,选择访问调试器。

后面地址变了。但是寄存器偏移,指令是类似的。

image

把推荐的指针拿来搜索。0x18fb120。
image

终于找到了绿色的地址。把它拉下去,就齐活了。

image

接下来,就是如何从6426e0到267的工作了。

*(*(*(*(*6426e0+c)+14)+0)+18) = 267

image

用C语言的方式,描述一下,就好理解了。

添加以后,空格锁定,这个时候再点击改变指针,就能顺利通关了。

第9关:密码31337157

感觉还稍微容易一点。

因为题目说明了是共享代码,当然也可以自己通过调试寄存器看看代码逻辑。

这种共用代码的。很像C++里面,同一个类的对象,然后修改血量,只是对类的对象的属性进行修改。

我们找kitt的,攻击一下,反汇编看看。

image

kitt的地址是0a92d04c,而ebx是0a92d048,正好也是CE推荐的指针地址。

并且,这个地址和kitt的地址很接近了。恰好就是ebx+4.

也就是说执行这条语句的时候,eax代表剩余血量。我们只要注入代码改一下。

比如在 mov [ebx+04],eax前面,对eax动下手脚。

我们发现我们满血才100,敌人满血又超过100,所以可以靠血量区分

if(eax>100)
{
	eax = 0
}
mov [ebx+04],eax
起到类似的效果就好了
当然了,这里恰好能行,但是万一执行的时候敌人剩余血量少于100,就不能秒杀了。
所以还可以看看其他方法。

通用方法:这是一个C++类,而这又是一个分阵营的对象,那个这个类里面一定有区分阵营的数据存在。

image

可以依次浏览4人的内存区域。

image

可以比较轻松的发现,每个人血量后+C可以明显分出是敌是友。

为1就是友军,为2就是敌军。

也就是反汇编代码,ebx+10的位置。

我们找个角色,进行改写地址调试。

然后自动汇编。

image

cmp [ebx+10],2
jne originalcode  //不是2,就是友军,正常扣血吧
mov eax,0 //是敌军,直接秒杀

只需要加入这3行代码,然后执行就好了。

执行以后,点击重启游戏并自动执行

image

敌人直接GG,点击下一步,也就顺利毕业了。

posted @ 2022-04-12 00:28  念秋  阅读(584)  评论(0编辑  收藏  举报