上一节,我们学会了全幻化的制作,功力精进了一步,这一节,将会讲解全图纸的制作,也基本上是金手指教程的最后一节了,通过这一节,读者将会看到如何将逆向程序分析方法使用得淋漓尽致,面对任何困难也能无坚不摧
1. 我们搜索图纸英文recipe,在sAllRecipes函数中发现了图纸类型一共有4种,分别是,铁匠,附魔工匠,珠宝匠,卡奈魔盒,也就是0,1,2,3,这个很重要,一会儿会用到
2. 在UICrafting::BuildRecipeListForCrafter函数中,我们找到了图纸数目地址,然后去找到2.6.6对应的图纸数组地址为player偏移0x52E8+种类乘以0xA08, 图纸数据地址则为player偏移0x48E8++种类乘以0xA08
3. 我们找到函数SItemCrafting_LearnRecipe的2.6.6的对应地址为sub_857590,记下来为后面代码做准备
4. 我们在BuildRecipeListForCrafter函数的开始代码附近做清空图纸的hack,找到2.6.6对应的地址,开始编写代码,先写清空代码
5. 我们先看下SItemCrafting_LearnRecipe的参数,idACDPlayer和gbidRecipe,都需要我们传进去,往下看,其实v5 = PlayerGetByACD(v3)可以改为LocalPlayerGet(2.6.6对应地址为sub_B8040)来获取,这样我们就不用传递idACDPlayer了,gbidRecipe则取m_tData的高位即可,接着就可以编写添加图纸的代码了
6. 编写在循环遍历时添加图纸的代码
7. 我们在SItemCrafting_LearnRecipe里可以看到,后面的SItemCrafting_SendPlayerInfo里会调用MessageSendToClient发送消息给客户端,而我们是在客户端进行hack的,所以会报错,因此添加完图纸后我们就直接跳转到最后,找到2.6.6对应的地址hack一下即可
8. 至此,我们已经完成了全部的汇编代码,把所有代码合在一起写成金手指格式代码
9. 现在可以进游戏测试全图纸金手指了,去铁匠或者宝石匠那里看下,是不是全部图纸都学会啦?
好了,本节到此结束,这一节中,我们学会了利用游戏程序中存在的各种函数进行hack混合,最终完成了我们的功能,金手指教程也马上接近尾声了,下一节也就是最终章节中,我们将介绍hack的终极奥义,利用hack随心所欲地创造自己的世界