成吉思汗背包找法
成吉思汗这个游戏,找了半天怪物结构感到不适应,只好从背包找起,这个还简单点。为什么说呢,因为一般背包都是数组结构。
好了下面开始。为了简单只用CE这个工具。
在背包里找到5个马奶。搜索 然后打怪 吃 在搜索 剩一个地址
1
- 您所在的用户组无法下载或查看附件
对这个地址下断
2
- 您所在的用户组无法下载或查看附件
数量eax=[ecx+20]=[118D3AF8]
然后搜索118D3AF8 这个数据
应该有2个地址 都保留下来
3
- 您所在的用户组无法下载或查看附件
假定118D3AF8是马奶的数据结构地址 上一层应该就是背包数组每个格的地址 里面放物品结构地址
如果移动物品让格子为空 那相应格子的值应该是0
4
- 您所在的用户组无法下载或查看附件
第一个值为0了,移动其他物品到这个格子 显示其他地址。暂时看思路正确。
给016EB46C下断
5
- 您所在的用户组无法下载或查看附件
6
- 您所在的用户组无法下载或查看附件
关键是493600这个函数 下断看下
7
- 您所在的用户组无法下载或查看附件
第一个参数也就是eax=3正好咱移动第4个格数索引。
看了判断正常.上面是判断索引大于0小于6E
8
- 您所在的用户组无法下载或查看附件
9
- 您所在的用户组无法下载或查看附件
[ecx+164+4] [ebp+8]=edx=ebp-4c 上面的函数跟进去 就是把[ebp-4c]=[ecx+168]
感觉多次一举。
这个函数还是返回ebp-4c 下面看下面的那个函数
跟着索引走 push eax是索引值
ecx=ebp-4c ecx=&[ebp-4c]
10
- 您所在的用户组无法下载或查看附件
函数跟进去 ecx=&[ebp-4c],好这块就是 数组首地址[ecx+168]和索引的联系了。
[ebp-4c]=[ecx+168]
lea eax,[ecx+edx*4] ecx==[ecx+168] edx索引
所以这个游戏绕了一个大圈子
11
- 您所在的用户组无法下载或查看附件
关键找ECX值了
[[ecx+168]+i*4]+20] i 格物品数量
回到
12
在ret 0004下断 断下后 单步执行 返回上一次函数
13
- 您所在的用户组无法下载或查看附件
根进42bd20
14
- 您所在的用户组无法下载或查看附件
好了终于出来了
[[[f12d0c]+168]+i*4]+20] i格物品数量
这个游戏偏移层次不多,但代码写的太牛,层层操作,有的感觉绕圈子。