作弊工具
目前在大气层系统中,作弊工具有两个:EdiZon SE 和 Breeze。都出自同一个作者。
EdiZon SE 是老牌工具,UI 操作反人类,相关教程与工具会多一写。
Breeze 是新秀,UI 更人性化,速度更快,支持修改汇编代码。
内存区域概念
作弊分为两类,修改游戏数据和修改游戏逻辑代码。
- 修改数据:向内存区域写入数据,比如将金币改为 9999。这种方式不需要了解汇编代码。
- 修改逻辑:改变程序的执行逻辑,比如购买物品会扣掉 100 金币,改为购买物品增加 100 金币。
无论是哪种方式,都需要先找到要修改的内存地址,而内存地址可能是会随着每次启动游戏而变动的。
为了搞清有哪些内存区域,可以用在 IDA 附加后,在下方命令栏输入get info
查询,得到信息如:
1 | GDB>get info |
留意后缀为 .nss 的模块,这是主程序的代码区,也就是所谓的 Main 区段,当我们要修改程序逻辑的时候就是针对这一块区域。
另一个要关注的就是 Heap 区段,几乎绝大多数游戏数据都会在这一块区域。
另外,也可以用 Breeze 来查看游戏内存布局信息:
制作金手指文件
这里以塞尔达传说:旷野之息
为例。游戏信息:
1 | TID:01007EF00011E000 |
数据搜索过程很简单就不多说了。卢比的修改地址是:
真实数值:heap + 0E435B40
显示数值:heap + A0E26620
金手指文件格式是怎样的呢?不得不先看看大气层官方文档 作弊码格式 一节。
卢比是 u32 类型,占用 4 字节。并且我们是向 Heap 区域写入,那么最终的金手指格式如下:
1 | [10000 卢比] |
第一部分是操作码,第二部分是前面内存偏移地址,第三部分是待写入的值。
然后将文件保存到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/Tutorial
Cheats
Swtich金手指制作 指针寻找 Noexes使用全面教程
Jnoexs查找指针地址金手指代码制作