3DS玩机笔记

前言

上个寒假里,我找到了之前的new 3DS LL并为它做了B9破解。之后,熟悉我的人都知道,我经常在一些平台上折腾各种功能和工具,不是为了有多实用,而是为了测试和研究新的技术。在3DS上也是如此。现在找到了一个合适的时间,我准备把我折腾的一系列过程和功能都记录下来,留作日后参考,也欢迎大家补充我没有了解到的新奇的功能。

在这里补充说明一点,除了破解部分的教程,以下所有的说明都是针对B9破解的新大三,日版真实系统,系统版本为目前最新(11.13.0-45J)。当然有些东西是各种固件版本通用的,但是如果遇到了什么问题,请先尝试是否是自己系统的原因,尽量不要强行部署。如果遇到什么问题,欢迎与我交流。

文中所有使用到的技术和工具,如果标注了出处或者原项目地址,那么就不是我的成果。版权和荣誉由原作者所属。如果我没有标注出处,表示这是我自己的修改或是创作,我只会对这一部分负责维护,如果在使用其他的工具中出了问题,请优先联系原作者,当然也可以一起讨论,我会尽量研究看看。如果发现我下面的描述不准确或是侵犯了原作者的权益,请与我联系,我会立刻修改。

破解篇

首先说明,如果是正版机开始破解为了方便,建议先升级自己的系统至最新版本,也就是11.10.xx以上,这样能够省去之后的许多麻烦,反正正版机系统更新是绝对没有问题的。如果是之前的破解机,请按照对应的教程操作。

完整的教程可以查看这里,这是最官方(当然不是任天堂官方)的3DS破解指南。

从未破解机到B9破解(Seedminer)

在已经更新至最新系统的情况下,破解3DS相对容易一些,无需额外的外设(当然,读卡器,Micro SD卡和螺丝刀是肯定得有的),通过Seedminer方法就可以完成破解。在破解之前需要先确认你的网络环境正常,能够连接任天堂的服务器,同时你的机器必须是除了神游机之外的零售版,机型不限。

Seedminer原理介绍

以下内容引用自3DS破解指南

我们利用了 DSiWare 游戏中的一个漏洞来在你的主机上安装 Boot9Starp。 为了做到这点,我们使用了一个叫 Seedminer 的工具来计算你设备的 DSiWare 加密密钥(movable.sed)。 然后, 我们使用 DSiWare 加密密钥来解密与漏洞相兼容的 DSiWare 游戏。之后,我们将漏洞植入游戏好让我们运行任何想要运行的程序(漏洞种类视你的主机系统区域而定)。 如果这个密钥是完全随机生成的,那么加密密钥将不可能被破解出来。 幸运的是,密钥的前半部分 (movable_part1.sed) 与你的设备的朋友代码(Friend code) 有着一些关系,使我们能够破解加密。 如果想要了解Seedminer是怎么工作的,请参见此介绍资料 本教程需要利用一个高性能的显卡来进行一些计算。 不过有一个志愿者网站可以帮助你做需要显卡的步骤。(不过在中国大陆地区由于无法使用谷歌服务,你需要通过科学上网才能正常使用网站提供的功能)

那么,说了一大堆,具体是怎么回事呢?3DS使用一个种子密钥来加密自身的文件系统。3DS会在Micro SD卡中存储一部分自身的文件,比如,下载的一些游戏内容,游戏存档,等等。这一部分数据自然是加密的,密钥是一个128位的,每台设备不同的密钥。密钥存放在NAND内,一般情况下无法访问(除非你选择硬破3DS),只有在迁移系统数据的时候会被导出(因为新设备需要这个密钥来解密之前的文件)。这一密钥就是movable.sed。关于这一密钥的具体信息,格式,存储和生成请参考这里。我们的目的就是获得这个密钥,并且利用它来解密并且重新加密一个有人为放进去的漏洞的系统软件,替换掉本来的系统软件,从而注入这一个漏洞。完成漏洞注入之后就可以在进入系统的情况下利用漏洞,部署和加载一些自己的破解工具,从而获得系统的最高权限,并且最终替换自制固件。这样获得的破解是完美稳定破解,已经固化,不需要每次重启。

那么,怎么才能获得这个密钥呢?一个最显而易见的思路是,如果我有一台破解了的3DS,使用系统迁移机能将未破解的3DS数据迁入破解的3DS,因为破解的3DS有对内部存储器的文件系统的完全访问权限,所以可以直接拿到这一个密钥。这个方法被称为磁铁法破解,在这里我们暂时不介绍,因为我并没有实际操作过。还有一个办法是,我通过直接访问存储器的方法,即硬件入侵的方法直接连接NAND,想办法从里面的数据恢复出密钥,这就是硬破的方法,我们也暂时不讨论。我们先来讨论没有破解机,或者向从头破解的情况。毕竟一开始破解的时候也没有办法利用磁铁法来破解。

如果密钥是随机的,可以想见,128位的密钥破解需要一台超级计算机几十年甚至上百年的时间,完全不可能实现。但是经过一些高手的分析,发现并密钥非完全随机。前半部分的密钥(movable_part1.sed),即前64位,可以通过本地朋友代码获得。这一信息可以通过查看本机的朋友代码和系统文件夹的32位名称获得。即便如此,\(2^{64}\)的破解运算量也并不小。此时又有一位高手(Zoogie)发现,后64位的后32位(movable_part3.sed)是连续的,类似于机器出厂的序列号。而最关键的是,这一部分数值上约等于前64位的1/5。虽然并不完全相等,但是在他的努力之下,误差已经从正负4000缩小到正负200以内,随着破解数据的增加还在不断缩小。所以现在运算量降低到了\(2^{42}\)以下,通过志愿者们的数据提供,能够不断降低。利用GPU加速(Jimmy-Z的功劳),这一进程被减少到几十分钟。最后将获得完整的128位密钥以供使用,这一过程就是Seedminer方法。

Seedminer获取movable.sed操作

准备工作

首先需要准备Seedminer所需的主机信息。将你的SD/Micro SD卡插入到电脑,并打开里面的Nintendo 3DS文件夹,复制你在Nintendo 3DS文件夹内看到的32位字符文件夹的名称,注意不要再点进任何文件夹。这一名称被称为ID0。此时如果你在Nintendo 3DS文件夹中看到多个非常长且随机名称的文件夹,一般是由于交换信息所造成的。此时将Nintendo 3DS文件夹重命名为BACKUP_Nintendo 3DS,重新将SD卡插入设备并开机。等待一段时间让3DS生成SD卡中的数据,重新取出SD卡,打开刚刚生成的Nintendo 3DS文件夹,里面的文件夹名称就是你自己的ID0。复制你看到的32位字符文件夹的名称,删除Nintendo 3DS文件夹并将BACKUP_Nintendo 3DS文件夹命名恢复为Nintendo 3DS。注意保存你的ID0,之后需要用。启动3DS打开好友列表(主菜单中最上方的橙色的笑脸),如果出现错误信息并被踢回到主菜单,则你需要创建一个Mii形象或你的设备无法连接到任天堂服务器(由于封禁或网络问题,正版机不会被ban,如果网络能够正常连接的话可以试一下走代理),找到你的Mii个人形象,然后在上屏寻找你的“朋友代码(Friend Code)”。将两个信息都保存备用

在线计算Seedminer破解

在电脑上打开bruteforce Movable网站。这个网站利用一台机器控制的3DS和志愿者的计算资源,可以自动替你获取movable_part1.sed文件。并破解你主机的 DSiWare 密钥。按照网站上的提示,在 “Your friend code” 选项填入你设备的 “朋友代码(Friend Code)”(只要数字,不要填入空格和破折号),在 “Your ID0” 栏位粘贴之前复制的32位长的字符串。在继续之前务必检查你的输入正确,最好复制粘贴以防出错。输入全部信息并点击”Go”之后,可能会提示你添加一个好友(就是那台机器控制的3DS),在3DS内添加即可。全部操作完成之后网站需要一段时间才会给你你的movable.sed,耐心等待,中间如果出错可以尝试重试,或者通过网站上的Discord联系方式求助。最后可以下载这个密钥,保存好。

绝对不可以直接把这个密钥注入3DS!这个密钥只能用来解密你的DSi Ware,而非替换你NAND里面的密钥。直接注入肯定会导致软砖机,并且一定概率永久砖机。

BannerBomb3构建DSi Ware备份

下面要做的就是利用刚才获得的密钥来构建一个你的机器能用的DSi Ware备份。这一操作使用的是BannerBomb3工具,它依然是由Zoogie开发的。在电脑上打开BannerBomb3 Tool,点击 “选择文件” 选项,然后选择你的 movable.sed 上传并点击“Go”。这个操作将可以从下载后的zip文件(tadmuffin_out.zip)中得到一个叫做F00D43D5.bin的可被漏洞利用的DSiWare系统文件。在电脑上打开SD卡的/Nintendo 3DS/ID0/Nintendo DSiWare/文件夹,如果路径不存在就自己新建。注意你的卡是Fat32格式,不区分大小写,创建路径最好一次性创建对。从刚刚下载的压缩包(tadmuffin_out.zip)里的 output/Usa_Europe_Japan_Korea/文件夹复制出F00D43D5.bin文件,然后将其粘贴到Nintendo DSiWare文件夹。开机并进入设置,选择进入数据管理的DSi Ware管理,并点击SD卡。此时主机屏幕会闪过粉色,然后崩溃。这表示操作成功,否则操作失败,请向专人求助或换一种破解方法。把SD卡连接电脑,现在SD卡根目录下会有一个42383841.bin文件。这是你的DSi Ware备份。保存好它,并且删除刚刚复制进卡里的F00D43D5.bin文件。

使用Fredtool安装B9s

这一步将注入有漏洞的DSi Ware,并且利用漏洞启动Homebrew菜单,从中安装B9s。

首先是准备工作,先下载最新版本的Frogminer,和最新版的Luma以及b9sTool。全部解压。

接下来将SD卡连接到电脑,将Luma3DS里的boot.firmboot.3dsx,B9STool的boot.nds和Frogminer的private文件夹复制到SD卡的根目录。然后在电脑浏览器打开Fredtool,上传你的movable.sed和DSi Ware备份。等待一段时间便可以下载一个文件,这个文件分为两部分,clean即未修改的原件,hax即注入了漏洞的版本。将hax版本的42383841.bin文件覆盖掉你SD卡内本来的文件,插卡开机。进入系统设置的数据管理的DSi Ware中,可以看见Haxxxxxxxxx!这个应用。选择复制并确定。接下来退回到系统设置的网络设置部分,进入Nintendo DS Connections。这时因为刚才注入了其他的程序,你将进入Flipnote Studio的界面。下面的过程因为我没有日语输入法,所以直接从3ds hacks guide网站上引用:

完成游戏的初始设置,直到进入主菜单为止。在出现提示时,选择左边的 “我不需要(いらない)” 选项。使用触摸屏点击 “メモを見る” 并选择 “SD カード”。菜单载入后,点击( ͡° ͜ʖ ͡°) 图标,然后点击右下角的按钮继续。通过上屏所示的选项,通过 “X” 键或十字键的 “↑” 键来选择。使用触摸屏点击胶卷按钮。向右移动到 “3/3”,点击第三个带有 “A” 的框,向左移动到 “1/3”,点击第四个带有 “A” 的框,如果漏洞成功执行,你的设备将会进入到 b9sTool。使用十字键将光标移动至“Install boot9starp”。按下 “A” 键,然后同时按下 START 键和 SELECT 键来开始安装,一旦下屏显示 “done.” ,那么安装就已经完成了。退出b9stool ,然后关机。

在重新开机设备之后,你将进入Luma的设置。这里的设置按照自己的需要即可,但是一定要勾选Show NAND or user string in System Settings选项。之后按Start完成设置并引导系统开机。以后需要进入这个设置的时候,只需在关机状态下按住Select开机即可。

最后,因为刚才注入了其他的软件,在这里需要恢复正常的网络管理软件。复制clean版本的42383841.bin到SD卡,进入系统设置的数据管理的DSi Ware中,这次选择Nintendo DSi™,复制并保存即可。

到这里全部的B9s破解就已经完成了。之后就按照个人需要,安装自己需要的工具和软件,或者游戏等等,也可以在B9s的基础上继续折腾。

Homebrew工具和补丁篇

LumaLocaleSwitcher

这个工具是用来运行区域不匹配的破解游戏的,不能用于正版卡带,购买正版请一定看准自己的机器的区域。只有极少数游戏需要使用这个工具,大部分情况下B9破解将自动模拟对应区域的机器进行游玩,而且许多游戏在被提取成CIA文件的时候已经去除了区域限制。目前发现的需要使用这个工具的只有任天狗狗系列,需要切换成区域TW,字体ZH。

使用方法

工具可以在这里获得。启动工具之后有三个选项,分别是TitlesChoose locales DirectoryReset all to System Default。如果你的系统是干净的B9破解,没有自己调整过Locale路径的话,无需进行任何配置;而如果你调整过并且希望继续使用自己的设置,则需要进入第二项,将路径设置为自己之前的路径。完成之后进入Titles并选择自己要改区的软件或游戏,可以选择Change Region(改区),Change Language(改变语言和字库支持,注意进行这一操作无需额外支持,比如你可以不安装下文要介绍的ACG工具),和Use System Default(还原回系统默认)。

Checkpoint

Checkpoint是一个存档管理工具,也是现在最推荐的存档管理器。它的优点在于不像别的存档管理器一样,只能对着一串编号努力找到自己要管理的游戏,而是会加载一组生成过存档的游戏的图标,对着图标就能够很容易地找到自己的游戏。而且支持一键导入和备份,能够同时储存多个备份,也能够自定义备份的名字,可以说是功能非常全面而操作方便的工具。在最近的更新中,还包含了Sharkive的功能,能够从GitHub的一个仓库内下载对应游戏的金手指。不过需要注意,下载到的金手指是GateShark格式,需要最新的Luma和Rosalina内置的作弊功能才能使用,不是基于NTR的插件。

使用方法

工具可以在这里获得。第一次打开Checkpoint的时候,Checkpoint会扫描设备NAND和存储卡以寻找建立了的游戏存档,这个过程需要持续一段时间,其间可以看到游戏图标在不断增加。之后每次打开的时候,之前扫描过的游戏无需重复扫描,Checkpoint会在后台自动扫描并添加新增的游戏存档。如果在使用的时候发现某一个游戏的存档自己找不到的话,按x切换到外部存储器即可。像怪物猎人XX这样的游戏,其存档是在内存卡中而非机体内部存储,按x之后即可显示。在定位到自己希望管理的游戏之后,按A选定,之后可以按L/R选择备份或还原存档,或者进入对应的界面下载金手指。其他具体的操作可以长按SELECT查看。

the homebrew launcher

The homebrew launcher是B9破解下使用Homebrew应用的一个非常方便的启动器。因为B9破解与之前利用各种应用程序的漏洞(Browser Hax, SoundHax, NinjaHax等等)的破解方式不同,是一个稳定的,预加载的破解,使用CFW Rosalina,即开机的时候就已经加载完成漏洞利用,进入破解状态了。所以,B9破解就完全没有必要经常折腾各种漏洞,但是也没法直接加载之前的.3dsx类型的自制应用。所以有了这款启动器,能够和之前利用各种漏洞时完全一样地加载这些自制应用,向前兼容全部的hax文件。虽然绝大多数工具都有了.cia.3ds版本,但是对于开发而言还是非常有用的。

使用方法

完成完整的B9破解之后你将直接获得这个工具。将你需要启动的.3dsx文件放入Micro SD卡内的/3ds文件夹内,如果本身是以一个文件夹形式包含多个文件(比如还有.smdh文件之类),则将文件夹直接放进这一目录即可。如果启动的程序有特别的路径要求,那么优先遵守程序自身的。之后将卡插回去启动机体,直接打开the homebrew launcher,刚才放进去的文件会直接显示在列表里,打开即可。

Graphing Calculator

这个工具是在3DS上运行的一个图形计算器……虽然正常情况下没人会需要这种功能,但是我还是下载安装了,用来纪念过去的一段时光,我给Texas Instruments生产的图形编程计算器上安装了自制系统和GBA模拟器,能够运行口袋妖怪·黄,这两个也算是完全反过来的两种表现吧。就是一个正常的图形计算器,不过多介绍了。工具在这里获取。

FTPD

FTPD是3DS玩机过程中的一个必备神器,因为它能够让3DS成为一台FTP服务器,用其他设备的FTP客户端直接连接就可以访问其Micro SD卡内的文件系统,并且上传和下载文件。这个工具使用非常简单,在3DS连接WiFi之后直接打开,上屏就会显示3DS的IP和FTP端口(5000),明文传输文件。传输过程中和一个标准的FTP服务器一样,能够在上下屏显示日志信息。这个工具对于不想经常拔卡的人而言非常好用,比如我就是因为3DS装了外壳,每次拔卡都要把外壳卸下来,所以一般能够用FTP传输就用这个工具,除非文件太大或者太多,才会不得已去拔卡。与这个工具功能相似的还有3DShell,它也有内置的FTP功能。

使用方法

工具可以在这里获得。打开软件,如果显示等待WiFi表示你没有连接好WiFi,按Home键确认连接好了再重新进入即可。正常情况下会显示自己的IP和端口,端口统一都是5000。在同一网段下(连接同一个网络,IP除了最后一组都一样)的FTP客户端里面输入IP和端口即可连接。需要注意,FTPD不支持SSL加密的FTP传输,所以需要使用明文传输。之后就和正常的FTP一样,退出FTPD建议按两次B键退出,而非直接按Home然后中止。

Boot NTR Selector

Boot NTR是NTR CFW的启动器,而NTR CFW则是一个非常强大的自制系统,可以用来进行软件调试,远端监控,注入代码,截图,流式传输,等等一系列功能,基本可以说涵盖了3DS开发所需要的全部调试功能,和3DS游玩的全部作弊功能。虽然绝大多数人把NTR当作是一个金手指工具,但是它的能力远不止于此。最新版本的Boot NTR可以配合最新版本的Luma和3DS系统使用。

使用方法

工具可以在这里获得。安装之后打开软件,能够自己选择启动的NTR CFW版本。启动完成之后,会自动返回主界面,如果没有自动返回,那么直接打开新的需要调试的软件即可,不要手动中止Boot NTR。每次启动NTR之后只能运行一个需要调试的程序,之后如果需要运行别的,需要重启设备。此时对这个被调试的程序可以进行进程查看,内存查看,代码注入(也就是一般金手指的原理),乃至将图像传输到另外一台设备(一般是电脑)上面查看,都可以做到。一般情况下可以在软件内按X+Y呼出NTR菜单,极少数这个功能被占用的软件,需要调试的时候可以使用特殊的接口。

Forecast

一个天气软件,因为很罕见,所以就选择安装了,启动之后能够正常查看自己所在地或者是其他地区的当前天气和未来的预报,与标准气象服务同步。但是总而言之还是没有什么用=_=工具在这里获取。

Game Coin Setter

Game Coin Setter是一个能够修改3DS内置的游戏币的工具,正常情况下每行走100步将获得一个游戏币,一天的上限是10个,最高上限是300个。虽然这个游戏币一般没有过多的用处,但是遇到需要的时候,比如游玩星之卡比或者生化危机·启示录的时候,消耗量还是比较大的,一天10个难以满足,这个工具可以将游戏币改成300以内的任何值,所以可以不断修改来满足自己的消耗。工具可以在这里获取。

ACG Shared Font Tool 2

这个工具是ACG开发的一个字库替换工具,能够用来替换系统的内置字库,解决一部分汉化游戏无法正常显示字符的问题。需要注意的是,这一工具是替换了全部的字体,也就是说,替换之后日版的系统肯定无法正常显示(因为字库不支持日文),但是你需要游玩的游戏可以正常显示,其他一些游戏可能会受到波及,所以在自己需要玩的时候替换,暂时不玩的时候换回来即可。请不要指望替换之后其它语言的软件和系统就能自动变成中文,要是能这样还要汉化组干嘛……

使用方法

工具可以在这里获取。安装完成之后,打开软件,可以选择自己需要的字库加载。每一个字库都有对应的说明,如果说明上说不要使用,那么,尽量不要用,除非已经完整备份并且做好了处理各种问题的准备。

ctrmus

ctrmus是一个音乐播放器,支持常见的音乐格式(.mp3,.3gp,.flac等等),并且能够从Micro SD卡中读取音乐文件。目前根据我的测试有两个小问题,一是不支持歌词,不过毕竟不能要求过高;二是连续播放好几首之后会有严重卡顿,需要重启设备才能解决。不过设计的很不错,可以以它为一个很好的平台继续开发。而如果想认真地听音乐的话,3DS自带的音乐播放器是一个很好的选择,同时RetroArch的FFmpeg核心自带音乐播放器功能,3DShell也有内置的播放器,也可以利用R4卡内置的媒体播放器,具体会在之后详细介绍。

使用方法

工具可以在这里获得。安装完成后,将音乐放在/Music文件夹下即可。可以有子路径,但是尽量不要有特殊符号,3DS默认为ASCII编码,经过测试,ctrmus支持一部分Unicode编码,但是可能还是有隐藏的问题。

PKSM

使用方法

工具可以在这里获得。打开工具之后,使用方法很容易看懂,按照提示操作即可。

GYTB

GYTB是一个自制图标的工具。3DS官方有一个Badge Arcade的机能,允许用户使用特殊的图标,而GYTB利用了这个构架,通过Micro SD卡内的图片可以直接生成自定义图标。

使用方法

工具可以在这里获得。安装应用之后,将你希望变成图标的图片放在存储卡根目录的Badges文件夹下面即可。注意你的图片应该有尺寸标准,具体尺寸可以查看GYTB的介绍。图片的命名将是显示的名称,如果你希望用一个图标作为快捷方式而不只是好看的话,将图标名称改为对应应用的ID即可。之后运行GYTB,再退出就可以在主界面上看到添加的图标。注意一旦运行Badge Arcade,非官方的图标将全部被移除,需要自行注意一下。

模拟器篇

安装RetroArch for 3DS全能模拟器

RetroArch简介

RetroArch模拟器是一个由RetroArch团队开发的全能模拟器,它的特点有:

  1. 能够模拟大量的平台,并且无需重复配置。需要模拟什么平台,只需将对应的内核加载到模拟器内即可,无需针对每一个需要模拟的平台专门配置。RetroArch的兼容性也相当不错,老到FC,街机,新到PSP,3DS,绝大多数都能模拟。
  2. 能够兼容大量的平台。RetroArch不止能够在Windows上运行,Mac OS,Linux上也可以,甚至还有安卓和树莓派的专用版本(如果有树莓派正在吃灰的话就翻出来吧)。最重要的是,它能够在各种掌机和家用机平台上运行。PSP,PS2,PS3,Wii,WiiU,3DS,乃至Switch,大部分破解了的游戏平台都可以运行这个模拟器。当然,模拟器的能力也受限于运行的平台,比如基本不可能用3DS模拟PSP,而且平台性能越好,模拟效果越好。自然,PC效果最好,一些特别的或者不稳定的模拟器还是尽量在电脑上运行吧。

但是需要注意,RetroArch是一个仍在开发中的平台,它的一些核心功能并不完整,甚至无法加载。例如SquirrelJME核心,因为BootLoader并未完成,所以无法使用。

在3DS上安装的方法

RetroArch的安装相对比较简单,首先去它的官网,找到3DS版本的下载,并且选择最新的cia版本。如果你使用的不是B9破解,或者不是N3DSLL,请根据自己的情况选择适合的版本。下载之后解压,将获得的/retroarch文件夹放入3DS的根目录。将卡插回3DS并启动机体,安装/retroarch/cores下的所有CIA文件,或者根据自己的需求安装需要的模拟器核心。最后一个文件是RetroArch的主程序,相当于一个集中管理器,非必需,但是推荐安装,因为安装之后有很多不错的功能。之后可以直接选取自己需要的核心运行,也可以从主程序里加载。运行一次主程序或者核心之后会自动更新配置文件,之后将自己需要模拟的ROM文件放在/rom下对应的路径就好。

在3DS上配置的方法

和绝大多数模拟器类似的是,RetroArch的每个核心都提供了自己的一些配置选项,而RetroArch也有自己的整体设置。同时,RetorArch有一些功能类似的核心,比如同样是模拟NES,它有不少于5种的核心可用(具体取决于运行的平台)。那么,每个核心之间会有一些细微的差别,导致运行不同游戏时在不同的方面效果不尽相同。

基础的配置包括:

  • 路径。可以设置RetroArch加载资源时的路径,这一项功能尽量不要调整,尽量把对应的资源文件放入默认的目录下,能够避免很多出错。只有在同时使用两个模拟器运行同一种文件的时候再考虑调整,不过完全没有必要。但是,有一些默认路径是“无”的可以考虑设置,因为设置之后可以允许RetroArch加载一些额外的资源,比如插件,修改模块等等。但是最好确保自己知道怎么设置这些额外资源再尝试加载。
  • 画面采样率和采样方式,以及分辨率和窗口大小。因为大部分被模拟的平台和3DS的分辨率和尺寸并不一样,这时候需要针对不同的平台配置不同的显示方式。默认的方式是画中画,即只有屏幕中间的一个小窗口会被用来显示游戏画面,剩下的都被显示为背景。可以调整为升采样,让画面变大一些,但是这对性能有很大的影响,谨慎使用。
  • 按键绑定。3DS的按键和被模拟的平台不尽相同,可以调整设置,让New 3DS LL的右摇杆和ZL/ZR键发挥作用,或是让本来没有摇杆的平台通过映射左摇杆能够由它来控制。(严格来说3DS是滑杆,但是模拟器之类会直接当摇杆处理,包括C摇杆在RetroArch里面都会被认为是一个普通的摇杆。我还没有测试加装的右摇杆外设在模拟器里面怎么处理)。

在3DS上部署Linux系统

在3DS上使用Linux系统有两种方法,一是通过Linux for 3DS,二是通过DSLinux,一个为NDS开发的Linux系统。

部署Linux for 3DS

Linux for 3DS是为原生3DS开发的一个Linux环境,使用的是Busybox+Buildroot的方式来获得Linux的指令集,也内置了Weston。这一项目基本已经停止更新,如果有兴趣的话,可以尝试继续开发这一项目。具体的介绍和发布页面在这里,而具体的编译和部署的方法在我的另外一篇教程中。

部署DSLinux

DSLinux的部署和使用相对容易很多,因为它提供了预编译的Linux文件系统和内核,也将启动文件打包成了.nds的格式。可以通过烧录卡或者TWilight Menu的方式启动DSLinux,在这里只介绍通过R4卡启动的方法,因为TWilight启动并不稳定,经常导致3DS系统崩溃并强制重启。有关R4卡的详细内容请参考下文介绍。

首先先在官网上下载DLDI版本的DSLinux。将获得的文件解压并全部放在R4卡的Micro SD卡的根目录下。需要注意的是,请使用Linux系统进行解压和复制的操作,因为Windows下文件的结尾符与Linux并不相同,有的Windows解压工具也会忽略空目录,这些都会影响DSLinux的正常使用。在完成解压之后将R4卡重新装回3DS内,启动对应的入口程序进入R4菜单之后(这一步由于每个人使用的内核不一样,具体也略有不同),进入文件管理器,并且启动刚刚复制进去的.nds文件。之后DS模式会软重启并且加载DSLinux,DLDI版本的DSLinux能够自动登录,所以可以直接获取Shell。之后,由于这一移植系统的局限性,有些命令在这里不能使用,但是文件系统被挂载为读写,而且有WiFi芯片的驱动,可以通过各种方式来配置到自己喜欢的样子。

在3DS上部署Windows系统

在3DS上使用Windows系统也有两种方法,一是通过RetroArch的DosBox模拟工具,二是通过WintenDos,一个为NDS开发的Windows环境。

通过DosBox部署Windows98/Windows95/Windows3.0~3.2

这一方式相对复杂一些,需要利用这个脚本。下载脚本之后,将压缩文件解压,此时忽略刚才这个链接里面的教程,直接在根目录下新建文件夹,命名随意(其实完全不建也行,但是安全起见,最好在一个单独的路径下加载Windows)。将得到的.bat文件放入,其他的不要。在网上找到原版的Win98,Win95和Windows3.1的镜像,注意尽量不要用各种奇怪的修改版或者精简版,也不要用模拟器专用版本(虽然这的确是个模拟器),就下载原版镜像。之后将.img格式的Win95或Win95镜像,或者从Windows3.1镜像中提取出来的Windows文件夹放入刚才放置脚本的路径。之后进入RetroArch,加载DosBox核心。之后选择加载内容,按照网页上的说明选择自己需要的.bat文件加载即可。

加载之后闪过图标,进入模拟引导。这里需要有一个额外的操作,因为3DS没有键盘,DosBox也仅仅是一个核心,需要在RetroArch里面手动绑定3DS的按键。但是可以想见,每次需要新的按键的时候都需要解除绑定/重新绑定,非常麻烦。但是这个方法的好处在于,获得的是完整的Windows系统,没有删减,性能也与老式的Windows电脑相近。

使用WintenDos

WintenDos是一个为NDS专门开发的类似Windows的系统。之所以说是类似,是因为它并不是官方发布的Windows或其移植版,而是一个由爱好者自行开发的基于多个版本Windows的衍生系统。同样地,这个项目目前也已经停止更新,就连项目主页都已经离线,所以不给出下载链接,如果有需要,请自行搜索。WintenDos的使用非常简单,将下载到的.nds文件启动即可,无论是通过TWiLight Menu还是R4卡的方式都可以,启动之后将进入WintenDos XP的界面,与XP系统类似,但是严重缺少功能,最大的特点在于使用FAT文件系统,总而言之,因为功能过于受限,在研究方面的作用也并不大,更不用说实际使用了。

辅助工具篇

使用Proxmark3模拟不能实际使用的Amiibo

这一段教程纯粹是存档使用,能够模拟能正常使用的Amiibo的教程请看下一小节。

Amiibo是Nintendo推出的一种带RFID芯片的手办,除了通常的收藏价值之外,还可以使用较新的Nintendo游戏机(比如3DS,WiiU和Switch)读取其中的NTAG215芯片,从而进行游戏和现实世界的联动。对于没有Amiibo但是想玩,而且不想额外花钱的人而言,可以购买空白的NTAG215卡自己制作Amiibo,也可以买一个专门的N2 Elite来模拟Amiibo。不过这两个方案都不便宜,NTAG215卡只有在被设置为只读的时候才能被Nintendo机器接受,这表示随着我们不断地需要新的Amiibo,也需要不断地买新的NTAG215白卡。而N2 Elite虽然能够重复使用,但是其售价接近40美金。不过当然,进入到RFID的领域,很少有问题是Proxmark3解决不了的。

设备需求

一台需要游玩的支持Amiibo的游戏机(我用的自然是3DS),能够使用冰人固件的Proxmark3(我用的是rdv4.01,不过rdv2应该也能够使用),Linux环境。

操作流程

首先能够模拟Amiibo的前提是,我们需要知道模拟什么。在这个网站可以找到非常全的Amiibo数据的dump,这是我们模拟Amiibo的基础。但是这个网站获得的Amiibo数据是.bin格式的,因为其他方法(写白卡和N2 Elite)都只接受这种格式。所以我们需要找到一种方法将其解密,并转换为Proxmark3使用的.eml格式。

有两种方法可以实现这一操作。首先可以使用amiitools这一工具将其解密,并且利用Proxmark3客户端自带的lua脚本转换成.eml格式。但是这样转换得到的.eml文件头并不与NTAG215匹配,数据块大小和整体大小也不匹配。这样将导致3DS不接受模拟的Amiibo,并且报错“这不是一个Amiibo”。所以我们在这里使用samyk所开发的一个脚本

从GitHub上获得脚本之后,需要在Linux环境下执行。使用命令是

./mfubin2eml <Your-bin-file>.bin > amiibo.eml

可以很轻松地获得.eml文件。之后就是利用Proxmark3模拟Amiibo了。这里有一个小小的问题,就是最新版本的RFIDResearchGroup的固件,在加载这个脚本转换的.eml文件时,会将其认为是旧版本的NTAG243卡的数据dump,这将导致错误的加载和模拟。所以在这里我们使用旧版本的冰人固件,虽然已经标为停止维护,但是最终版本的源码是干净而且完全可以编译的。但是在Windows下的ProxSpace环境中会出现错误,所以最好在Linux环境下编译。启动Proxmark3客户端之后,运行指令

hf mf eload u <path to>amiibo.eml

之后运行

hf 14a sim t 7 u [UID]

其中UID号在mfubin2eml脚本执行完成的回显中将给出。之后Proxmark3将开始模拟Amiibo,按下上面的按键将中止模拟。此时只需在3DS要求Amiibo时将Proxmark3放在下屏幕上即可。但是Amiibo的模拟并非是完美的,目前暂时无法让3DS为模拟的Amiibo设置拥有者,这就表示模拟出来的Amiibo其实不能在游戏中使用。出现这一问题的原因是Proxmark3无法响应3DS发送的写卡指令,这样导致不能往Proxmark3模拟的Amiibo里写入拥有者的数据和游戏记录,无法实际进行游戏。

不过不推荐为了这个专门买一台Proxmark3,它是一个非常强大的工具,只做这个有些大材小用,而且本身并不便宜,甚至比一台3DS还贵很多,我是因为之前学习需要买了Proxmark3,正好在这里用到一下。

使用Proxmark3模拟能正常使用的Amiibo

这一小节的内容写在上一小节的三天后,我粗略地过了一遍Proxmark3的RRG固件和冰人固件的源码,找到了RRG固件不能模拟Amiibo的原因,但是目前还没有在RRG固件里加上,因为Proxmark3的固件源码风格太过复杂……真正能够加入开发需要很长一段时间来研究源码。我转而找到了James Chambers,前NCC小组成员,在一次大会上展示的使用原始版本Proxmark3(不是RDV4,是原来的Proxmark3团队开发的很大的开发板)来模拟Amiibo的视频。视频介绍的非常详尽,描述了怎样复现完整的过程。在James Chambers的GitHub个人主页和博客之下还可以找到大会上使用的PPT,里面也介绍了一些很详细的内容。将两者结合起来之后,我大致明白了这一原理。

小小地说一句题外话,我准备借鉴这一源码并加入RRG的固件,尝试允许Proxmark3在模拟其他的卡的时候也能正常响应写卡指令。大概需要几个月的时间来移植。唯一的问题在于,这些比较新的固件已经封装了很多驱动而没有保留一个比较中层的接口,而且名称相同的很多指令也与原来版本的Proxmark3不一样(这就是为什么我之前使用RRG固件,不管怎么操作,哪怕手动一个块一个块载入再模拟都做不到的原因,因为很多指令并不是原来的一样的效果)代表着我没有办法直接移植,不过反正固件已经开源,有足够的时间,我可以尝试自己从底层加入这个功能。

好了,说回正题。这一操作的核心就是这个固件,更准确地说,是这个固件里面开发的Amiibo.lua脚本实现的功能,和这个固件的特殊的指令。这个脚本能够直接从.bin文件转换至.eml文件,也能够解密,和直接读取Amiibo,不过需要一个解密密钥。这一功能并不特别,特别的是NCC Group的固件,它允许Proxmark3在模拟NTAG215卡的时候,响应标准的14a协议的指令,而在使用Amiibo时,3DS只会发出读写的指令,而Proxmark3都能够响应。这样就解决了之前的问题。我下一步将尝试将这个功能和RRG的固件整合起来(等我看懂了RRG这里怎么写的就会开始)。

具体的使用方法是,先clone固件源码并执行编译,之后和其他的固件就一样了。需要注意的是,这个固件因为是很早起的版本,是基于Qt4的,而现在绝大多数工具和程序是基于Qt5的。从Qt4升级到Qt5之后,许多库的位置和内容都和之前不一样了。如果直接修改比较麻烦,我选择了重新配置Qt4环境,为了避免Qt两个版本共存对我其他程序产生影响,我重新安装了一个Ubuntu 16.04的环境,它是默认Qt4的。

脚本用法:在启动客户端之后

script run amiibo load <path to your amiibo>.bin [-k <path to your retail key>.bin]

如果预先将.bin的密钥文件放入了/client下并且命名为amiitool_keys.bin则无需指定-k参数。执行命令之后,Proxmark3会直接开始模拟,此时便可以完全正常的使用。

自己改造3DS的充电接口

3DS的原装充电接口是一种很特殊的接口,因为我从来没有在别的设备上见过,所以无法准确说出它的官方名称,如果有知道的可以联系我或者评论。这样就导致平时需要多带一个充电线/充电器。但是这个问题还有一个解决方案,那就是自己更换或另装一个新的充电接口。如果你希望更换并且尽量减少工程量,可以将接口换成Micro-USB接口;或者,也可以在附近另外安装一个新的接口。

改造充电接口是所有硬件改机中最容易的。将3DS后盖拆开,取出电池并取下螺丝。这时第二个后盖应该也已经松动,轻轻地取下这个后盖并收好螺丝,有的机型的这个后盖有连接线将其连在机体上,用指甲或螺丝刀轻轻地挑开即可。此时3DS的PCB板应该已经完全暴露。在动手拆除充电接口之前,先不要着急,将充电线连接好并开始充电,此时用万用表检测焊点电压就可以分清楚正负连接线。之后的改机过程就全凭自己发挥了,是换掉还是另开一个口,换成什么,都随意,因为3DS也是5V的标准充电电压,所以无需费神考虑升降压问题。

但是需要注意的是,最好在完成之后先检查有无短路再准备测试插电,同时对暴露的焊点/飞线进行绝缘,简单地涂上一点热熔胶即可,当然绝缘涂层之类也没有问题。最后,我没有查到3DS的满电停充机制的运作方法,尚不明确是否需要原装充电器才可以,在改机之后最好注意一下充电时间和温度,以免意外发生

R4烧录卡的使用

R4烧录卡介绍

R4烧录卡是一种存在时间很长的破解3DS的手段。3DS的设计上存在一个很独特的地方,就是当它在运行原生NDS/NDSi/DSWare系列的应用的时候,它会进入DS兼容模式,此时,原本的ARM11停止工作,切换至ARM9,以原本NDS的分辨率和主频,构架等等直接运行NDS的应用。而在3DS发售之前,NDS早已被破解,破解方法包括一种称为烧录卡的工具,它是利用某种方法,向第三方制作的卡带中烧写进游戏的ROM,并且做到可以更换游戏烧写,相当于无需购买卡带,只需下载ROM,烧录即可。3DS最初的破解也采用了类似的方式,有团队研发了R4烧录卡,是市面上流行的烧录卡的一种,能够在其中装入一张Micro SD卡来放置NDS的游戏ROM。后来因为Nintendo和一众游戏开发商的起诉,R4团队解散,但是在几年后重组,并且继续发行烧录卡,采用了全新的设计,但是仍然叫做R4烧录卡,现在市面上的都是这种。

我的R4烧录卡获取渠道

因为R4官方经过消失重组,中间的真空时间出现了大量的山寨R4卡,数量有几十种之多。不过归结一下无非是模仿的R4,R4i,R4-SDHC,R4i-SDHC这几种,所以大同小异。我购买的R4烧录卡的官方网址在这里,也是一种山寨卡,但是支持还不错。上面可以查到中国大陆的经销商。我选择的是2020版的金卡,能够支持32G的Micro SD卡。不同的R4烧录卡之间略有区别,具体参数已经由官方给出。

R4烧录卡配置方法

如果你是在我刚才说的官方经销商处购买并且选择了配置好的Micro SD卡套餐,那么恭喜你,这一小节的操作你可以直接跳过,除非你希望更新内核。而对于使用各种型号的R4烧录卡,或者没有使用配置好的Micro SD卡的人而言,你需要做的第一步就是找到你的烧录卡的官网(通常直接印在烧录卡上),并且弄明白你的烧录卡支持多大的Micro SD卡。之后你需要一张这么大的Micro SD卡,并且将其格式化为FAT32文件系统。因为目前烧录卡最大支持32G的Micro SD卡,所以直接用系统自带的格式化工具即可。如果有一天你需要格式化更大的设备,Disk Genius是一个不错的选择,当然也可以用别的。完成格式化之后,你需要在官网下载最新的内核并且解压放在Micro SD卡的根目录下。需要注意的是,这篇文章写成的时候,R4官网并未给出2020版的内核下载链接,也没有给出针对11.13.x的内核。因为3DS系统升级的时候有可能导致R4卡不能用,此时需要更新内核,如果没有对应内核表示R4卡无法在当前系统下使用。但是官方经销商售出的配置好的烧录卡自带这一内核,目前不确定其来源,但是确定能够稳定使用。放入内核之后就可以往其中添加自己喜欢的ROM了,需要注意R4烧录卡目前无法游玩GBA游戏,如果确实有需求的话可以选择其他的烧录卡,或者参考上文的RetroArch部分。

在这一款R4卡的网站上下载到的是基于原版2018版本修改的内核,是标准R4内核的一个变种。但是经销商发售的R4卡默认配置的是苹果派的内核,因为山寨卡无法直接使用正版R4内核。经过我的测试,R4i-SDHC的系列内核都可以使用,除了带正版检测的正版内核。在自己的使用中可以根据自己的需要配置。

Timebomb及其解决方案

这一款R4卡是为数不多的带有Timebomb限制的R4卡。当主机时间超过一个设定时间的时候,将无法加载R4内核。这一功能是在这个厂家仿制另外一款R4的时候一并仿制过来的,比较烦人。据说被仿制的R4因为官方已经停止更新,所以放出了不含Timebomb的内核,不过我没有确认,因为固件不兼容。对于Timebomb,最标准的解决方案,也是厂家希望你使用的解决方案就是下载安装新的内核和固件。虽然比较麻烦,但是能够使用R4的全部功能。当然,也可以通过将主内核更换为YSMenu的方式来解决Timebomb,因为YSMenu并不包含这一代码,相当于不受时间影响。我比较推荐者一个方法,因为我个人比较喜欢YSMenu,功能全面而且扩展性强,因为它是一个玩家自制内核,可以找到各种修改版和源码。如果你的卡带有Timebomb,并且无法或者不想使用上面的方法,还有一个解决办法就是把机器时间调到Timebomb触发时间之前。但是时间调整会对3DS的正常使用和游戏造成影响,不建议这么做。

R4烧录卡使用教程

本小节基于2020版金卡进行介绍。

R4烧录卡的使用非常简单,插入卡之后3DS主界面将会增加一个“Touch! Bomberman Land”的卡带图标,这是R4烧录卡的入口。点击进入,之后将有3个菜单选项,游戏,娱乐,以及设置。

  • 游戏:游戏栏目将直接在R4内核自带的文件管理器下扫描卡内的.ndsROM文件,最多显示300个,按B键可以切换游戏或应用的具体项目,例如作弊,存档,单独设置等等。按A启动应用。
  • 娱乐:娱乐栏目将启动YS管理器,是一个第三方开发的烧录卡用NDS项目管理器。使用方法在下屏幕最上方有介绍,其中按START可以打开菜单,可以选择进入多媒体管理器。这一操作将启动MoonShell2,是一个烧录卡用多媒体管理器,可以播放音视频,阅读电子书等等。总而言之,这一个栏目的功能最为强大。
  • 设置:设置将开始调整烧录卡自身的设置,包括是否启用各种支持,主题更换等等。

结语

在鸽了接近一个月之后,这篇汇总终于基本完成了。但是折腾技术是没有止境的,还有很多我做过的有趣尝试没有记录,在之后我将不时补充,以新的文章的形式发出来。对我而言它不只是一个3DS,还是一个试验有趣技术和测试自己能力的平台,我会不断尝试新的东西。