背包分析大多是从物品数量入手的,但是有时候由于可叠加物品的数量较少,无法在耗尽之前得到物品数量的地址,这时就需要从物品名字作为突破口来进行分析。下面我们来分析下《天堂2》的背包。
首先通过CE对物品的名字进行扫描,可以得到较少的结果,对其进行修改后发现其中一个可以改变物品名字的本地显示(如图)
用OD对该地址下访问断点,在访问物品后游戏断下(如图)
执行到返回后两次,继续分析第一个参数的来源,可以在0B6A7178处的函数中可以得到+0偏移,而在函数上面可以得到+18偏移(如图)
继续向上分析可以得到一个数组和+0偏移(如图)
但是经过对这个数组反复下断,发现数组的起始地址是变化的,这说明这个数组并不是物品数组而是物品对象下的属性数组。
执行到返回后,可以在0B6B324F中得到+2C偏移(如图)
继续分析后,发现来源于第一个参数,但是执行到返回时发现线程卡主了,这说明这里有多次的循环代码或者VM之类的代码。于是我们通过跳到栈底进行返回,并得到+2F0偏移(如图)
继续向上分析,可以在本层函数中得到数组和+2D4偏移(如图)
而在多次执行到返回后可以很容易得到几层偏移(如图)(如图)
用CE对最后一层偏移所在的地址进行扫描,可以得到基地址(如图)
接下来只要对背包对象进行分析,就可以得到物品数量,ID等偏移。