终于到最后一节了,在这一节中我们将讲解如何利用hack制作出丰富多彩的世界,开个玩笑,其实是因为由于暗黑三的AMIIBO功能很有意思,不但可以用普通手办在城外召唤出一组精英怪,而且在城内用专用哥布林手办还能开启宝藏秘境传送门,但是由于冷却时间有十几个小时,基本上只能一天才能使用一次,因此我们想要hack一下,可以随时随地使用AMIIBO功能

1. 我们先搜索amiibo,发现了函数Console::Notifications::ShowAmiiboTutorial,知道了这个函数是弹出amiibo的使用教程的,然后在函数名上右击跳转到外部引用,跳转到函数ClientMessageReceiveGameMessage里,找到了函数SetPlayerScanDesired,意思就是设置player为需要扫描,然后程序就会启动扫描模式

2. 接下来搜索NFP,发现了函数Console::NFP::OnNFPScanSucceeded,知道了这个函数是在NFC手办扫描成功后被调用的,再跳转到外部引用,找到了函数UpdatePlayerStateTagEnabled,然后我们找打此函数在2.6.6中的地址sub_2BD5F0,记下来,后面要用

3. 我们另外还发现了函数UpdatePlayerStateIdle,猜测这个函数会在player空闲时间刷新时调用,  根据我们之前的分析推断如果玩家点击amiibo传送门后,会设置scanDesired,然后这里就会调用DoStartDetectionForTagRead进入扫描状态,我们可以在之后加入hack代码,让扫描直接成功,这样传送门就出来了,而不用靠NFC手办来触发

4. 我们找到2.6.6对应的地址后,开始编写代码

5. 在OnNFPScanSucceeded里可以发现v2是扫描结果,通过分析代码可以知道v2的值为0则是普通amiibo, 1是专用哥布林amiibo,由此可以在此处hack一下来控制扫描结果,找到2.6.6对应的地址做hack

6. 接下来我们分析冷却时间,我们在OnNFPScanSucceeded找到了冷却时间判断,在sSpellEffect_AmiiboPortalDefault_Begin里找到了默认amiibo的冷却时间判断,分别找到2.6.6对应的地方做hack即可,这样就去掉了冷却时间

7. 接着在sSpellEffect_AmiiboPortalTreasureGoblin_Begin函数里找到了哥布林amiibo的冷却时间判断,找到2.6.6对应的地址,hack之

8. 另一方面,我们看到了上面有一个传送门是否已存在的判断代码,如果已存在将会显示错误信息,为了不显示错误,我们可以hack一下,找到2.6.6的地址改为nop即可,当然也可以不改,这里无关紧要,因为即使改了在生成宝藏秘境传送门时同样会判断是否已存在,只是不再显示错误而已

9. 至此,我们已经完成了默认和专用amiibo的不限时间无条件触发的功能,但是我们想要自己控制生成的传送门类型,接下来,就说一下这个怎么改,这个也可能是整个金手指教程中最复杂的部分了,我们在生成哥布林传送门的函数sSpellEffect_AmiiboPortalTreasureGoblin_Begin中发现了创建死亡传送门的函数SpellEffect_DeathPortalCreate,v14可以分析出来是传送门的一个id,用来标识传送门类型,我们要hack的就是 v14 = PowerContactTagGetSNO(v2, 0xB0000u);

10. 我们在SpellEffect_DeathPortalCreate函数上右击跳转到外部引用,可以发现SItemCrafting_TryTransmute调用了它,这个函数不是卡奈魔盒的转换吗?由此我们推断出这是卡奈魔盒转化机械指环和牛刀时生成的宝藏秘境以及魔牛关的传送门,因此只要找到几个传送门的类型,就可以做hack了,我们双击点进去发现了v141也就是传送门类型

11. 接着往上分析,我们找到了v141 = GlobalSNOGet(v75); 分析可知v75的值为1189得到的v141是魔牛关类型,如果是1188,v141则是哥布林宝藏秘境类型,所以我们有了一个办法,将前面v14 = PowerContactTagGetSNO(v2, 0xB0000u);改为v141 = GlobalSNOGet(v75);,v75则是我们要传入的传送门ID,比如1188,那么开启amiibo传送门的时候,就是我们修改后的传送门了

12. 接下来,就是要寻找2.6.6对应的地址了,这一步比较困难,因为代码变动较多,我们先用hexworkshop在2.6.6main里搜索CubeCowPortal,找到了文件地址0x00DE5731,然后在IDA中跳转到文件偏移,然后右击跳转到交叉引用

13. 跳转后再经过一系列分析,最终得到了2.6.6中GlobalSNOGet的地址sub_4C3380,和传送门的4个值,宝藏秘境:0x4A8,魔牛关:0x4A9,奇想谷:0x4AA,远古宝藏秘境:0x4AB

14. 然后我们找到v14 = PowerContactTagGetSNO(v2, 0xB0000u);在2.6.6中的地址然后做hack即可

15. 最后我们把所有的代码写成金手指格式代码

16. 我们进入游戏测试金手指,可以分别测试通用amiibo(城外刷出精英怪),专用amiibo(城内开启4种传送门),通用amiibo和专用amiibo金手指同时只能开启一种,4种传送门金手指也是互斥的,同时只能开启一种,且只有和暗黑专用amiibo一起开启后才有效果,注意NS的NFC功能处于开启状态(在设置里面)

通用AMIIBO:

专用AMIIBO:

好了,完结撒花。

暗黑三金手指教程到此结束,我们用逆向方法实现了无数强大功能,通过对游戏程序的透彻分析,相信读者已经学到了不少知识,不管是逆向分析,汇编知识还是程序架构,设计模式,从现在开始,你已经是逆向大神了,可以踏上新的挑战之路了

NS版暗黑破坏神3金手指开发教程(17)相关推荐

  1. NS版暗黑破坏神3金手指开发教程(15)

    上一节,我们介绍了全饰品的制作方法,这一节将讲解全幻化的制作,涉及到的汇编和逆向知识比较多,代码量也很大,读者需要一定的耐心,理解了本节意味着已经没有什么困难可以阻挡你前进了 1. 我们搜索幻化tra ...

  2. NS版暗黑破坏神3金手指开发教程(5)

    上一节,我们学会了通过修改程序指令的方式制作金手指,这一节,将引出真正的高手级金手指开发方法 除了必掉太古这个极其护肝和有用的金手指外,我们能想到的另一个金手指就是人物背包里的素材,包括金钱,宝石,材 ...

  3. NS版暗黑破坏神3金手指开发教程(2)

    上一节,介绍了开发金手指所需的工具,这一节,正式开始简单的金手指修改 1. 首先,分别要准备好2.6.6的main.elf和原始版本待调试信息的DiabloIIINX64ra.elf,因为我们要修改的 ...

  4. NS版暗黑破坏神3金手指开发教程(9)

    上一节我们介绍了暴击爆伤的修改,这一节将讲解一些变态功能的制作,由于前面的章节已经详细地将大部分hack制作方法都讲解的差不多了,从这一节开始将会加速金手指教程 1. 我们先从生命不减和一击必杀的功能 ...

  5. NS版暗黑破坏神3金手指开发教程(16)

    上一节,我们学会了全幻化的制作,功力精进了一步,这一节,将会讲解全图纸的制作,也基本上是金手指教程的最后一节了,通过这一节,读者将会看到如何将逆向程序分析方法使用得淋漓尽致,面对任何困难也能无坚不摧 ...

  6. NS版暗黑破坏神3金手指开发教程(6)

    上一节,我们介绍了金钱血岩以及全素材的代码Hack修改,这一节,我们将解决第二节提出的问题,如何能在游戏中实时动态地开启和关闭人物属性的修改 1. 我们在游戏里打开人物的状态窗口,可以看到大部分属性, ...

  7. NS版暗黑破坏神3金手指开发教程(3)

    上一节,我们初步介绍了修改人物力量的方法,也大致说了一下hexworkshop和IDA的简单操作,这一节,我们将进阶到复杂度高一些的人物全属性修改,搜索方法基本跟上一节的力量公式一样,需要一定的耐心和 ...

  8. NS版暗黑破坏神3金手指开发教程(13)

    上一节,我们讲解了关于各种延时机制的hack,这一节,将会介绍全传奇威能的制作 1. 因为传奇威能的收集比较困难,需要获取到大部分拥有传奇技能的装备,而且还要提取传奇威能,因此,我们考虑从程序中Hac ...

  9. NS版暗黑破坏神3金手指开发教程(8)

    上一节,我们通过代码Hack的方式修改了移速和攻速,这一节,将通过程序分析的方式,制作出各种强力的战斗杀敌金手指功能 1. 我们先修改暴击几率和暴击伤害,先搜索critchance, 找到PowerC ...

最新文章

  1. 论文笔记 Traffic Data Reconstruction via Adaptive Spatial-Temporal Correlations
  2. python和javascript哪个好_JavaScript与Python:主要区别
  3. bloomfilter的java实现,BloomFilter(布隆过滤器)原理及实战详解
  4. 【2017-3-2】集合 结构体 枚举
  5. 【kafka】kafka 消息 重放 从 一个 topic 导入 另外一个 topic
  6. ASCII控制字符在vi和notepadd++中的表示法
  7. 人之间的尊重是相互的_人与人之间,尊重很重要
  8. java exception 包_什么是Java中的异常包装?
  9. apache网络服务的搭建和配置
  10. [原] MyBatis 整理
  11. 斯坦福大学的 CS231n课程
  12. 计算机操作系统学习笔记+思维导图——西安电子科技大学(第四版)
  13. 屏幕录像专家2018注册机怎么用?
  14. HDU5855(最大权闭合图构图技巧+裸的最大流)
  15. 简单谈谈阿里云和腾讯云的差别
  16. Ubuntu16.04 笔记本合上盖子时不进入休眠
  17. Unicode双向算法详解(bidi算法)(一)
  18. 【观察】迎接5G新时代,亚信科技的原力进化
  19. 教资 2022(上) | 小学科目三- 小学教师资格证面试(教学技巧)考情考点梳理
  20. 左支座零件的机械加工工艺规程及工艺装备设计(设计说明书+CAD图纸+任务书+工序卡+过程卡+文献+翻译)

热门文章

  1. 唐山初中计算机考试知识点,2017国家公务员考试行测考前必背知识点汇总
  2. SwiftUI视图onReceive方法接收“冗余”事件的解决
  3. Proxifier实现抓包
  4. Linux快捷键及指令
  5. 【转载】[Python数据处理] 怎样用Python预处理txt文档提取数据
  6. jzoj 5814. 【NOIP提高A组模拟2018.8.14】 树(期望)
  7. 双星无源定位之轨道模型
  8. 51单片机仿真开发环境构建实验
  9. docker设置端口2375
  10. 韩国性感美女盛恩(Sungeun)