植物大战僵尸逆向-1. 后台运行不暂停
🧟‍♂️

植物大战僵尸逆向-1. 后台运行不暂停

💡
目的是将鼠标移出游戏窗口后,游戏不会暂停⏸️
/

相关样本信息

notion image
Version 1.1.0.1056 --- Release Date: May 5, 2009 --- BUILD_DATE --- Developed and published by PopCap Games, Inc. () --- Thanks for downloading Plants vs. Zombies. We hope you enjoy the game!
 

修改思路💓

有两个思路:
  • 搜索”游戏暂停” 相关字符串进行定位。
  • 通过反复操作,搜索内存数据 “是否暂停” 的真和假进行操作。
notion image
 

实战

通过字符串实现

运行程序后,通过x32dbg进行附加,到符号窗口找到PlantsVsZombies.exe 主程序模块双击。
notion image
虽然我的是中文修改版,但是内存中的数据还是英文原版的。🔍搜索PAUSE 暂停
notion image
 
双击过去后来到00472C23 地址。F2 添加断点,重复一次暂停游戏的操作,断点就生效停止在00472C23 地址。
notion image
 
这时候可以通过堆栈窗口或者EBP进制追踪进行调用。这里选择跟着EBP ,值是0019FBBC 右键在堆栈中转到
notion image
双击0019FBBC 的上一个调用堆栈,也就是+4字节0019FBC0 地址
notion image
 
双击过来之后,到上一个call的位置F2,重复游戏里的暂停操作,断点成功暂停在此处。
notion image
发现上面有个条件判断,尝试将je改成jne
notion image
发现修改成功
 

坑点

可能是我的版本有问题,我修改之后补丁成exe文件✅运行会报错:
notion image
可以看到提示的EDXESIEDI地址都是0
这里再次尝试用另一方式修改,把暂停call直接返回了。
notion image
回车进入暂停函数,翻找到ret看看返回了什么
notion image
回到call开头,直接把push ebp修改成ret 0x4
notion image
重新修补后发现可以成功运行了。
 
 

通过真假实现

修改需要用到CE,并且要设置下次精确搜索🔍的快捷键
notion image
假设判断逻辑为🖱️鼠标是否在外面活动? 暂停窗口是否弹出? 是否为暂停状态?,那么只需要我们一直搜索10就一定可以找到。
我们按照第三个逻辑进行搜索,当暂停时候搜索1 ,正常运行时候搜索0 ,由于搜索需要出去点击CE,所以我们需要提前修改热键。
 
首先让窗口暂停,然后搜索1
notion image
然后别回到游戏,先将1修改为0,回到游戏后再按f10(下次搜索🔍快捷键),一直重复几次,最后会得到十几个数值。来回返回游戏观察一下数值信息,挨个尝试,最后得到了1C41B66C
notion image
只要把数值一直锁定为0,就算弹出了游戏暂停,僵尸还是在活动的。
notion image