树莓派破解Switch原理

第一句:我没有Switch,所以这篇是没有做任何试验,基本信息都是根据网络资料整理。

1 BootROM漏洞

关于Secure Boot,之前其实写过一点安卓的:Android Secure Boot-CSDN博客

核心的意思就是圆环套圆环。首先是在硬件固化一个key,通过这个key校验Bootloader的签名,然后验证后Bootloader自己也有一个key,用这个key去校验os的签名。验证后的os中也包含自己的key,之后用这个key去校验所有的app。上述步骤一旦校验不过则退出。

Switch也是有类似的校验机制,如果查到使用了第三方的Bootloader或者第三方的补丁,直接就会校验不过启动失败。但是Switch出了什么问题呢?Switch在启动时若检测到特定按键组合会进入USB恢复模式,在这个模式之下设备可以先接收USB的数据。但是Switch的初始几个版本并没有对传过来的数据做检查,所以导致传入超长数据之后栈溢出,从而执行攻击者的特定代码。

栈溢出的简单例子:

#include <stdio.h>
#include <string.h>

void vulnerable_function() {
    char buffer[8]; // 只分配了8字节的缓冲区
    gets(buffer);   // 危险函数:不检查输入长度
    printf("Input: %s\n", buffer);
}

int main() {
    printf("Enter input: ");
    vulnerable_function();
    printf("Program exited normally.\n");
    return 0;
}

问题就在gets(buffer);这里并没有检查长度,但是buffer只有8个byte。

此时如果构造一个payload.txt

payload = b"A" * 8 + b"B" * 12 + b"\xef\xbe\xad\xde"

将payload注入:

./vuln < payload.txt

之后程序就可能栈溢出,从而跳转到地址0xdeadbeef执行非法代码。

2 树莓派的作用

这里树莓派其实就起到一个USB host的作用,在 Switch 进入 RCM 模式时通过 USB 注入一个特定 payload(如 Hekate、fusee-primary)来触发破解流程。

具体干这事运行的程序是fusee-launcher.py,内容可以看https://github.com/jevinskie/fusee-launcher/blob/n7/fusee-launcher.py

项目整体具体可以参考:https://github.com/jevinskie/fusee-launcher

任天堂的操作系统是自研的Horizon OS。在树莓派攻击之后,Switch可以进入Hekate(裸机bootloader)、Atmosphere(系统补丁)等第三方系统组件。

Hekate:https://github.com/CTCaer/hekate

Atmosphere: https://github.com/Atmosphere-NX/Atmosphere

在注入了Atmosphere之后,就可以绕开任天堂的游戏签名,绕开资本家实现数字平权,之后就可以畅玩了。。。

3 小结

看了一下原理,就知道。其实可以这事的设备很多,STM32,树莓派PICO,甚至AVR估计也能干,使用树莓派无非是群体大生态完善,大家熟悉,开发方便快捷罢了。。。

好了,就这样吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值