游戏安全实验室-游戏逆向-游戏辅助开发

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1632|回复: 1

实现自动收集阳光

[复制链接]
匿名  发表于 2023-9-6 21:28:20 |阅读模式


    1.首先我们找出阳光的动态地址,找到之后我们双击这个地址,将其加入到地址列表中,阳光的查找技巧相信你已经能够掌握了,这里就不再罗嗦了。

                               
登录/注册后可看大图

2.接着我们选择最下方的地址列表,然后按下`F6键`,也就是下一个硬件写入断点,然后回到游戏等待阳光出现并点击阳光,此时CE会出现以下代码,我们只需要记下`00430A11`这个内存地址,然后直接关闭CE吧,短期内用不到了。

                               
登录/注册后可看大图

3.打开OD,然后我们直接附加植物大战僵尸的游戏进程,点击`文件`然后点击`附加`选择植物大战僵尸进程就好。

                               
登录/注册后可看大图

4.附加完成后,我们的游戏会被OD暂停运行,此时我们直接按下`F12`让游戏正常的运行,默认情况下会停在系统领空,我们直接按下`Ctrl + G`输入`00401000`来到程序领空。

                               
登录/注册后可看大图

5.接着我们按下`Ctrl + G`输入`00430A11`跳转到刚才找到的代码位置,过去以后直接`F2`下一个断点

                               
登录/注册后可看大图

6.紧接着我们回到游戏,然后等待阳光的出现,当阳光出现后我们点击阳光,OD会自动断在00430A11的位置,其中ecx就是要增加的阳光数。

                               
登录/注册后可看大图

上图并没有CALL调用,应该是在外部,我们直接回朔到上一层`Ctrl+F9`执行到返回,`F8`直接出CALL.
7.我们在JNZ和CALL的两处位置下断点,然后运行程序,当我们点击阳光时会断在JNZ的位置,如果把JNZ用NOP填充的话,会发现当我们再次点击阳光的时候阳光会迅速的被回收没有了动画。
也就是说,JNZ如果成立的话则会有回收阳光的动画,当不成立的时候则会执行`call 004309d0`显然这就是回收阳光的关键CALL,但我们可猜测,再回收阳光的时候一定会判断是否回收,所以回收的判断应该在上一层。

                               
登录/注册后可看大图

8.首先我们回到游戏,等待出现阳光然后点击阳光,OD会断下,断下后我们取消这两处的断点,然后跟着OD单步`F8`向下走,直接出这个CALL,出CALL后会看到如下代码,我们直接下三个断点。

                               
登录/注册后可看大图

9.下好断点,回到游戏等待阳光下落我们回收,此时OD会断下,我们运行OD发现会一直被断在`0043158F`只要阳光没有收回就会一直断下,此处的跳转并没有实现,因为我们没有去点击阳光,这里可以得出如果点击了阳光JNZ则会跳转成立,否则不成立等待用户点击回收阳光。

                               
登录/注册后可看大图

10.我们取消所有的断点,然后尝试把JNZ跳转改成JMP无条件跳转,让其只要一出现阳光就自动的触发回收的CALL试试。

                               
登录/注册后可看大图

改完以后我们回到游戏,会发现只要阳光出现了会被立即回收。

                               
登录/注册后可看大图


回复

使用道具

0

主题

23

回帖

52

积分

注册会员

积分
52
发表于 2024-7-24 00:07:39 | 显示全部楼层
感谢分享,提供了很好的思路
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|游戏安全实验室

GMT+8, 2024-11-21 17:45 , Processed in 0.054125 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表