美文网首页
逆向分析之植物大战僵尸之修改反汇编代码达到修改运行逻辑

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

作者: 那个晓文 | 来源:发表于2019-11-18 09:33 被阅读0次

    0x01 使游戏失去暂停功能

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

    image

    使用OD 点击E模块,再次选中exe的路径,双击(因为此进程会用到动态链接库,加载许多系统资源)。

    image

    找到游戏暂时的提示信息,我这里用 “游戏暂停” 关建字为准,在OD中,右击->中文搜索引擎->智能搜索->Ctrl+F进行搜索:游戏暂停 关建字。

    image

    双击进入对应的汇编代码段。使用一下Ctrl+A进行自动分析。

    image

    分析函数内的汇编代码,发现触发 停止 时会执行 push ebp代码,进入函数内,继续分析 。

    image

    汇编 retn为退出函数。

    image

    直接把 push ebp修改成-> retn ,尝试跳过函数。

    image

    成功破解 游戏暂停 功能。

    image

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

    首先使用CheatEngine找到阳光的内存地址。

    image

    然后右击附加调试器,找出是什么改写了这个地址,再返回游戏,种植一个植物,找到有变动的次数汇编,这个就是减少阳光的汇编代码了,记录其执行的内存地址。

    image

    使用OD附加游戏进程(你也可以直接用CE,我比较习惯OD),按住Ctrl+G搜索内存地址,找到减少阳光的代码语句。

    image

    由于这一行的内存地址是不够写新的语句的,可能会导致程序溢出,所以我使用补码的方式进行修改。使用Ctrl+B,在HEX+50框中输入“00 00 00 00 00 00 00 00 ”。。。。 找到内存中没有使用并为空的地址块。

    image

    在找到多个内存地址后,双击一个地址,这里可以写上新汇编代码 “add dword ptr ds:[edi+0x5560(偏移地址)],0x64″。并复制当前代码的内存地址。

    image

    把原先 减少阳光的汇编代码修改成 ”jmp 00651750“,让其跳转到新的汇编代码内存地址行。

    image

    在内存地址:00651750的下一行,再加一句 “jmp 0041BAAB”,让其跳转到减少阳光的汇编代码的下一行。

    image

    这时回到游戏中,运行游戏,随便种植植物时会发现越种阳光反而越多了,阳光破解成功。

    image

    0x03 取消植物冷却时间

    首先使用CheatEngine随便找到一个植物的冷却时间内存地址代码行。

    image

    使用OD附加游戏进程(你也可以直接用CE,我比较习惯OD),按住Ctrl+G搜索内存地址,找到冷却时间内存地址代码语句。

    image

    按下F2,下断点,运行游戏,动态调试分析这段汇编的执行逻辑顺序。

    通过下断点分析得知,在植物冷却时间减少时,会多次向 edi+24(偏移地址)寄存器中的地址数加了一个0x01。

    image image

    然后会把edi+2(偏移地址)赋值给eax寄存器,再使用cmp指令比较eax的值与edi+0x28(偏移地址),比较后EFL位中的CF,ZF,OF,AF,PF会受到影响。

    image

    比较完后,再来决定Jil指令是否跳转,调试后发现,中间一段代码为置初始化块。

    image

    所以把这行指令”add dword ptr [edi+24],01″修改成”jmp jmp short 004875E3″。

    image

    这里,回到游戏中,就发现各种植物种植的冷却时间已经没有了,游戏破解成功。

    image

    相关文章

      网友评论

          本文标题:逆向分析之植物大战僵尸之修改反汇编代码达到修改运行逻辑

          本文链接:https://www.haomeiwen.com/subject/mbfyictx.html