slankka/nx-filesystem-utf8

GitHub: slankka/nx-filesystem-utf8

该项目通过逆向修补 Nintendo Switch Horizon OS 的 FAT/exFAT 文件系统驱动,为其添加 UTF-8/CJK 文件名支持。

Stars: 3 | Forks: 0

# nx-filesystem-utf8 `nx-filesystem-utf8` 是一个研究项目和补丁构建器,旨在为 Nintendo Switch Horizon OS 的 FAT/exFAT 文件系统堆栈添加 UTF-8 文件名支持。 它替换了传统的 OEM/DBCS 转换例程,并更新了 SFAT 目录名过滤器,以便在对原有 ASCII 文件名限制不做禁用处理的情况下,能够列出、打开、读取和写入有效的 CJK 路径。 本仓库用于研究并修复 Nintendo Switch Horizon OS FAT/exFAT 文件系统中的 UTF-8/CJK 文件名兼容问题。补丁替换旧式 OEM/DBCS 编码转换逻辑,并为 SFAT 目录遍历加入严格 UTF-8 校验,同时保留原有 ASCII 非法字符检查。 ## 当前范围 构建器目前包含针对 HOS 19.0.0、20.2.0、22.0.0 和 22.5.0 经过静态验证的 FAT 和 ExFAT 定义。HOS 19.0.0 ExFAT 还通过了 CJK 目录枚举和直接文件读写的硬件测试。其他目标应被视为硬件测试候选对象。 生成的补丁组: - `utf8codecv` — UTF-8/UTF-16 转换及相关字符处理。 - `utf8dir` — SFAT 目录枚举中的严格 UTF-8 验证。 逆向工程锚点: - codecvt 内核点是 PrFILE2 的目录输出转换路径:`VFiPFDIR_p_fsnext` 在通过 `PF_CHARCODE` 字符集构建 `PF_DTA::LongName` 时调用了 `VFiPFPATH_transformFromUnicodeToNormal`。 - Directory::Read 内核点位于更后方的 Nintendo SFAT 封装中。它会在将名称复制到 `nn::fs::DirectoryEntry` 之前扫描 PrFILE2 返回的名称;这就是被 `utf8dir` 修正的过滤器。 引用: - TFP2 项目:[github.com/koopthekoopa/TFP2](https://github.com/koopthekoopa/TFP2) - PrFILE2 源码树:[TFP2/src/vf/PrFILE2](https://github.com/koopthekoopa/TFP2/tree/main/src/vf/PrFILE2) ## 构建 要求: - Python 3 - devkitA64 - 从您自己的固件中提取的已压缩和已解压的 `FS.kip1` 文件 在 PowerShell 中运行: ``` $env:NX_UTF8_FIRMWARE_ROOT = "F:\dumped_firmware" $env:DEVKITA64 = "F:\devkitPro\devkitA64" python .\src\build_patches22.py ``` 生成的 Hekate 补丁文件是 [src/patches.ini](src/patches.ini)。构建详情和受支持的 FS 哈希记录在 [src/README.md](src/README.md) 和 [src/MANIFEST.txt](src/MANIFEST.txt) 中。 ## 验证程序 [verfiy_program](verfiy_program/) 目录包含用于硬件验证的 `sdmc2` libnx 测试应用程序。它测试直接的 CJK 路径读写、`sdmc:/ROM` 下 CJK 目录的枚举,以及该目录内 CJK 文件名的枚举。包含 PowerShell 和 Bash 的构建入口点。 ## 文档 逆向工程笔记、补丁历史以及 SFAT/PrFile2 分析可在 [docs](docs/) 下找到。 ## 安全性 补丁绑定到特定已压缩 FS KIP 的 SHA-256 前缀。请勿在未知的固件版本或 FAT/exFAT 变体之间重用偏移量。在常规使用前,请先在已备份的 SD 卡上测试新目标。 ## 免责声明 本项目仅出于研究、互操作性以及供用户在合法拥有的硬件和固件上使用而提供。它不包含或分发固件、加密密钥或其他受版权保护的二进制文件。 文件系统和固件补丁可能会导致启动失败、数据丢失或文件系统损坏。测试前请备份所有重要数据。您使用此软件的风险由您自行承担。作者和贡献者对因使用它而造成的损坏或数据丢失不承担任何责任。 本项目是独立的,与 Nintendo、Microsoft、eSOL、Atmosphère 或其各自的贡献者和权利所有者没有任何隶属关系,也未获得他们的授权、赞助或认可。
标签:AI合规, C/C++, Homebrew, UTF-8兼容性, 事务性I/O, 云资产清单, 任天堂Switch, 客户端加密, 文件系统, 补丁构建, 逆向工程