这款主机的破解历史是一段漫长而有趣的事件序列。 最初,人们的兴趣集中在破解游戏卡读卡器(试图复制NDS的成功),然后转向更复杂的、只涉及操作系统的方案。
主要目标
首先,我们先来描述这个系统的两个主要目标:
- 游戏/CTR卡读卡器:这是加载实体游戏的地方。 历史上,NDS实施了一个弱安全机制,最终被破解,随后导致烧录卡的涌入。
- 操作系统:这个区域负责在执行任何程序之前验证其真实性和完整性(除了启动ROM)。 理论上,禁用这些机制将允许在没有任何限制的情况下执行自制程序(未经授权的应用程序)。
它们可能看起来是两个独立的战线(类似于Xbox 360和Wii U),但在这款主机的情况下,两者是相互交织的。 你很快就会看到。
读卡器战线
读卡器是CPU与游戏卡内存芯片之间的接口。 它的唯一工作是利用命令简化通信。
在CTR卡带的ROM/闪存内部,系统会找到一个名为NCSD的安全格式数据块,这将由操作系统处理,操作系统将负责对其进行认证、验证和解密。
总之,似乎操作系统全权负责与读卡器的通信,所以我们继续下一个战线。
操作系统战线
我们继续之前,如果你不熟悉对称和非对称加密系统,我建议阅读本系列之前的文章。 它们还将解释为什么像这样的系统如此依赖非对称加密系统(如RSA和ECDSA)。
专用硬件
如果你怀疑ARM11缺乏保护整个系统的强大能力,那你是对的。 任天堂也知道这一点,所以他们格外小心,捆绑了额外的组件来弥补:
- ARM11核心实现了XN标志,ARM9捆绑了内存保护单元(MPU),这意味着CPU不会仅仅因为当前程序告诉它这样做就从内存中的任何位置执行代码。
- 如前所述,ARM9充当专用处理器来处理所有与安全相关的任务,而ARM11 MPCore执行游戏。 此外,ARM9专门连接到几个隐藏的加密加速器:
- 一个AES引擎,无需消耗(和暴露)CPU资源即可执行AES-128加密/解密。 这继承自NDSi,但现在可以存储多达64个密钥,并可以在多种分组密码模式下运行,包括CTR、CCM、CBC和ECB。 每个密钥槽还具有自己的密钥混淆器,这意味着可以使用两个任意密钥生成最终的AES密钥。 此外,密钥混淆器不允许任何人读取生成的密钥,只能将其视为黑盒来加密/解密数据。
- 一个RSA引擎。 相比之下,它使用给定的RSA公钥执行RSA加密/解密。 这次,它只包含四个密钥槽,并且没有密钥混淆器 。 但是,它仍然是一个只写空间,这意味着没有人能够读取存储在那里的密钥。 你很快就会看到,这个系统充满了RSA-2048和RSA-4096签名,这解释了为什么这个组件与AES引擎一样关键。
- 一个伪随机数生成器(PRNG):这些寄存器每次读取时都返回不同的值。
- OTP(一次性可编程)内存,存储主机独有的密钥、主机信息和CTCert(用于与任天堂服务器进行身份验证的ECDSA私钥)。 为了进一步复杂化,这些密钥将使用Boot9中找到的AES-CBC密钥进行加密。 最后,该区域包含一个标志,一旦不再需要,就禁用其访问。
- 最后但同样重要的是,eMMC内存包含一个名为CID(卡识别)的寄存器,并存储有关eMMC制造的独特信息,这些信息将输入到AES的密钥混淆器中以进一步混淆。
最重要的是,所有东西都密封在一个SoC中,包括两个引导ROM(Boot9和Boot11)。 这些是未加密的,但由于它们无法访问,因此它们不构成威胁。
信任链
考虑到我们已经介绍了RSA、AES和引导ROM作为安全系统的一部分,这应该不足为奇。 为了让你大致了解任天堂3DS的信任链:
- ARM9的引导ROM(Boot9)捆绑了用于解密和验证NAND内容的公钥。 AES引擎将使用Boot9中存储的密钥进行初始化。 通过此,将访问OTP内存的内容。
- eMMC的内容使用Boot9的AES密钥结合eMMC CID进行解密。
- NAND和CTR卡使用NCSD格式进行格式化。 NCSD存储一个头和最多八个分区的集合。 NCSD头包含使用RSA-2048和SHA-256的签名,这相当强大。 为了解密此签名,系统会在引导ROM或ITCM内存中找到其RSA公钥(后者先前已从OTP解密并复制)。 选择取决于NCSD块的来源(NAND或CTR卡)。
- 一旦NCSD块被验证,系统就会访问每个分区。 这些分区使用NCCH(Nintendo Content Container Header)格式构建。 无论数据是从NAND、CTR卡还是SD卡中提取的,NCCH块也包含RSA-2048 + SHA-256签名 ,并且其负载使用AES-128 CTR进行加密。
- 此外,已安装的软件以title(类似于Wii系统)的形式进行分类。 在这种情况下,所有标题都使用RSA-2048、RSA-4096或ECDSA进行签名;加上SHA256 。 公钥存储在
NATIVE_FIRM中。- 令我惊讶的是,有些签名是ECDSA形式的,考虑到没有安装硬件加速器。
- 一旦负载经过验证和解密,系统就会找到ARM11可以读取的可执行文件、库或资产(即手册、图标或横幅)。
请注意,此解释侧重于主3DS固件(NATIVE_FIRM)。 然而,TWL_FIRM和AGB_FIRM也将实现各自的加密。
随着时间的推移,黑客掌握了这款主机的保护方式,任天堂进一步调整了信任链,以阻止NCCH数据的解密。 在某些方面,它达到了目的,但在另一些方面,任天堂最终暴露了太多。 你将在以下章节中看到。
操作系统功能
一旦NATIVE_FIRM启动并运行,除了上述信任链之外,还存在以下安全机制:
- 用户程序只能通过系统调用访问硬件功能,这些调用由Kernel11酌情授权。 根据硬件的不同,它还将涉及Kernel9。
- 从架构角度来看,ARM11用户程序完全不知道ARM9及其相邻组件。
- 用户应用程序是沙盒化的,这意味着它们无法访问彼此的空间。
- 最后但同样重要的是,随着在线服务的增加,用户将需要合法的游戏卡和更新的固件才能访问新功能。这将阻止那些可能考虑将主机保持在易受攻击固件上的用户。 这将阻止那些可能考虑将主机保持在易受攻击固件上的用户。
- 从eShop下载的软件也有其怪癖。 在这种情况下,标题的许可证以Ticket的形式编码,票证再次使用RSA-2048和SHA-256进行签名 。 Ticket要么链接到单个主机ID和eShop的用户帐户;要么对任何主机都是全局的。 此外,任天堂在下载标题的元数据中使用额外的RSA证书,以进一步扩展信任链 。
缺陷
尽管任天堂3DS采用了现代保护技术,例如非对称加密和大量可用硬件,但在其实现中仍然存在一些根本性缺陷。 请看黑客社区发现的以下内容:
- 虽然ARM11中的XN标志工作正常,但Kernel11以一种方式设置AXI WRAM(Kernel11所在的位置)中的页表,即它授予整个内存块读、写和执行权限 ,使得XN的功能有点无用(至少对于保护Kernel11而言)。
- 在系统版本
3.0.0之前,OTP内存从未被隐藏 ,这意味着借助任何漏洞,OTP密钥都可以毫无问题地提取。 - Process9和Kernel9之间没有分离,因为Kernel9提供了一个系统调用,允许Process9以Kernel9权限执行任何功能。
- 没有实现ASLR(地址空间布局随机化),这使得面向返回编程(ROP)可用于利用目的。
- 同样,没有针对系统降级的保护。
- 再次,这个系统也带有一个基于WebKit的Web浏览器,它不断受到攻击(特别是如果其使用旧分支)。
这不仅为首次攻击尝试铺平了道路,而且在任天堂试图修补其系统时,也将成为其限制。
击败
任天堂3DS和自制程序的历史是一个成功的故事。 大量的视频教程可以证明这一点。 然而,这段经历也揭示了非常巧妙的发现,从最初需要专有且昂贵的设备,演变为只需在电脑上点击几下即可完成。
DS烧录卡时代(2011-2013)
从何说起呢? 嗯,就从任天堂DSi停下来的地方开始:烧录卡。
2008年任天堂DSi发布后,任天堂加入了一个新元素来对抗烧录卡:一个列出所有授权卡的白名单文件,从而阻止"未经授权的卡" 。 烧录卡制造商绝没有停止生产,他们只是推出了旧烧录卡的新变体,允许用户重新编程卡带头,使卡能够识别为不同的授权游戏,而任天堂则不断修改列表(通过软件更新)。
这种方法也涵盖了3DS,遵循与NDSi相同的过程。 他们绝不会获得独占的3DS硬件访问权限,但这就是自制程序在这款主机上开始的方式。
3DS烧录卡时代(2013-2016)
这款主机的前两年并没有取得太大进展(这对任天堂来说是一项重大成就!)。 然而,在2013年8月,情况发生了转变......
第一张_真正_的3DS烧录卡
忽略了从未出现的"3DS烧录卡"的预告。 Gateway3DS可以被认为是第一款可以买到的3DS烧录卡。 然而,其说明并不像DS的那么简单。 你可以通过查看盒子里的内容来感受这一点:
- 一张列入白名单的DS烧录卡(称为_蓝色Gateway_),其唯一目的是运行Gateway制作的NDS ROM。 作为"安装"过程的一部分,用户首先需要运行这个"游戏"并按照说明操作。
- 一个要放置在3DS SD卡中的Launcher.dat文件。
- 一张3DS烧录卡(称为_红色Gateway_),用于加载3DS游戏。 像任何其他烧录卡一样,它也带有一个microSD卡槽,用于存储3DS游戏。 然而,最大的区别在于3DS游戏镜像被刷入microSD卡中,这意味着一次只能存储一个3DS游戏。
- 这说得通,因为RSA签名不能伪造(至少,这在计算上是不可行的)。 然而,复制游戏的精确克隆(NCSD块)却成功了。 暂时忘掉自制程序吧。
完成安装过程后,用户必须按照以下说明运行任何游戏:
- 插入_红色_Gateway卡。 暂时什么都不会出现。
- 打开3DS设置应用程序,导航到DS配置文件编辑器屏幕。
- 出于某种原因,3DS将重启,刷入的3DS游戏将显示出来。
- 玩完游戏后,返回HOME菜单将在3DS的SD卡中创建一个存档文件。
就这样,用户现在可以从网上下载3DS ROM并在他们的主机上运行了......但这怎么可能呢? 任何人是如何设法提取解密游戏的? Gateway3DS使用了(甚至发现了)哪些漏洞?
事实上,这个产品内部隐藏着大量功能。 让我们一步步分析。
Gateway3DS内部

3DS设置应用程序中的DS消息编辑器。 字符限制仅由图形界面强制执行。
2012年某个时候,黑客"ichfly"在NDS的旧配置文件编辑器中发现了一个有趣的现象,该编辑器存在于NATIVE_FIRM和TWL_FIRM中。 在其中一个文本字段中,你可以输入一个"消息"值,然后该值将作为问候语显示在PictoChat聊天室中。 3DS的设置应用程序不允许你输入超过允许的字符数。 然而,没有任何东西可以阻止任天堂DS游戏这样做。 这种情况发生时,打开3DS的系统设置应用程序(称为MSET)会崩溃,有趣的是,这是由堆栈溢出引起的。 这是否让你想起某个马的名字?
现在,Gateway神秘的Launcher.dat是设置应用程序通常读取的配置文件。 发生的情况是Gateway制作了他们自己的Launcher.dat,以嵌入用于其漏洞利用后续阶段的数据。 奇怪的是,Launcher.dat存储在NAND中(而不是SD卡中),因此最初的漏洞利用链也改变了设置应用程序从何处加载此文件。
如果你将此与Process9/Kernel9漏洞结合使用,你就可以获得该主机上的完全执行权限,并可以开始摆弄系统服务。 OTP和引导ROM等某些硬件仍然无法触及。 然而,这是一个重要的里程碑。
到目前为止还不错吧? 现在让我们将这些信息与Gateway的软件包联系起来:
- DS/蓝色烧录卡只是安装损坏的DS配置文件(这将触发MSET漏洞利用)的入口点。
- 3DS/红色烧录卡包含一个用固件编程的ProASIC3 FPGA(由Gateway分发)。 FPGA和microSD卡结合起来模拟零售游戏。
- Launcher.dat是MSET漏洞利用的有效载荷。 它捆绑了一个内核漏洞利用和一系列系统补丁。 换句话说,一个自定义固件(CFW)。 运行Gateway CFW的主机可以提取游戏或使用红色烧录卡加载3DS游戏。 令人惊讶的是,Gateway还制作了他们的CFW,使其需要插入红色烧录卡才能工作(烧录卡中的DRM机制,情况逆转了吗?)。
后续轶事
直到2013年11月,Gateway似乎一切顺利,此时出现了大量其卡的克隆产品。 "R4i Gold 3DS Deluxe"加入了一些健康的竞争,尽管它使用了一些Gateway的固件代码。 作为报复,Gateway3DS采取了严厉措施:后续的Gateway3DS固件更新如果检测到克隆产品,就会损坏3DS NAND。 真是讽刺!
2013年10月,黑客"Smealum"发布了一段视频,展示了他自己的基于MSET的实现,该实现转而引导存储在3DS SD卡中的NATIVE_FIRM副本 。 这意味着卡在系统版本4.5.0上的主机可以在不失去运行漏洞利用能力的情况下引导更新的系统版本。 Smealum将此功能称为redNAND(来自"重定向NAND"),虽然它没有公开发布,但Gateway后来在其2013年12月发布的CFW中整合了此功能(现在称为emuNAND) 。 这成为Gateway3DS的一个强大卖点。
Gateway使用了什么Process9/Kernel9漏洞尚不清楚。 然而,在2013年12月,Fierce_Waffle、Xerpi和Megazig逆向工程并开源了Gateway的有效载荷,形成了一个名为"3DS Toolkit"的工具 。
在接下来的几年里,第二代3DS烧录卡将出现在市场上。 例子包括Stargate、Sky3DS和数十个克隆产品。 这次,它们不依赖操作系统漏洞来工作,并且可以从它们的microSD卡加载多个游戏。 然而,它们的用途将完全基于复制零售3DS游戏(包括它们的签名),换句话说,仅仅用于盗版目的。
任天堂迅速采取行动
拥有可更新的系统软件意味着任天堂不必坐视不理地看着自己的系统被破解:
- 2013年3月,系统更新
5.0.0-11更新了设置应用程序,暂时修复了MSET漏洞 。 如果你查看时间线,这发生在Gateway3DS发货之前! 因此,用户必须停留在旧版本上。- 直到2015年,Gateway团队才发布了一个重要的固件更新。 从那时起,烧录卡依赖于一个新的Web浏览器漏洞(称为spider exploit,由MathewE发现)作为入口点。 这种方法一直持续到Gateway3DS寿命结束。
- 2013年12月,系统更新
7.0.0-13修复了与MSET结合使用的内核漏洞,最重要的是,将RSA模块添加到信任链中以解密NCCH块(游戏数据所在的位置) 。 RSA密钥在Kernel9加载完成后清除,这意味着现有漏洞将无法解密采用新7.0.0加密系统的游戏(除非在Kernel9启动之前使用漏洞)。 - 由于Gateway3DS的Launcher.dat文件包含任天堂的版权代码,后者公司向包括GBATemp在内的许多论坛发送了停止函,这反过来阻止了这些文件的分发。
一如既往,这标志着另一场猫捉老鼠游戏的开始。 不过,长话短说,系统更新9.3.0(2014年12月发布)最终通过修补其私有内核漏洞 终结了Gateway3DS。 从那时起,Gateway3DS的固件更新只改进了emuNAND对最新系统版本的支持(对于那些没有更新到破坏性更新的用户)。 2016年,Gateway发布了最后一个更新。 与此同时,Sky3DS享受支持直到系统软件11.0(2016年5月发布),此时任天堂彻底将其列入黑名单。
我想现在可以公平地说,与任天堂DS正版卡提供的"即插即用"体验相比,3DS烧录卡市场最终对普通用户来说过于动荡和不可靠。 到目前为止,这对任天堂来说总算是一些好消息。
自制程序黎明(2014)
2014年,在盗版导向的开发圈子中,出现了以自制程序为中心的解决方案。 破解3DS仍然需要旧系统版本、Gateway3DS卡和emuNAND——但一旦替代工具获得关注,这种情况就会慢慢改变。

Plutoo、Derrek和Smealum在第32届混沌通信大会(2015年)上展示他们的发现 ,以下段落将解释其中大部分。
开源SDK
最初的自制程序以Launcher.dat文件的形式出现,这些文件是在devkitARM(用于基于ARM的CPU的通用工具链)和一套脚本的帮助下生成的。 Fierce Waffle提供了"ROP Loader",这是一个工具包,包含一个用于安装MSET漏洞利用的DS程序;以及一个触发Kernel11漏洞利用的Launcher.dat。 值得指出的是,当时还没有任何工具可以帮助访问3DS的独占硬件。
2014年初,Smealum在yellows8、ichfly、WinterMute、fincs、mtheall和plutoo的合作下,发布了ctrulib,这是一个开源C库,旨在促进自制程序开发。 现在它被称为libctru,由devkitPro团队维护,他们已将其整合到他们的工具链中。
一年后,neobrain发布了nihstro,一个PICA200着色器汇编器和反汇编器,使得PICA200的编程工作变得更加愉快。
要运行自制程序,用户可以选择将自制二进制文件刷入microSD卡,然后使用Gateway3DS引导它(因为他们的CFW已经禁用了签名检查)。
Ninjhax链

Homebrew Launcher,灵感来自标志性的Wii对应产品。iconic Wii counterpart. 它的到来标志着3DS自制程序的复杂化。
Gateway的毒性更新给用户留下了痛苦的印记。 寻找非专有替代方案的时刻已经到来。
幸运的是,人们正在为此努力。 在2014年下半年,Homebrew社区迎来了一个新的里程碑:Smealum发布了Ninjhax,一个由以下组件组成的软件包 :
- 一个精心制作的QR码,供"Cubic Ninja"扫描,这是一款允许使用QR码共享用户设计关卡的游戏。 这成为了一个新的入口点漏洞。
- GSPWN:一个用户态漏洞,其中GPU的DMA用于覆盖HOME菜单的堆。 此外,与ROP结合导致权限提升。 这导致能够创建和终止进程、SD卡访问、解密和转储标题以及覆盖可执行数据。
- Homebrew Launcher:一个由于GSPWN而在HOME菜单进程下运行的新服务。 它提供了一个图形用户界面来加载未签名的自制应用程序(使用新的便携式.3dsx格式)并接管进程。 启动器通过打开一个具有足够权限的官方应用程序,然后用GSPWN劫持它,用自制代码替换代码,最后执行它来加载自制程序。
- 凭借其修改用户数据的能力,Homebrew Launcher还可以用于安装随着发现而出现的替代入口点(即 OotHax、Ironhax等)。 从而减少对Cubic Ninja的依赖。 一个值得注意的售后漏洞是MenuHax,它利用了HOME菜单主题引擎中的一个漏洞,并在启动时触发,使其成为启动有效载荷的永久解决方案。
- 如果你好奇,Wii U也经历了类似的方法,作为运行Homebrew的早期尝试。
请注意,Gateway3DS这次不在考虑范围内。 无论如何,Homebrew Launcher仍然在用户态的范围内(这意味着自制应用程序只能访问64MB RAM,并且无法访问音频DSP )。
获得Kernel11访问权限
事实证明,在Ninjhax发布之前,2014年2月,yellows8获得了一个非常重要的发现:一个导致Kernel11权限的漏洞。
Kernel11使用一个名为memchunk header的结构来跟踪FCRAM中未使用的内存页。 这些数据以链表的形式存储,每个头包含前一个和下一个头的地址。 嗯,memchunk header存储在FCRAM中,可能由于GSPWN等其他漏洞而被覆盖。 因此,memchunk header可以被修改以授予用户态对AXI WRAM的访问权限。 通过这样做,攻击者最终可以修改Kernel11的页表,以授予用户空间所有FCRAM访问权限,从而导致对Kernel11的任意控制。 这个发现被称为memchunkhax。
然而,任天堂在2014年12月修补了它。 但是,一个名叫derrek的黑客发现了一个竞态条件,其中memchunk header的"next"指针可能被替换为精心制作的指针的位置。 因此,当Kernel11尝试访问精心制作的memchunk header时,它最终将以Kernel11权限执行任意代码。 就这样,memchunkhax2应运而生。
多亏了新的权限提升,自制软件获得了对系统(直到ARM9区域)的完全控制......但为什么要止步于此呢?
最受欢迎的工具
考虑到Gateway3DS的emuNAND、Ninjhax、CTRLib和新的内核漏洞的可用性,新软件的涌入太过巨大而无法忽视。 举几个例子:
- CtrBootManager by cpasjuste:HomeMenuHax链中的一个额外阶段,充当引导管理器,允许选择各种有效载荷。
- 不久之后,一个新的功能扩展实现出现:m45t3r的BootCtr 。
- RxTools by Roxas75:Gateway3DS用户的瑞士军刀 。 这被用作Gateway3DS二进制文件的替代品。 它包含一个名为RXMode的CFW。 这个替代的开源解决方案禁用了3DS二进制文件上的签名检查,提供了emuNAND,并移除了
TWL_FIRM的白名单检查等等。- 其他CFW很快就会出现,例如CakesFW、ReiNand和Pasta CFW。 它们服务于不同的目的,并包含自己的修改集。
- Custom HomeMenu Manager (CHMM) by Rinnegatamante:允许从SD卡安装HOME菜单主题。
- AGB_FIRM Signature patcher by Riku。 将任意Game Boy Advance ROM加载到AGB_FIRM中 ,最终扩展了任天堂大使游戏被遗弃的目录。
- Ftpbrony by mtheall(后来称为ftpd):一个简单的FTP服务器 。
- DevMenu:不完全是一个自制应用程序,而是从开发单元中_窃取_的任天堂编写的应用程序,允许用户将应用程序包(以"CIA"文件的形式)安装到系统中,就像eShop在幕后所做的那样。
- 几个月后,转而使用BigBlueMenu,它也来自任天堂的开发套件。
- 直到几个月后才出现一个真正的开源解决方案。 Steveice10的FBI成为安装CIA文件的标准无困境工具(注意名字中的双关语) 。
新主机,永久性修改(2015)
当自制开发者忙于修改他们的系统时,任天堂发布了一款_新_产品,令所有人大吃一惊:New 3DS。
除了额外的硬件(本文中已提及)之外,引导过程还增加了一个新阶段:arm9loader。 通过此,任天堂通过添加新密钥增强了其信任链,这些密钥必须借助OTP内存的哈希值进行解密(因此,使用主机独有的值)。 然而,arm9loader和新密钥仍然存储在NAND中,这意味着内容可能被覆盖。 这导致了2015年最具破坏性的漏洞之一,涉及Plutoo、Yellows8和Delebile。
arm9loaderhax
arm9loader的第一次实现存在缺陷:ARM9系统的解密密钥从未从AES引擎中移除。 因此,借助额外的漏洞利用,可以重构部分加密密钥 。 因此,任天堂很快再次尝试了arm9loader v1.1(在系统更新9.6.0中发现)。 巧合的是,这导致了一个更强大的漏洞:Plutoo发现用于解密ARM9系统的密钥从未经过验证。 因此,arm9Loader在引导NATIVE_FIRM时,即使解密数据错误(即 垃圾)也会引导。 此外,如果Firm0(NATIVE_FIRM的第一个副本)无法引导,Boot9将尝试加载Firm1,而Firm0的残余部分则留在ARM9的RAM中。
总而言之,如果:
- NAND被(以某种方式)修改,使得加密的Firm0末尾包含额外的精心制作的代码。
- ARM9 OS密钥被篡改,使得解密的Firm1将包含一个跳转到Firm0精心制作代码的跳转指令。
由于现在可以访问Kernel9(尽管通过困难的方式),因此投入了工作来简化该过程(即开发自动化安装程序)。
arm9loaderhax的影响
新的发现意味着新的发展。 在接下来的几个月里,更先进的工具将成为每个自制程序用户"必备"列表的一部分。
首先,一个"一统天下"的新CFW发布了:Luma3DS 。 在众多功能中,Luma3DS提供:
- 移除签名和区域检查。
- 分层文件系统,将文件操作重定向到SD卡(启用游戏修改)。
- Rosalina菜单,一个游戏内菜单叠加层,无需关闭任何应用程序即可访问许多实用程序。
最初,Luma3DS是使用BootCtr引导的,但一旦arm9loaderhax成为任何3DS事实上的破解方案,情况就改变了。 因此,arm9loaderhax + Luma3DS的组合成为任何破解教程的一部分。
随之,其他软件也出现了:
- Godmode9 by d0k3:下一代瑞士军刀,利用ARM9漏洞授予的权限 ,使用户能够读取和修改主机的所有角落。 它可以由arm9loaderhax、Luma3DS或任何其他兼容的破解方案加载。 现在,漏洞越强大,提供的功能就越多。 功能示例包括文件浏览器和NAND备份。 此外,它还通过脚本进一步扩展。
- Anemone3DS by astronautlevel:凭借众多功能,它很快成为管理HOME菜单主题的_应用程序_ 。
- nds-bootstrap by Rocket Robz:顾名思义,它从SD卡加载任天堂DS软件(ROM和自制程序) 。 虽然它旨在支持三款掌机(3DS、DSi和DS,后者需要烧录卡),但从3DS加载它将启动
TWL_FIRM,这意味着根本没有模拟。 它最常通过"TWLMenu"(现在是"TWiLight Menu++")使用,这是nds-bootstrap的前端。
值得一提的是,在撰写本文时,这些是安装在被破解3DS上最受欢迎的实用程序。
黄金时代(2016-2017)
然是一个通用且强大的解决方案,但安装arm9loaderhax仍然被认为是一项复杂而危险的活动。 这不仅需要预先转储主机的OTP内存(使用其他漏洞),而且忽略任何一步都可能将一台正常工作的任天堂3DS变成一块砖头。
但不用担心,新的开发正在进行中(考虑到任天堂仍在努力保护其主机,这是一项巨大的努力)。

naehrwert、nedwill和derrek在第33届混沌通信大会(2016年12月)上展示了一系列新发现。
在33C3大会上,derrek公布了两项重大发现,这导致了后续的里程碑。
提取Boot9
由于某种原因,ARM9的RAM内容在复位后不会被清除。 因此,Derrek发现,通过使用外部硬件,他可以利用任意代码覆盖ARM9 RAM中(先前从Boot9复制的)异常向量。 然后,复位系统,在非常精确的时序下(也使用外部硬件)使其发生故障以触发异常,并希望ARM9执行了新代码。 这将包括类似"将Boot9的所有内容复制到RAM中的X位置"的操作。
果然,这奏效了。 通过此,Derrek和其他人设法分析了Boot9 ROM的内容,从而发现了新的漏洞。
Sighax
Boot9的一个漏洞是Sighax ,这是Boot9的RSA-2048签名验证中的一个缺陷。 类型为"PKCS #1 v1.5"(该系统采用)的RSA签名包含一个名为填充的区域以防止被逆向。 此外,它们存储一个使用"ASN.1"模型编码的SHA-256哈希,这保证了被解密数据的真实性。
现在,Boot9中找到的相应解析器缺乏多项保护,包括边界检查。 最终,这使得Derrek能够生成一个精心制作的RSA签名(通过暴力破解),该签名在任何数据上都将始终成功。 通过这样做,整个信任链被废止。
对于好奇者,我建议阅读GBATemp上一篇更冷静地描述该理论的全面文章 。
有了这个,现在就可以为ARM9核心制作一个固件,用精心制作的RSA签名对其进行签名,将其安装到NAND中,然后Boot9将"直接运行它"。 现在的问题是,普通用户如何使用未修改的主机来做到这一点?
Boot9strap
时间来到2017年。 大多数人都知道Sighax的存在,但只有少数人能够应用它,这都是因为新方法需要一个精心制作的RSA签名和对NAND的写入访问权限,这两者都来之不易(而且别忘了任天堂仍在通过系统更新严厉打击用户态漏洞)。 幸运的是,Sighax正在民主化进程中。
尽管Derrek的公告没有包含合适的RSA签名或Boot9的副本(我猜是出于版权原因),但这并没有阻止黑客SciresM和Myria找到替代资源,使他们能够制作RSA签名。
总而言之,他们发现1.0.0之前的系统版本与Sighax之前暴露的漏洞存在相似之处,并且,多亏了这一点,他们能够开始暴力破解RSA签名。 结果是成功的,最终在大量英伟达GPU的帮助下找到了匹配。
现在他们可以制作Boot9会接受的替代固件了,他们需要找到一种方法将Boot9重定向到他们的有效载荷。 挑战是在Boot9隐藏其引导ROM之前重定向执行。 为了解决这个问题,两人通过ARM9的异常处理程序找到了一条路径。 ARM9无法覆盖这些处理程序,但NDMA可以——而且CPU可以命令NDMA这样做。
总而言之,该团队能够使用NDMA用跳转到任意代码填充异常处理程序,然后指示ARM9复制到NULL,导致一个将以无限制访问权限执行有效载荷的异常。 最终,这被打包在一个名为boot9strap的解决方案中,并充当一个替代引导加载程序,可以从SD卡加载有效载荷或继续正常引导。 因此,Godmode9添加了新的选项来备份OTP和引导ROM。
因此,boot9strap迅速取代arm9loaderhax,成为以最高权限加载任意代码的事实解决方案。
Ntrboot

一些在ntrboot发现后销售的DS烧录卡有一个开关,可以启用"3DS模式"(见照片右上角),这可以触发ntrboot。
此时,只剩下一个问题:用户如何安装boot9strap?
嗯,团队并没有止步于此。 通过查看他们最近的Boot ROM转储,他们发现了一个有趣的例程:在引导过程中,Boot9会查询是否按下了特定的组合键并且盖子已关闭。 如果是,Boot9将(以完全权限)重定向执行到插入的NDS卡。
因此,ntrboot应运而生:将一个sighax签名的有效载荷刷入NDS烧录卡,使用磁铁模拟关闭的外壳,然后按下所需的组合键。 即时获得Boot9权限。
如果这还不够,任天堂无法通过软件更新修复这些漏洞,因为它们硬连接在Boot ROM中。 一个可能的解决方案是推出新的硬件版本,然而,从未出现过。
剩余的岁月(2018年至今)
现在自制社区已经完成了它的巨著,任天堂3DS的剩余岁月将只看到破解方法的简化,所有这些都共享相同的目标:安装boot9strap。

随着破解3DS的方法急剧发展,有时对新用户来说发展得太快,像3ds.hacks.guide这样由社区维护的网站目前被誉为最可靠和最新的教程集。
此时,野外有许多漏洞:"SoundHax"、"Safehax"、"Browserhax"......太多了无法在此提及。 对于好奇者,3DBrew提供了一份全面的列表。
为了让你了解2023年漏洞利用变得多么优雅,让我向你展示一种用户依赖的常见方法,它不需要额外的硬件。 这个过程被称为"seedminer + BannerBomb3",它结合了以下漏洞,其中大部分由zoogie编写:
- seedminer:安装在3DS SD卡中的用户数据使用AES-128-CTR加密。 其密钥由一个名为
movable.sed的文件中找到的其他密钥构成(主机独有,存储在NAND中)。 嗯,后来发现这个文件可以通过使用主机的Friend Code、SD卡中的子目录名称(由主机生成)和短期暴力破解来重建。 一旦提取,这些密钥允许篡改SD卡中的DSiWare数据。 - BannerBomb3:一个当设置应用程序尝试解析已安装DSiWare游戏的横幅时,导致堆栈溢出的漏洞。 结合seedminer,这作为具有Kernel11权限的入门级漏洞。
- 现在,如何利用BannerBomb3(即使用哪个有效载荷)取决于用户当时遵循的教程。 为了简单起见,有两条路线:
安全模式路线
这条路线包括利用SAFE_FIRM,并在早期教程中进行了描述:
- unSAFE_MODE:用户可以通过在主机启动期间按下组合键进入安全模式,然后替代固件允许用户执行系统更新,这对于修复主机很有用。 嗯,zoogie发现代理设置可以溢出 。 因此,在安全模式下提供用户态执行。
- safehax:一个"firmlaunch-hax"的移植版本,可在SAFE_FIRM下工作。 任天堂最初在2015年2月发布的系统更新
9.5.0中修补了它。 然而,SAFE_FIRM是出厂固件的不可变副本,因此它具有NATIVE_FIRM曾经_享有_的旧漏洞。- firmlaunch-hax:当固件启动时,ARM9将固件头存储在FCRAM中进行验证和解析。 借助竞态条件,执行可以控制ARM9,因此可以启动boot9strap安装程序。 任天堂通过将头保留在ARM9 RAM中来修复此问题,尽管这在SAFE_FIRM上未修补。
HOME菜单路线
一段时间后,新的教程提出了新的路线。 这利用了HOME菜单,采用了一种新的Menuhax风格的破解:
- menuhax67:屏幕亮度配置值可以溢出,导致从HOME菜单进行用户态控制。
- nimdsphax:一个现代漏洞利用链,结合了"ctr-httpwn"、"nimhax"和"dsp 。
- ctr-httpwn by yellows8:用于网络连接的HTTP服务可以通过覆盖其堆内存(使用旧的GPU DMA漏洞)来控制。
- nimhax by luigoalma:使用ctr-httpwn升级并接管控制用户文件系统、主机配置和应用程序管理的服务。
- dsp pwn by luigoalma:使用nimhax控制DSP,DSP反过来使用GPU的DMA覆盖Kernel9内存空间。 从而获得ARM9权限。
2023年后和结论
无论如何,在撰写本文时,任天堂尚未完全屈服于这场猫捉老鼠的游戏。 2023年5月,系统更新11.17.0修补了BannerBomb3,使最后一个不需要额外材料的入口点之一失效。 这意味着用户现在需要获得合法的3DS游戏(然后可以利用),一张兼容ntrboot的DS烧录卡;或者等待WebKit漏洞(新3DS浏览器只剩下一个))。
