发布于:2018-11-6 10:17 | 139995次阅读 作者: 外部投稿 | 原作者: 通化程序员
背包遍历的结构有很多种,其中最长见的要数二叉树结构,能否准确的分析二叉树的节点数量以及节点的作用往往对程序的稳定性有很大的影响。以仙侠传为例我们来分析下背包遍历。 首先通过背包物品的数量扫描到3个结果,分别对3个结果进行改写,其中一个可以改变本地的显示(如图)
通过OD对这个地址下访问断点,游戏断下,并得到一个290偏移(如图) 执行到返回,继续分析得到来源于 call 00512BE0的返回值(如图) 到函数内部继续分析,可以得到+0偏移,以及一个二叉树结构(如图)(如图) 回到外层函数后,继续分析可以得到基地址(如图) 在数据窗口中对我们得到的二叉树节点数量进行观察,发现节点的数量与我们背包物品的数量并不一致(如图) 节点的数量比物品数量大1,这说明有一个节点是无效的。对节点进行排查后发现,在二叉树即将结束时会有一个空节点与结束标志位衔接(如图) 这样我们就得到了背包遍历的公式,以及对节点的过滤,只要将ID为0的节点舍去即可。
来源:通化程序员—投稿 GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。 *转载请注明来自游戏安全实验室(GSLAB.QQ.COM) |
最新评论
发表评论