发布于:2018-11-21 10:21 | 125031次阅读 作者: 外部投稿 | 原作者: 通化程序员
很多古老的游戏在不断的更新中,会加入一些VM代码来干扰对其数据的分析,原本非常简单的数据,分析起来就变的很麻烦。以《QQ仙侠传》为例,我们来分析下角色对象。 首先通过CE对角色的血量进行扫描,经过多次尝试后发现,血量是以双浮点数存放的(如图)
分别修改数值可以得出第二个结果是角色的当前血量,用OD对其下访问断点,打开角色栏后游戏断下(如图) 这里可以得到+40偏移,执行到返回后,得到来源于00564471 处call 00ED817F的返回值(如图) 到函数内部发现代码被VM了(如图) 这样我们就无法对函数内部的代码进行分析,这里有两种办法可以跳过VM继续分析。第一种是直接调用VM所在的函数,这是最直接的一种方法,但是有可能会影响代码效率,因为VM要执行的代码数量很多,而且如果VM中如果加入一些检测代码的话直接调用也可能会封号或者掉线。 第二种方法则是通过CE对返回值进行扫描,并通过下访问断点跳到一个没有被VM的代码段中。我们用这种方法来继续分析。 通过CE扫描后得到一个结果,对这个结果下访问断点后游戏直接断下(如图) 断到的代码是在一个循环体内,而0053845C 处的call 0048DCC0中我们发现了一个二叉树遍历的结构(如图) 这说明角色对象是来源于二叉树遍历的,继续向上分析,可以得到+2C偏移,执行到返回后可以得到+4偏移(如图) 再次执行到返回后,又出现了VM代码(如图) 于是我们通过CE对要分析的ecx进行扫描,并得到了一个基地址(如图)(如图) 接下来我们只需要在二叉树遍历中找到节点ID为0x66的节点,便可以得到角色对象。
来源:通化程序员—投稿 GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。 *转载请注明来自游戏安全实验室(GSLAB.QQ.COM) |
最新评论
发表评论