发布于:2017-11-16 16:20 | 133923次阅读 作者: 管理员 | 原作者: 外部投稿
今天我们来分析一下QQ西游的背包遍历。 背包物品的突破口很多,最常见物品数量,物品位置,物品名字,背包格子内的对象等等都可以作为突破口,如果这些都无法有效的找到物品的对象,那么可以尝试通过背包占用格子数量,分析使用物品函数参数等查找。 对于这款游戏来说,物品的数量是可以作为突破口的,但是需要注意的是物品的数量偏移并不是一个可以被4整除的地址,所以我们CE扫描的时候要把快速扫描点掉,并且要用WORD或者BYTE来扫描。如果通过物品位置扫描的话需要注意的是物品的位置并不是从0或者1开始的,而是从1E开始的,因为之前还有装备栏和附加包裹栏等。如果通过格子内的对象来分析的话,也是可以很快找到的,但是对象找到了,对象内的信息也不容易观察。 我们从物品数量入手,搜索byte型,最终得到1个结果(如图)
在OD数据窗口中跟随这个地址,并下硬件访问断点,再次访问物品游戏断下(如图) 游戏断下后我们得到一个+A的偏移,继续向上追eax的来源,得到一个数组 mov eax, dword ptr [esi+eax*4+A848],分析上面的跳转我们发现eax小于0或者大于FA都无法经过数组,也就说数组序号的范围是0到FA,继续追esi的来源,可以得到一个基地址mov esi, dword ptr [8E0D18] 在数据窗口中观察数组的情况,我们发现eax=0时的指针并不指向物品栏第一格的物品,而是指向的装备栏,而eax=1E的时候才指向第一格。(如图) 观察背包物品的对象,我们物品得到物品的名字,所以,我们需要找到物品名字库,并和物品对象进行关联。经过CE的扫描,我们得到一个可以改变本地物品名字的地址(如图) 在OD中下硬件访问,最终得到物品名字库代码(如图)如图)
整理后得到的公式如下 [[8E0D18]+0a848+n*4]+8 物品ID WORD型 [[8E0D18]+0a848+n*4]+0A 物品数量 byre型 [[[FBDCBC]+物品ID*4]+4] 物品名字ASCII型
数据并不难,关键是能否在寻找突破口时考虑全面,把数据类型和可能关联的数据想清楚就能很容易的得到结果。 来源:外部投稿 |
最新评论
查看全部评论(1)
发表评论