目录

《冒险岛》技能分析之技能库

目录

上一篇帖子中我们对技能等级进行了分析,接下来我们对技能名字库进行分析,进而获得完整的技能遍历。既然分析名字库,自然要从名字入手了,我们任意选择一个技能,用对其名字进行扫描,可以得到若干ASCII型的结果

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/144727w6v553ia39a5w9g1.png

这里注意的是如果名字后面带有后缀的结果比较多的话,可以转化成字节集,并加上结束标志00再扫描。分别对这些名字进行修改,同时切换技能栏,找到一个可以改变技能名字本地显示的地址。在xdbg32中对这个地址下硬件访问断点。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/144727a5fzii45na4d5na6.png

向上分析esi的来源,经过多层参数的传递,得到来源于一个[ebp-68]的局部变量

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/144728rn5gzo55g9r7nepe-20211013084325548.png

继续分析局部变量的来源,发现在上面出现了2个[ebp-68],第一个是传入0,第二个是作为ecx指针传入到了CALL中

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/144728jgq8rzi9efp8niri-20211013084125201.png

而第二个位置F2不会断,说明这个位置代码没有经过,那么来源就只能在传入0下面的CALL中了。在024B4BD处call 0x5A0CB0上下F2断点,单独到内部分析来源。这里得到了一个+C偏移,继续分析在上面又得到了一个-C偏移,而这个两个位置都是lea指令,所以只得到了+0偏移。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/144728v0jaaoqrhg0am0jv.png

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/144728uwdw99n0mmw0000l-20211013084319060.png

执行到返回后继续分析第一个参数eax,得到+8偏移,以及来源局部变量[ ebp-14]。代码再次向上滚动很久,可以得出局部变量[ebp-14]来源于eax

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/144728gtdjxtjnm3233ncr.png

eax来源一个数组,数组起始地址eax来源于[esi+8]。我们切换不同种类的技能栏并对esi+8处下F2断点,发现esi是随着技能种类变化的,也就是说这个数组只是某个种类技能的数组,在上面还有一个技能种类的结构。

我们先将这里得到的数据进行分析和整理,如下

[技能种类+8]-4 技能数组元素数量 [[技能种类+8]+n8+4]+4 技能ID [[[技能种类+8]+n*8+4]+8]+0 技能名字ASCII

上面这个分析的过程除了有一点绕,并没有很难的知识点,不过这里能不能观察到esi的变化规律是一个关键,因为技能名字库还有需要对技能进行分类的游戏的确很少。在下一篇文章里我们将去分析技能种类的加密算法,并获取到完整的技能库。玩游戏,学逆向,做安全,欢迎感兴趣的小伙伴关注我们。