谢谢各位的支持,祝论坛越办越好!!!
ggsuper
2018.1.10
一、实验目的
效果图如下:
二、思路
找出游戏中拾取物品call,通过改变程序执行流程不断调用拾取物品call。以拾取阳光为例,当单击掉落阳光时,阳光被拾取,同时阳光收集数量增加。
那么游戏可能执行流程为:单击阳光—>拾取物品call—>增加阳光数量call。据此,先找出阳光数量地址,逆推找出拾取物品call。
三、实现
注:由于之前的植物大战僵尸2010年度版在游戏里取得某一个成就后莫名其妙的崩溃了,我换了个英文版的。
开始,先找出阳光数量地址(过程略)。
OD中数据窗口跟随阳光地址19207FB0,并下硬件写入断点,F9运行,拾取掉落阳光后,断下,取消硬件断点,代码清单如下。
0041E6E0 0188 78550000 add dword ptr [eax+5578], ecx ; 增加阳光
0041E6E6 8B88 78550000 mov ecx, dword ptr [eax+5578]
OD中 Alt+k 显示调用堆栈。如下:
004336EA处调用为增加阳光call。00434188处call为增加阳光call上层call,可能为拾取物品call,同理,004342FF,00415B04均可能为拾取物品call。
先在00434188处下断,回到游戏捡个阳光,断在00434188处。如下:
00434184 /75 07 jnz short 0043418D
00434186 |8BC6 mov eax, esi
00434188 |E8 33F5FFFF call 004336C0
说明此call跟拾取阳光有关,此call无参数,直接NOP掉,回到游戏,捡个阳光,发现阳光可以捡起,但阳光数据不再增加。此处不是拾取物品call。
然后改为在
004342FF处下断,回游戏捡阳光,断下,代码如下。
004342EE 807B 50 00 cmp byte ptr [ebx+50], 0
004342F2 75 09 jnz short 004342FD ; 捡物品关键跳转,取反后自动捡物品
004342F4 8BFB mov edi, ebx
004342F6 E8 55F5FFFF call 00433850
004342FB EB 07 jmp short 00434304
004342FD 8BCB mov ecx, ebx
004342FF E8 CCF8FFFF call 00433BD0 ; 捡物品call
此处call无参数,NOP掉,回到游戏,发现已经捡不起阳光了,此处call应该为拾取物品call。向上看, 此call由004342F2处跳转过来执行,将跳转语句取反,回到游戏后发现已经可以自动拾取阳光,经测试,所有掉落物品均可自动拾取。
谢谢各位的支持,祝论坛越办越好!!!
ggsuper
2018.1.10
效果图如下:
找出游戏中拾取物品call,通过改变程序执行流程不断调用拾取物品call。以拾取阳光为例,当单击掉落阳光时,阳光被拾取,同时阳光收集数量增加。
那么游戏可能执行流程为:单击阳光—>拾取物品call—>增加阳光数量call。据此,先找出阳光数量地址,逆推找出拾取物品call。
注:由于之前的植物大战僵尸2010年度版在游戏里取得某一个成就后莫名其妙的崩溃了,我换了个英文版的。
开始,先找出阳光数量地址(过程略)。
OD中数据窗口跟随阳光地址19207FB0,并下硬件写入断点,F9运行,拾取掉落阳光后,断下,取消硬件断点,代码清单如下。
0041E6E0 0188 78550000 add dword ptr [eax+5578], ecx ; 增加阳光
0041E6E6 8B88 78550000 mov ecx, dword ptr [eax+5578]
OD中 Alt+k 显示调用堆栈。如下:
004336EA处调用为增加阳光call。00434188处call为增加阳光call上层call,可能为拾取物品call,同理,004342FF,00415B04均可能为拾取物品call。
先在00434188处下断,回到游戏捡个阳光,断在00434188处。如下:
00434184 /75 07 jnz short 0043418D
00434186 |8BC6 mov eax, esi
00434188 |E8 33F5FFFF call 004336C0
说明此call跟拾取阳光有关,此call无参数,直接NOP掉,回到游戏,捡个阳光,发现阳光可以捡起,但阳光数据不再增加。此处不是拾取物品call。
然后改为在
004342FF处下断,回游戏捡阳光,断下,代码如下。
004342EE 807B 50 00 cmp byte ptr [ebx+50], 0
004342F2 75 09 jnz short 004342FD ; 捡物品关键跳转,取反后自动捡物品
004342F4 8BFB mov edi, ebx
004342F6 E8 55F5FFFF call 00433850
004342FB EB 07 jmp short 00434304
004342FD 8BCB mov ecx, ebx
004342FF E8 CCF8FFFF call 00433BD0 ; 捡物品call
此处call无参数,NOP掉,回到游戏,发现已经捡不起阳光了,此处call应该为拾取物品call。向上看, 此call由004342F2处跳转过来执行,将跳转语句取反,回到游戏后发现已经可以自动拾取阳光,经测试,所有掉落物品均可自动拾取。
谢谢各位的支持,祝论坛越办越好!!!
ggsuper
2018.1.10
0041E6E0 0188 78550000 add dword ptr [eax+5578], ecx ; 增加阳光
0041E6E6 8B88 78550000 mov ecx, dword ptr [eax+5578]
OD中 Alt+k 显示调用堆栈。如下:
004336EA处调用为增加阳光call。00434188处call为增加阳光call上层call,可能为拾取物品call,同理,004342FF,00415B04均可能为拾取物品call。
先在00434188处下断,回到游戏捡个阳光,断在00434188处。如下:
00434184 /75 07 jnz short 0043418D
00434186 |8BC6 mov eax, esi
00434188 |E8 33F5FFFF call 004336C0
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)