请知悉:本文最近一次更新为 3年 前,文中内容可能已经过时。

Switch的NAND或者虚拟系统的EMUNAND文件,解密其中的存档操作起来有些麻烦,但最近有访客留言提及,考虑到国内目前没有太详细的教程,索性便整理一篇好了。

如您从本文得到了有价值的信息或帮助,请考虑扫描文末的二维码对我进行捐赠和鼓励。

  1. 首要条件,需要有本机密钥,如果没有的话,参考教程:Switch 使用Lockpick备份密钥的方法
  2. 第一步中的prod.keys或你通过其他方式备份的密钥,放到桌面备用,后面解密时会用到。
  3. 下载所需工具(解压密码:shipengliang)HacDiskMount+存档解密工具.rar

    看广告高速下载:HacDiskMount+存档解密工具.rar

    如遇文件损坏密码错误,可参考修复教程:WinRAR如何修复受损的压缩文件

  4. 将上一步下载的压缩包,放到C盘(教程图片以E盘为例),右键压缩包,解压到当前文件夹:

    解压到当前文件夹

  5. 将你要解密的nand或者emunand文件夹也放置到C盘中,全部文件就准备妥当了,如下图:

    文件存放示意图

  6. 右键HacDiskMount,选择以管理员身份运行启动程序,点击File->Open file

    2 File Open file

  7. 找到你的nandemunand或其他方式备份的系统文件,点打开:

    注意,虚拟系统文件,只需要打开00的文件,后面01、02这种的系统分片文件程序会自动载入,不需要挨个载入。

    隐藏分区的话,直接打开你的TF卡盘符。

    打开NAND系统文件

  8. 如果文件没有损坏,则会显示出分区列表,划到最底部,双击USER

    4 双击USER

  9. 用记事本打开你的密钥文件,比如第一步中的prod.keys(不同备份方式内容结构有些许差别),主要关注点在:bis_key_03,这个字段。
    这个字段,常见的情况为一串64位字符串:
    bis_key_03 = 17efxxxxxxxxxxxxxxxxxxxxxxxxxx830030xxxxxxxxxxxxxxxxxxxxxxxxxx52

    前32位为Crypto后32位为Tweak

    密钥示意图

    如使用biskeydump,则可以直接得到类似如下字符串,省的自己拆分:

    BIS KEY 3 (crypt): 17EFXXXXXXXXXXXXXXXXXXXXXXXXXX83
    BIS KEY 3 (tweak): 0030XXXXXXXXXXXXXXXXXXXXXXXXXX52
  10. 将上一步得到的密钥,填入工具,点击Test核对密钥正确性。

    填写好密钥并Test

  11. 如果密钥检测通过,则点击Install按钮安装必要的挂载盘符所需驱动。驱动安装仅需执行一次

    Install

  12. 耐心等待驱动安装结束,点击Mount,挂载用户分区到本机。

    8 Mount

  13. 耐心等待挂载完成,此时,计算机会出现A盘符。
    挂载成功 出现A盘
  14. 进入A盘符,复制save文件夹。

    复制save文件夹

  15. 将save文件夹,粘贴到C盘存档解密工具文件夹中:
    粘贴save文件夹
  16. 复制结束后,双击run.bat进行存档解密(脚本会自动运行hactoolnet.exe)。

    执行run.bat解密存档

  17. 解密命令执行完毕后,即可在out文件夹中得到解密后的存档。

    13 解密后的存档

  18. 至此,解密NAND或虚拟系统文件中的存档操作完成。但你也会发现解密出来的存档文件夹根本不是游戏ID,你是没办法对应到游戏的。

    那么问题来了,如何对应到游戏呢?

    这里提供一个思路:

    • 首先,下载一份对应游戏的存档,这样你就明白这个游戏存档实际文件的命名和目录结构。
    • 然后使用搜索,搜索对应存档文件名,即可在众多解密存档中,定位到解密后的目标存档。
    • 然后覆盖到下载的存档目录中,使用对应工具即可还原存档。

如您从本文得到了有价值的信息或帮助,请考虑扫描文末的二维码对我进行捐赠和鼓励。


相关GitHub和参考资料

https://github.com/Thealexbarney/LibHac/releases
Extract save from NAND backup


本站资源,请 注册城通账户 后,使用客户端下载,参考教程:城通网盘如何使用客户端下载文件


尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。


与《Switch如何解密NAND或虚拟系统文件中的存档》相关的博文:


30
留言

avatar
😀
😀😁😂😅😭🤭😋😘🤔😰😱🤪💪👍👎🤝🌹👌
cxm
cxm
【🚶访客】

第14步 进入A盘符, 咋是乱码文件夹,双击显示
无法访问A:(乱码)
文件名、目录名或卷标语法不正确

start
start
【🚶访客】

按部就班操作后,部分save数据没能提取成功,打开控制台显示以下问题:
C:\存档解密工具>hactoolnet.exe -k prod.keys -t save “save/0000000000000030” –outdir “out/0000000000000030”
Failed to match key device_key_4x
Failed to match key eticket_rsa_kek_source
Failed to match key eticket_rsa_kekek_source
Failed to match key rsa_oaep_kek_generation_source
Failed to match key rsa_private_kek_generation_source
Failed to match key save_mac_key
Failed to match key ssl_rsa_kek_source_x
Failed to match key ssl_rsa_kek_source_y

ERROR: ResultFsJournalIntegritySaveDataControlAreaVerificationFailed (2002-4315): Savedata header is not valid.

Additional information:
at LibHac.ThrowHelper.ThrowResult(Result, String) + 0x33
at LibHac.FsSystem.Save.SaveDataFileSystem..ctor(KeySet, IStorage, IntegrityCheckLevel, Boolean) + 0x37f
at hactoolnet.ProcessSave.Process(Context) + 0x21e
at hactoolnet.Program.Run(String[]) + 0x356
at hactoolnet.Program.Main(String[]) + 0x1a

这是什么原因呢请问大神

lossage
lossage
【🚶访客】

run.bat进行存档解密时,控制台会输出信息。如:
hactoolnet.exe -k prod.keys -t save “save/0000000000000067” –outdir “out/0000000000000067”
save:/SaveGameData6

Savefile:
CMAC Key Used: 8C23BB49523D0BFB1A97CBA082E9B979
CMAC Signature (GOOD): 4501768017FEC30E64BACCB562573E10
Title ID: 01006dc010326000
User ID: ab1a8674-3f83-1000-9d3f-55c7a08e6613
Save ID: 0000000000000000
Save Type: Account
Owner ID: 01006dc010326000
Timestamp: 2021-03-14 08:09:16 UTC

其中Title ID就是游戏ID。可以在命令行窗口,CD到run.bat目录中,用命令行运行批处理,则可以获得到全部输出,然后就可以对应了

EmonYan
EmonYan
【🚶访客】

博主你好,我是10.2的硬破,虚拟系统和真实系统版本一致,是因为进不去虚拟系统所以要尝试上文的方法。我的情况是除了full.00以外,其他的8个full文件全都打不开,想问一下这个是文件损坏了吗?

张小虎
张小虎
【🚶访客】

在不在不,为什么我照着做之后,save文件夹是空的,解密之后的out文件夹也是空的

Hydra
Hydra
【🚶访客】

首先非常感谢,根据blog教程已经找回了一些存档并恢复,如健身环大冒险、哈迪斯。
但有些存档执行解密批处理文件后,在out文件夹内没有生成,如塞尔达(非常痛心),还请不吝赐教,非常感谢!我在微信捐赠里留言和放了截图,请拨冗指导!不胜感激!

爱因斯坦
爱因斯坦
【🚶访客】

正版switch可以通过该方式导出存档并修改再导入回去吗?如果不行,请问有什么方法可以只用一台不能破解的正版switch进行存档修改?我看有人说可以不破解就可以通过RCM模式修改存档?万分感谢并期待解答!