植物大战僵尸-阳光无限

忽然间产生了对反汇编的兴趣,那么按耐不住自己的内心了,又因自己什么也不会,不会解密,不会脱壳等等……

不过,既然突然有了兴趣,总要干点什么,于是,就拿新手之王的“植物大战僵尸”来作为实验样品吧。

所需工具:

CE

OD

计算器

OK,准备好工具之后,我们就要开始了,

首先打开“植物大战僵尸”,进入游戏,接下来鼠标右键“以管理员身份”打开“CE”并如图所示:

点击左上角的“小电脑”图标

先选择上方的“应用程序”→选择“植物大战僵尸中文版”→“调试器附加到进程”

输入我们当前的阳光数值“50”到如下图的编辑框内

然后我们点击“首次扫描”

之后我们花费一些阳光值(随便栽种一颗植物),然后我们再次在编辑框里输入改变后当前的阳光值“0”→“再次扫描”

不行,搜索的结果还是太多了,我们继续重复,收一个“太阳”然后我们的阳光值变为“25”,之后我们再次在编辑框里输入我们当前的阳光值“25”→“再次扫描”

之后我的只剩下一个结果了(若你们的还有很多结果,请重复上述的方式继续)

我们右键并选择“找出是什么改写了这个地址”

然后会有一个“空白”窗口,我们继续游戏,继续改变一下“阳光值”之后会出现如下图所示:我们先记录一下指令的前八个数值(地址)“00430A11”并选择此行并且点击“显示反汇编程序”

之后会弹出如下窗口:

分析下图语句:

add [eax+00005560],ecx            //意思是 寄存器eax偏移5560之后这个整体加上寄存器ecx,我们可以理解为,此游戏把阳光那个位置当做空格,+上ecx里面的值就是我们的阳光值,向上滑动,我们寻找到ecx的值,

mov ecx,00000019 意思是将“00000019”存放到寄存器ecx中,又计算器得出,”00000019″十六进制转换十进制得,恰好是“25”恰好是我们刚刚收集阳光的数值“25”为了进一步确定该ecx是否存放我们的阳光值,我们不妨下个断点(当程序执行这条语句时,遇见断点程序会卡住不继续运行(暂停)),

我们选择此行,并按下F5下断点,

之后我们回到游戏里,收集一下阳光看看是否成功断下,

如下图,断点成功检测到,说明我们之前所说的,此ecx就是存放单个阳光的阳光值大小,那么我们是不是只要修改了它就能达到瞬间阳光“9999999…”了

之后我们可以关闭CE了(游戏先不要关,其实关不关无所谓),我们鼠标右键“以管理员身份”打开OD,如下图:“文件”→“附加”

找到我们的正在运行的游戏,并点击“附加”

载入之后,我们按“Ctrl+G”并且输入我们之前记录的地址“00430A11”并点击“OK”

之后我们跳转到这里

我们双击此行(我们刚刚跳转的这一行),并且将后面的ecx修改为寄存器里其他有大数值的分区,这里我将ecx换为esp(PS:这里都是十六进制的数值),原来想修改为“esi”不过想了想,算了,用不到那么大的(其实我怕会有什么麻烦),修改之后我们点击“汇编”

之后我们点击“全部复制”

我们来运行一下,看看修改的是否成功,

继续游戏,试一试,采集个太阳看看阳光值如何增加

测试图如下,果然成功了

OK,成功了,我们接下来就要保存我们修改的文件了,

鼠标右键,“复制到可执行文件”→“所有修改”

然后出现此窗口,我们继续右键点击,选择“保存文件”

修改下名字,避免重名,

最后我们运行下这个“PlantsVsZombies-无限阳光.exe”检验下是否真的修改成功了,如下GIF:

下一集预览(植物无敌(原理僵尸为植物加血))GIF:

植物大战僵尸-植物无敌

本文作者为:晗雅|星空,转载请注明!版权必究!
分享到:

请选择你看完该文章的感受:

7瞧一瞧 0扯淡 1学到了 0不懂 1正能量 0无聊

评论抢沙发

评论前必须登录!