风居住de的街道

xx-网游背包列表基址和背包物品属性分析

 

汇编中数组的访问方式一般是数组基址+4*i //是数组下面 比如exa+ecx*4

在游戏的背包中,如果某个空格有物品那么该数组中会存一个物品对象的地址,如果空格没有值。那么空格里面的值就是0,基于这个方式我们可以用ce扫描0和非0的值,进行查找。

最终我们找到第二个背包的地址如下图所示,我们也可以把234中存放的物品地址互换,验证我们的操作。每个背包的地址值相差4,我们在当前地址值上进行加减4的操作就可以找到后面背包的值。

 

通过上面的操作我们找到了存放物品的地址,接下来我们就要寻找他的基址。我们用第二个进行查找。鼠标右键点击“什么访问了这个地址”,然后在背包里点击一下物品。

 

任选一个复制代码

008636C4 - 75 30 - jne Client.exe+4636F6
008636C6 - 8B 85 5CAFFFFF  - mov eax,[ebp-000050A4]
008636CC - 8B 84 87 3C040000  - mov eax,[edi+eax*4+0000043C] <<
008636D3 - 85 C0  - test eax,eax
008636D5 - 74 1F - je Client.exe+4636F6

我们有od附加游戏,然后搜索008636CC处

 我们分析哪个cmp,我们发现edi的值就是哪个2e51414存的值。

所以我们可以推测出,背包列表的表达方式是dd [2E51414]+43c+4*i

下面我们分析一下背包里存放对象的属性,以第二个为例 查看第二个地址里的数据 dc [[2E51414]+43c+4*1]

 

由于游戏背包中的物品叫xx药,所以我们可以看出哪个???药应该就是物品的名字。结合游戏中物品我们可以推断出

dc [[2E51414]+43c+4*1]+5c 是物品的名字

dc [[2E51414]+43c+4*1]+0FD 物品功能描述

接下我们需要借助ce找一个物品数量,以第二个为例。我们在在od中dd [[2E51414]+43c+4*1]

 

 

 

 

 把259278b0作为开始地址在ce中搜索物品数量,我们发现第一个离我们搜索的地址比较近,在od查看dd 259284fc

 

可以看出物品数量的偏移是c4c

所以dd [[2E51414]+43c+4*1]+0c4c 就是物品的数量

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------

posted on 2020-10-25 18:51  风居住de街道  阅读(895)  评论(0编辑  收藏  举报

导航