目的是将鼠标移出游戏窗口后,游戏不会暂停⏸️
/
相关样本信息
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!
修改思路💓
有两个思路:
- 搜索”游戏暂停” 相关字符串进行定位。
- 通过反复操作,搜索内存数据 “是否暂停” 的真和假进行操作。
实战
通过字符串实现
运行程序后,通过
x32dbg
进行附加,到符号窗口找到PlantsVsZombies.exe
主程序模块双击。虽然我的是中文修改版,但是内存中的数据还是英文原版的。🔍搜索
PAUSE
暂停双击过去后来到
00472C23
地址。F2
添加断点,重复一次暂停游戏的操作,断点就生效停止在00472C23
地址。这时候可以通过堆栈窗口或者
EBP
进制追踪进行调用。这里选择跟着EBP
,值是0019FBBC
右键在堆栈中转到双击
0019FBBC
的上一个调用堆栈,也就是+4
字节0019FBC0
地址双击过来之后,到上一个
call
的位置F2
,重复游戏里的暂停操作,断点成功暂停在此处。发现上面有个条件判断,尝试将
je
改成jne
发现修改成功
坑点
可能是我的版本有问题,我修改之后补丁成
exe
文件✅运行会报错:可以看到提示的
EDX
、ESI
、EDI
地址都是0
这里再次尝试用另一方式修改,把暂停
call
直接返回了。回车进入暂停函数,翻找到
ret
看看返回了什么回到
call
开头,直接把push ebp
修改成ret 0x4
重新修补后发现可以成功运行了。
通过真假实现
修改需要用到CE,并且要设置下次精确搜索🔍的快捷键
假设判断逻辑为🖱️鼠标是否在外面活动? 暂停窗口是否弹出? 是否为暂停状态?,那么只需要我们一直搜索
1
和0
就一定可以找到。我们按照第三个逻辑进行搜索,当暂停时候搜索
1
,正常运行时候搜索0
,由于搜索需要出去点击CE
,所以我们需要提前修改热键。首先让窗口暂停,然后搜索
1
然后别回到游戏,先将
1
修改为0
,回到游戏后再按f10
(下次搜索🔍快捷键),一直重复几次,最后会得到十几个数值。来回返回游戏观察一下数值信息,挨个尝试,最后得到了1C41B66C
只要把数值一直锁定为
0
,就算弹出了游戏暂停,僵尸还是在活动的。