发布于:2018-6-21 10:22 | 112033次阅读 作者: 外部投稿 | 原作者: 通化程序员
对于3DF游戏来说,选怪往往是最简单的功能,因为大部分游戏的选怪功能都是不需要通过发包实现的,也就是说我们可以通过调用本地函数或者直接写内存实现。但是也有个别游戏的选怪看起来很麻烦,比如像传奇这一类游戏,选怪和攻击是需要连续调用的,,接下来我们就分析一下这类游戏是如何选怪的。 首先我们通过CE搜索当前选中怪的ID和对象,发现可以得到很多的结果,不过我们改写任何一个结果都无法达到选怪的效果。于是我们通过明文包进行分析。 在明文包处下断,用tab键进行选怪,并对明文包进行分析,发现如果我们已经选中怪,那么会发两个包,第一个包里是没有怪物ID的,也就是说要先取消选怪(如图)
而第二次发包会发送要选中怪的ID(如图) 这里的怪物ID为0x7A0C,而如果当前并未选中怪物,则只需要发第二个包即可达到效果。那么我们先对第二个包进行调用,却发现调用没有效果,这也就是说明我们的函数并没有调用完全,可能在发包的同时还有一个本地的数据需要写入,于是我们向外层分析,发现0052E4D7处的 mov [esi+A81C], ecx写入的怪物对象,在我们写入这个对象的情况下,调用明文包就可以达到选怪的效果(如图) 或者我们还可以通过调用再外一层函数去达到效果,因为外层函数中既包含明文包的调用又包括内存的写入(如图)
来源:通化程序员-公众号投稿 GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。 *转载请注明来自游戏安全实验室(GSLAB.QQ.COM) |
最新评论
发表评论