作弊工具目前在大气层系统中,作弊工具有两个:EdiZon SE 和 Breeze。都出自同一个作者。EdiZon SE 是老牌工具,UI 操作反人类,相关教程与工具会多一写。Breeze 是新秀,UI 更人性化,速度更快,支持修改汇编代码。

内存区域概念作弊分为两类,修改游戏数据和修改游戏逻辑代码。

修改数据:向内存区域写入数据,比如将金币改为 9999。这种方式不需要了解汇编代码。

修改逻辑:改变程序的执行逻辑,比如购买物品会扣掉 100 金币,改为购买物品增加 100 金币。

无论是哪种方式,都需要先找到要修改的内存地址,而内存地址可能是会随着每次启动游戏而变动的。为了搞清有哪些内存区域,可以用在 IDA 附加后,在下方命令栏输入get info查询,得到信息如:

123456789101112131415GDB>get infoProcess: 0x89 (Application)Program Id: 0x01007ef00011e000Application: 1Hbl: 0Layout: Alias: 0x5b9a200000 - 0x6b9a1fffff Heap: 0x765e400000 - 0x785e3fffff Aslr: 0x0008000000 - 0x7fffffffff Stack: 0x6f25a00000 - 0x6fa59fffffModules: 0x350d600000 - 0x350d601fff nnrtld.elf 0x350d604000 - 0x350f72dfff U-King.nss 0x351036a000 - 0x35106ddfff multimedia.elf 0x3510a87000 - 0x3510fb4fff nnSdk.elf

留意后缀为 .nss 的模块,这是主程序的代码区,也就是所谓的 Main 区段,当我们要修改程序逻辑的时候就是针对这一块区域。另一个要关注的就是 Heap 区段,几乎绝大多数游戏数据都会在这一块区域。

另外,也可以用 Breeze 来查看游戏内存布局信息:

制作金手指文件这里以塞尔达传说:旷野之息为例。游戏信息:

12TID:01007EF00011E000BID:8E9978D50BDD20B4

数据搜索过程很简单就不多说了。卢比的修改地址是:真实数值:heap + 0E435B40显示数值:heap + A0E26620金手指文件格式是怎样的呢?不得不先看看大气层官方文档 作弊码格式 一节。卢比是 u32 类型,占用 4 字节。并且我们是向 Heap 区域写入,那么最终的金手指格式如下:

123[10000 卢比]04100000 0E435B40 0000271004100000 A0E26620 00002710

第一部分是操作码,第二部分是前面内存偏移地址,第三部分是待写入的值。

然后将文件保存到sdmc:/atmosphere/contents/{TID}/cheats/{BID}.txt。其中 TID 是应用的标识符,每个程序唯一的。BID 对应该游戏的不同版本,每个版本有不同的 BID。最后看看效果,成功!

搜索指针实际上,heap 的地址是不稳定的,是易变的。虽然不知道为什么我重开游戏后金手指仍然有效,但是要稳定的话还是建议用指针定位内存地址。用 JNoexs 附加到游戏,搜索一次数据后软件会在当前目录tmp下生成一个.dmp文件。第一次搜索数据需要很长时间,因为是全内存搜索。搜索时切记不要让 Switch 息屏,否则软件会停止工作。

然后切换到Pointer Search页面,Dump File选择刚才产生的.dmp文件,Address选择数据内存地址,main填入 main 区起始地址,其他设置保持默认就行了

运气好的话,Output区域会显示一个结果,那么就可以制作金手指了。但如果结果非常多,那么就尝试将Max Offset设置更大些再搜索。用指针定位内存地址的方式在制作金手指时要稍微复杂一点点,可以用 Simple SX OS Code Builder 这款工具来生成金手指代码。

相关资料GDB for Switch Modding Cheatsheet/TutorialCheatsSwtich金手指制作 指针寻找 Noexes使用全面教程Jnoexs查找指针地址金手指代码制作