植物大战僵尸之修改反汇编代码达到修改运行逻辑

  • 2019-05-13
  • 0
  • 0

0x001 使游戏失去暂停功能

进入游戏,用OD附加进程。

使用OD 点击E模块,再次选中exe的路径,双击(因为此进程会用到动态链接库,加载许多系统资源)。
找到游戏暂时的提示信息,我这里用 “游戏暂停” 关建字为准,在OD中,右击->中文搜索引擎->智能搜索->Ctrl+F进行搜索:游戏暂停 关建字。
双击进入对应的汇编代码段。使用一下Ctrl+A进行自动分析。
分析函数内的汇编代码,发现触发 停止 时会执行 push ebp代码,进入函数内,继续分析 。
汇编 retn为退出函数。
直接把  push ebp修改成-> retn ,尝试跳过函数。
成功破解  游戏暂停 功能。

0x002 种植植物时,改为增加阳光

首先使用CheatEngine找到阳光的内存地址。
然后右击附加调试器,找出是什么改写了这个地址,再返回游戏,种植一个植物,找到有变动的次数汇编,这个就是减少阳光的汇编代码了,记录其执行的内存地址。
使用OD附加游戏进程(你也可以直接用CE,我比较习惯OD),按住Ctrl+G搜索内存地址,找到减少阳光的代码语句。
由于这一行的内存地址是不够写新的语句的,可能会导致程序溢出,所以我使用补码的方式进行修改。使用Ctrl+B,在HEX+50框中输入“00 00 00 00 00 00 00 00 ”。。。。  找到内存中没有使用并为空的地址块。
在找到多个内存地址后,双击一个地址,这里可以写上新汇编代码  “add  dword ptr ds:[edi+0x5560(偏移地址)],0x64″。并复制当前代码的内存地址。
把原先 减少阳光的汇编代码修改成 ”jmp 00651750“,让其跳转到新的汇编代码内存地址行。
在内存地址:00651750的下一行,再加一句 “jmp 0041BAAB”,让其跳转到减少阳光的汇编代码的下一行。
这时回到游戏中,运行游戏,随便种植植物时会发现越种阳光反而越多了,阳光破解成功。

0x003 取消植物冷却时间

 
首先使用CheatEngine随便找到一个植物的冷却时间内存地址代码行。
使用OD附加游戏进程(你也可以直接用CE,我比较习惯OD),按住Ctrl+G搜索内存地址,找到冷却时间内存地址代码语句。
按下F2,下断点,运行游戏,动态调试分析这段汇编的执行逻辑顺序。
通过下断点分析得知,在植物冷却时间减少时,会多次向 edi+24(偏移地址)寄存器中的地址数加了一个0x01。
然后会把edi+2(偏移地址)赋值给eax寄存器,再使用cmp指令比较eax的值与edi+0x28(偏移地址),比较后EFL位中的CF,ZF,OF,AF,PF会受到影响。
比较完后,再来决定Jil指令是否跳转,调试后发现,中间一段代码为置初始化块。
所以把这行指令”add dword ptr [edi+24],01″修改成”jmp jmp short 004875E3″。
这里,回到游戏中,就发现各种植物种植的冷却时间已经没有了,游戏破解成功。
 

评论

还没有任何评论,你来说两句吧