咱今天比较闲,所以来误人子弟啦~
来讲一讲如何用Cheat Engine与OllyDBG来修改简单的小游戏~
当然,这是只最初级的修改(露米娅比较笨qwq),不过,这也意味着非常地简单易学~
今天露米娅下载了一个反潜小游戏(WinDepth)来怀旧一下~
当年玩到这个游戏的时候,咱还在上幼儿园……系统是win98,ghost系统自带一个十个小游戏的合集,其中就有这个潜艇的小游戏。不过版本可能不同,因为我记得那个游戏中的奖励潜艇是金色的,而这个WinDepth中的奖励潜艇是绿色圆形的。不过游戏的模式还是一样的,空格扔深水炸弹,左右移动。敌人(潜艇)的图像与攻击模式也是一样的。
一顿操作之后……
玩得还不如当年呢……
所以咱就打开了罪恶的工具Cheat Engine……首先在CE中打开游戏进程。
首先自然是要逆天改命,开始游戏,用First Scan 搜索4(初始的生命值)。
故意死掉一次,再用Next Scan 搜索3。
这样就直接搜索到生命值的地址啦,双击添加到列表中~大家可以直接修改内存,改成更大的值。不过,咱的目标不仅仅是这样~咱想要修改游戏~所以要用到调试器~
大家可以用CE自带的调试器来修改,不过咱还是喜欢用OllyDBG来处理~
在OD中打开程序,F9运行,正常开始游戏。
然后,在数据窗口中ctrl+g转到0012E9BC(这是我们刚刚搜到的内存的地址)。
看到0012E9BC这个地址了嘛~在这里下一个内存断点(右键->断点->内存写入)
然后F9继续运行游戏,再死掉一次,就会发现断点触发,程序暂停了。
看指令窗口,我们抓到了写入的指令~相信学过汇编的诸君都知道要怎么做了吧~
什么,没学过汇编……那咱就解释一下这些汇编指令~
地址为00402F00的指令是将内存移动到寄存器eax中
地址为00402F10的指令将eax减1
地址为00402F17的指令将减1后的值放回内存
也就是说,这三条指令完成了将生命-1的效果。
双击dec eax,改成inc eax(将eax加1)
之后删除内存断点(在0012E9BC上右键->断点->删除内存断点),F9继续程序~
再一次死掉之后,我们可以看到,生命值+1啦~
接下来,我们要保存成果。
在OD中右键->复制到可执行文件->所有修改,然后在新出现的窗口中右键->保存文件
我们就得到一个死了之后生命+1的版本啦~之后用这个保存的来玩就容易多啦~是不是很开心呢~
不过,有没有其它的方法呢?
刚才,我们已经得到了内存地址,那么,我们可以写一个C语言程序。
这个程序会通过窗口得到窗口的句柄,然后通过窗口句柄得到进程的PID,然后将进程的对应内存地址修改成99999。
为什么窗口名是WinDepth (Sleep)?因为这个游戏在窗口失去焦点之后,就会自动暂停,同时窗口名也会变成WinDepth (Sleep)这样(真是贴心的设计^^)。
编译之后,先开始游戏,然后运行程序,就会看到……
生命变成99999啦~
用类似的方法,我们还可以修改关卡来达到跳关的效果,修改BOSS的初始血量来让BOSS更容易击败(搜索的方式不太一样,一开始要模糊搜索),大家可以去尝试~