<原神>背包结构遍历

《原神》虽然是一款网络游戏,但是其游戏方式和单机游戏很像,很多数据和传统网游有着很大的差别,下面我们来分析一下这款游戏背包物品遍历。

首先,打开背包,观察一下其排列方式,发现这里的物品分为很多类(如图)

<原神>背包结构遍历
这里的物品有很多都是可叠加的消耗品,所以我们用物品数量为突破口去扫描。

通过CE对经验书进行扫描,可以得到两个结果(如图)

<原神>背包结构遍历
分别对其修改并切换物品栏,发现其中一个可以改变物品数量(如图)

<原神>背包结构遍历
当然这只是一个临时的数据,我们用XDBG对这个地址下访问断点,再次切换背包,游戏断下(如图)

<原神>背包结构遍历
执行到返回后,基础分析RCX发现还需要继续返回并且追RDX来源,然后得到来源于一个函数的返回值(如图)

<原神>背包结构遍历
下F2后到这个函数内部分析,可以得到+18偏移(如图)

<原神>背包结构遍历

继续分析并执行到返回,再次来源于一个函数的返回(如图)

<原神>背包结构遍历
进入内部单步执行,可以得到一个数组和+10偏移(如图)

<原神>背包结构遍历
这里对数组进行观察,我们发现这个数组起始是随着选项卡变化的,也就是说里面的内容是临时写入的(如图)(如图)

<原神>背包结构遍历
<原神>背包结构遍历
我们在内部的第一个对象上下写入断点,切换选项卡去分析写入的来源(如图)

<原神>背包结构遍历
执行到返回后继续分析RDX,发现来源于一个函数的返回(如图)

<原神>背包结构遍历
到函数内部后发现同样可以得到一个+10偏移和一个数组(如图)

<原神>背包结构遍历
通过数据窗口观察,可以看出这里的数组不是临时写入的,所以我们需要继续分析RCX的来源。

向上分析后,再次来到一个函数处,进入内部分析其返回值(如图)

<原神>背包结构遍历
在函数内部单步执行,进入两层后可以得到+28偏移和一个数组(如图)

<原神>背包结构遍历
返回一层后可以得到+68偏移(如图)

<原神>背包结构遍历
回到最外面函数,继续分析RCX,来源于一个函数的返回(如图)

<原神>背包结构遍历
到函数内部可以很容易得到多层偏移,并在外面得到一个基地址(如图)

<原神>背包结构遍历
这样我们就得到了完整的物品遍历公式,在数据窗口中跟随并观察一下(如图)

<原神>背包结构遍历
这一层存放的是不同类的物品,+30偏移存放的是数组的元素数量。
继续向里面读取,可以得到某一类物品的数组(如图)

<原神>背包结构遍历
最后我们通过代码对所有类物品进行输出,就可以得到完整的物品遍历。

通过这个分析过程我们发现数据并没有多难,只是偏移的层数很多,想找到基地址除了需要基本功之外,还需要耐心。

深入学习游戏逆向分析,****学院搜索-----吉林飞郁网络培训.

****学院免费入门课:https://edu.****.net/course/detail/30509