游戏安全实验室 首页 游戏漏洞 查看内容

【游戏漏洞】《QQ西游》通过选中怪物得到怪物NPC遍历

发布于:2018-6-15 09:56   |    122247次阅读 作者: 外部投稿    |   原作者: 通化程序员

一般来说分析怪物对象遍历都是要从怪物的血量入手的,但是有些游戏会加入很多的陷阱,让我们无法轻易的断到正常的遍历,以《QQ西游》为例

首先我们用CE搜索怪物血量,这里和角色血量一样,还是要搜索浮点数,很快得到一个地址(如图)

 

接下来通过OD下访问断点, 很快游戏断下(如图)

这里断到的偏移和角色血量断到的一样,我们经过几次执行到返回后得到0A81C偏移(如图)

继续向上分析并执行到返回几次可以得到角色基地址(如图)

我们在这个过程中并没有得到可以用来遍历的数据结构,而怪物对象仅仅是挂在角色偏移0A818下面,也就是说这个A81C可能是临时写入的,代表的是当前选中怪物,我们将选中怪物取消,发现这个偏移中的值变为0(如图)

 

于是我们在这个地址上下写入断点,再次访问怪物游戏断下(如图)

继续向上分析ecx的来源,通过堆栈进行搜索,得出ecx最早出现的代码(如图)

向上分析call    0052E400的第一个参数edi,来源于0062C551 处的 call    004B8050,到call内部可以得到数组加链表的结构(如图)

返回后可以在0062C54A call    004B74B0内部得到基地址[8DAC28](如图)

这样我们可以得到周围对象遍历的公式如下

[8DAC28]+2142C数组起始地址

[8DAC28]+21430数组结束地址

[8DAC28]+21438周围对象数量包括数组成员和链表中的成员总和

[[8DAC28]+2142C]+n*4 数组成员

[[[8DAC28]+2142C]+n*4]+0 ID

[[[8DAC28]+2142C]+n*4]+4 对象

[[[8DAC28]+2142C]+n*4]+8 链表

链表+0 ID

链表+4 对象

链表+8 链表 判断到链表为0结束

 

对象+550+BF*4 对象血量

 



来源:通化程序员-公众号投稿

GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩0 赞0

收藏

上一篇:【游戏漏洞】QQ西游recv和明文收包分析

下一篇:【游戏漏洞】QQ西游喊话封包 本地与服务器的处理关系

最新评论
B Color Image Link Quote Code Smilies

发表评论

top 问题反馈

返回顶部