登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 244|回复: 0

游戏逆向初探04.自动拾取

[复制链接]

71

主题

1

回帖

146

积分

管理员

积分
146
发表于 2024-12-3 21:00:26 | 显示全部楼层 |阅读模式
思路:阳光掉落我们拾取或者不拾取应该有个状态,而且我们拾取阳光的时候也会改变阳光数值,所以我们对存储阳光数值的地址下一个写入断点应该就能找到拾取的call
image-20240505230747460.png
我们下好断点,拾取阳光的时候产生了两句代码,根据代码来看,add...这一句应该就是拾取阳光的时候的代码
PlantsVsZombies.exe+1E6E0:0041E6DE - CC - int 3 0041E6DF - CC - int 3 0041E6E0 - 01 88 78550000  - add [eax+00005578],ecx <<0041E6E6 - 8B 88 78550000  - mov ecx,[eax+00005578]0041E6EC - 83 EC 0C - sub esp,0CEAX=20EC4478EBX=00000001ECX=00000019EDX=D5AF0008ESI=272CA150EDI=20EC4478EBP=0019F9A8ESP=0019F92CEIP=0041E6E6

我们用调试器附加看看0041E6E0这段代码
image-20240505231445710.png
这段代码看起来就是像已经点了阳光,然后调用它来增加阳光,根据对这段代码(add....)下段观察,发现是我点了阳光,需要增加的时候才会断下来,也就是说这仅仅是增加阳光,而不是点击,我们跳转到上面一层看看 image-20240505231636913.png
那会不会这个call上面的几个跳转是跳过阳光拾取的地方呢?假设这几个跳转是用来断点是否点了阳光,如果点了就增加,那么我们在上面几个跳转下断点的话,在有阳光的时候肯定会一直断下来,然后跳过增加阳光 image-20240505231917004.png
可以看到的是,有阳光落下的时候这几个断点并没有断下来,那就说明判断应该还在上一层或者几层,我们再去上一层看一下
image-20240505232013404.png 当我拾取阳光的时候,这一层确实断下来了,现在CTRL+F9运行到返回,然后再F8运行到上一层 image-20240505232126167.png
这一层调用call之前也有个判断,现在判断这里下个断点试试
image-20240505232204482.png 有阳光的时候没有断,因为我的猜测是阳光落下的时候游戏在检测是否点击了,如果点击了就调用增加阳光的call 如果没有点击就跳转,既然它没有断,那就再去上一层看看, image-20240505232321034.png
这一层的call看起来就跟我猜测的有点像了,call之前有个jmp 应该是判断没有被点击就跳过去,点击了就进入增加阳光,我们在jne下个点断试试
image-20240505232443534.png
下了这个断点以后发现,在即将产生阳光的时候和屏幕上有阳光没有拾取的时候这个判断会一直执行,没有阳光的时候这个判断不会执行,那就说明这个判断可能就是判断是否有点击,根据单步发现,如果我不点击阳光的话最终会执行到
image-20240505232552887.png
这一句正好是跳过了我们增加阳光的call 如果我点击了阳光的话,jne这个跳转就跳转到了增加阳光call的调用,我们试试把jne改成jmp 看看能不能自动拾取阳光
image-20240505232708722.png 改成jmp后确实阳光一产生就自动拾取了
所以我们只要写一段代码,将植物大战僵尸进程地址0x004342f2由原来的75 09改成 e8 09(jne改jmp)或者把jne改成je即可实现阳光掉落以后自动拾取

本帖被以下淘专辑推荐:

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

本版积分规则

QQ|小黑屋|断点社区 |网站地图

GMT+8, 2024-12-23 22:10 , Processed in 0.072680 second(s), 30 queries .

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

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