上一篇帖子中我们对技能等级进行了分析,接下来我们对技能名字库进行分析,进而获得完整的技能遍历。
既然分析名字库,自然要从名字入手了,我们任意选择一个技能,用对其名字进行扫描, 可以得到若干ASCII型的结果
这里注意的是如果名字后面带有后缀的结果比较多的话,可以转化成字节集,并加上结束标志00再扫描。
分别对这些名字进行修改,同时切换技能栏,找到一个可以改变技能名字本地显示的地址。在xdbg32中对这个地址下硬件访问断点。
向上分析esi的来源,经过多层参数的传递,得到来源于一个[ebp-68]的局部变量
继续分析局部变量的来源,发现在上面出现了2个[ebp-68],第一个是传入0,第二个是作为ecx指针传入到了CALL中
而第二个位置F2不会断,说明这个位置代码没有经过,那么来源就只能在传入0下面的CALL中了。在024B4BD处call 0x5A0CB0上下F2断点,单独到内部分析来源。
这里得到了一个+C偏移,继续分析在上面又得到了一个-C偏移,而这个两个位置都是lea指令,所以只得到了+0偏移。
执行到返回后继续分析第一个参数eax,得到+8偏移,以及来源局部变量[ ebp-14]。
代码再次向上滚动很久,可以得出局部变量[ebp-14]来源于eax
eax来源一个数组,数组起始地址eax来源于[esi+8]。我们切换不同种类的技能栏并对esi+8处下F2断点,发现esi是随着技能种类变化的,也就是说这个数组只是某个种类技能的数组,在上面还有一个技能种类的结构。
我们先将这里得到的数据进行分析和整理,如下
[[技能种类+8]+n*8+4]+4 技能ID
[[[技能种类+8]+n*8+4]+8]+0 技能名字ASCII
上面这个分析的过程除了有一点绕,并没有很难的知识点,不过这里能不能观察到esi的变化规律是一个关键,因为技能名字库还有需要对技能进行分类的游戏的确很少。在下一篇文章里我们将去分析技能种类的加密算法,并获取到完整的技能库。
玩游戏,学逆向,做安全,欢迎感兴趣的小伙伴关注我们。