001遍历背包 MOMRPG

委员长 · · 游戏安全/游戏逆向
1 0 0

本文共计279个字,预计阅读时长1.1分钟。

思路:可以通过比较直观的名字或者物品数量来找到对象地址,找到对象后,再找对象是如何存储的,即可找到背包数组 这里先以通过物品数量来演示

10_31_12_51618

玄兵石的数量是30,先搜30

10_31_32_36953

然后拆分一个,再继续搜29,再拆分或者整理,然后继续搜当前数量

10_31_51_32319

最后得到一个确切的值,对这个值下访问断点

10_32_27_80490

 Game.exe+1947ED: 005947E8 - 80 FA 03 - cmp dl,03 005947EB - 75 04 - jne Game.exe+1947F1 005947ED - 8A 41 58 - mov al,[ecx+58] <<005947F0 - C3 - ret 005947F1 - 80 FA 02 - cmp dl,02 
继续搜索22799DB8

10_33_28_28023

只有一条,对这个地址继续下访问断点

10_33_55_65320

 Game.exe+63A73: 00463A70 - 56 - push esi 00463A71 - 8B F1 - mov esi,ecx 00463A73 - 8B 4E 14 - mov ecx,[esi+14] <<00463A76 - E8 75E01200 - call Game.exe+191AF0 00463A7B - 85 C0 - test eax,eax 
观察了一下,上面几条代码提示的指针都是3CAEEAD8 所以就继续搜这个值吧。

10_34_25_85116

有两个地址,这两个都可以下访问断,看看有什么不同

10_34_50_17127

04B3DF9C这个代码只有在我使用物品的时候触发了一次,然而193575A0却不知道在什么情况下触发了几次,而且从代码里面看 edi来源于一个数组,优先找04B3DF9C

 Game.exe+A37F0: 004A37E8 - 57 - push edi 004A37E9 - 8D 3C 8D 00000000 - lea edi,[ecx_4+00000000]_ _004A37F0 - 8B 0C 07 - mov ecx,[edi+eax] <<_ _004A37F3 - 85 C9 - test ecx,ecx_ _004A37F5 - 0F84 88000000 - je Game.exe+A3883_ _
_

10_35_16_77058

_这里继续搜索04B3DF98_

10_35_38_15642

_只有一个地址,对这个地址下访问断点_ _

_ _Game.exe+A37E2:_ _004A37D9 - 83 F9 64 - cmp ecx,64_ _004A37DC - 0F8D A2000000 - jnl Game.exe+A3884_ _004A37E2 - 8B 86 7C030000 - mov eax,[esi+0000037C] <<_ _004A37E8 - 57 - push edi_ _004A37E9 - 8D 3C 8D 00000000 - lea edi,[ecx_4+00000000] 
继续搜索04ADB558

10_36_31_97002 10_36_40_97750

这里有两个基址 随便选一条,我选第二条吧 所以物品数量应当就是`[[[[0x00645ae0]+0x37c]+index*4]+0x14]+0x58` 去调试器或者CE里面验证一下

10_37_28_37685

img]

10_37_37_71920 10_37_57_69615

可以看到是OK的,现在找一下名字 如果是非修改版的CE就要用字节转换器才能找到

10_38_20_54723

玄兵石的ANSI是:D0FEB1F8CAAF 所以在CE里面搜D0FEB1F8CAAF 类型是字节数组

10_38_39_13082

280个。。。都拖下来 然后尝试更改其中一半

10_39_03_32870

没反应,接着改后面的一半

10_39_21_28635

有了反应,接着再继续改确定有的那一半里面

10_39_41_48437

范围又缩小了一半 通过不断的改再观察游戏里面的显示 最终确定一条

10_40_25_22009

对这个地址下访问断点

10_40_55_58058

都是在str的库函数里面 先分析前面的

10_41_16_75881

现在搜索 2E2C20CE

10_41_34_67023

对这几个都下访问断

10_41_58_52609

只有2D7A1090 有访问记录,

10_42_17_93024

接下来继续搜索2D7A1078

10_42_36_12549

有三条记录,对这3个都下访问断点试试

10_42_57_93292

有两个地址有记录,

10_43_35_79943

先看这一个吧。

10_44_01_28676

继续搜索 3CAEEAD8

10_44_24_71561

找到2个地址,对这两个地址下访问断点试试

10_44_44_57320

虽然有两个地址,但是已经找到跟之前相同的地方了,就是这个edi+eax这里,所以可以推断出来,名字的位置是 `[[[[0x00645ae0]+0x37c]+index*4]+0x28]+0x18`

10_45_10_58113

写测试代码遍历的时候发现有的名字在0x18的位置,有的在0x28的位置 [[[[0x00645ae0]+0x37c]+index*4]+0x28]+8这个位置的值如果是 1 2 4的话名字就存在0x28的位置 所以测试代码如下:

7_7HTHZQ5NTJFN8MN

最后于 2天前 被admin编辑 ,原因: