发布于:2018-12-5 17:37 | 100634次阅读 作者: 外部投稿 | 原作者: 通化程序员
技能名字是技能遍历的一个很好的突破口,但是有些游戏的代码逻辑较为复杂,我们通过名字很难直接分析到技能遍历,所以我们尝试通过技能函数的参数来进行分析。 首先来到释放技能函数处,下F2断点,得到参数中的技能ID(如图)
在这里我们得到了+108偏移,释放不同的技能,我们发现这个地址是不变的,也就说明这里只是一个临时写入技能ID的地方。 在这个偏移处下写入断点,再次释放技能,并点击F9运行,当技能ID被写入的时候分析技能ID的写入来源(如图) 由于ecx是堆栈地址,所以我们通过堆栈来找到技能ID的最初来源(如图) 我们在004BD543 处的call 004BB850的参数中找到了ID的最初来源,向上分析ebx,在004A5000 处发现参数edx的值等于ID,这样我们就可以得到+4偏移(如图) 到004A4FF8处的call 004A4350内部进行分析,可以得到一个结构体数组的代码。而经过技能后可以得出结构体的大小为0x18,继续分析edx的来源,通过下断后寄存器的值可以发现这个值其实是一个常量(如图) 而查找常量后也的确可以得到一个常量(如图) 对数组上面的代码进行分析,可以得出技能序号esi小于0x80,而由于技能ID除了最后2位,其他位是不会发生变化的,所以我们可以直接将这个ID写成一个常量表来进行使用,并不需要找到技能名字的来源。
来源:通化程序员—投稿 GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。 *转载请注明来自游戏安全实验室(GSLAB.QQ.COM) |
最新评论
发表评论