Tutorial  Updated

How to get Switch Keys for Hactool/XCI Decrypting

This thread is deprecated
For a faster, easier and more up-to-date way of getting keys use Lockpick_RCM by shchmue
If you still want to follow this tutorial and end up with less keys, continue reading the Thread.


WARNING
  • DO NOT GIVE OUT ANY OF YOUR KEYS TO ANYONE! I CANNOT STRESS THAT ENOUGH!
  • DO NOT SHARE YOUR KEYS BETWEEN MULTIPLE SWITCHES THAT YOU DO/DON'T OWN! SOME ARE CONSOLE-UNIQUE
  • DO NOT ASK ME FOR KEYS


LEGEND
  • SBK
    SecureBootKey
  • TSEC
    Tegra Security Co-processor Key
  • eMMC
    Embedded MultiMediaCard (Switch's Onboard Storage)


GOAL
End up with 83+ keys including SBK and TSEC keys. Get Master Key's 0-5. (Master Keys 6 onwards is not done in this tutorial)
Reminder, if you want more up-to-date and much more convenient way to get your Switch's Keys, use Lockpick by shchmue (available in nx-appstore/homebrew store)


Tutorial — (Outdated for Switch's on firmware 6.x or newer)


#1 - Dumping System Keys (Biskeydump)#2 - Dumping Required Files#3 - Hactool Preparation#4 - Dumping KeysFinal WordsTroubleshooting


  1. We need to get your Secure Boot Key (SBK) and Tegra Security Co-processor Key (TSEC) before we can get the main keys.
    These are 100% console unique.

    1. Download and extract biskeydump.bin from biskeydumpvx.zip
      - Follow this tutorial but instead of using CTCaer's Hekate Mod .bin file, use the biskeydump.bin file
      - If the QR Code is Blue, Scan the QR Code with your Phone, Laptop e.t.c
      - If you cant find a device you can scan with, type them out into your PC/Laptop (Its highly recommended to scan the QR Code, as a lot of characters can look like another, O0, Il, rn can look like m, e.t.c)
    2. Once you have the biskeydump of your System, store all the keys you received somewhere safe, I recommend a secure cloud storage aswell as a USB Stick, perhaps even print it.
      - Don't give this to ANYONE, Seriously.

    If you get any errors please go to the Troubleshooting Tab.


    1. Follow this tutorial AGAIN but this time use CTCaer's Hekate Mod.
      - "Tools" -> "Backup..." -> "Backup eMMC BOOT0/1"
      - "Tools" -> "Backup..." -> "Backup eMMC SYS"
      - Back all the way to the first menu, and choose "Power off"
    2. Take the microSD Card out of your Switch and into your PC.
    3. Copy both "BOOT0" and "BCPKG2-1-Normal-Main" from "sd:/backup/xxxxxx/" (xxxxxx is different for everyone) to "hactool" on your Desktop (create the "hactool" folder)
      - Rename them with .bin at the end, "BOOT0.bin", "BCPKG2-1-Normal-Main.bin"

    1. Download and install Python 2.7.x - NOT Python 3.x.x
      When installing, it will ask you what features you want installed, scroll to the bottom and make sure "Add Python to Path" has "Entire Feature Installed to HDD" option chose (No Red X Icon), otherwise the scripts wont find Python and WILL fail
    2. Download and extract hactool TO THE DESKTOP AND NAME THE FOLDER "hactool"
      On Linux/MacOS: clone and build hactool manually
    3. Right-click this (script originally by tesnos6921, patched by shadowninja108, jakibaki and shchmue)
      - Click "Save link as" / "save as"
      - Set "Save as type" to "All Files"
      - Name it "keys.py"
      And finally save it to the hactool folder you placed in the Desktop.
      NOTICE TO GBATEMP STAFF: The "keys" inside this file, are NOT keys, they are SHA digest hashes used to search through files to find text that matches, which would be the keys.

    1. Press WIN(Btn)+R to open "Run", type "cmd" and press Ctrl+Shift then Enter to open Command Prompt as an Administrator
    2. Type (in order) or Copy the following and paste into Command Prompt (Some Windows Versions use Right Click to Paste, some use CTRL+C)
      python -m pip install --upgrade pip
      pip install lz4
      cd Desktop/hactool

      python keys.py SBK_Here_From_Biskeydump TSEC_Here_From_Biskeydump
    3. It should say: "Now you can do hactool --keyset=keys.txt to use them!", if it does, and there's no warning messages, you're good to go! :O
    If you get any errors please go to the Troubleshooting Tab.

  2. You now have a keys.txt file with your console-specific keys inside.
    Rename as needed by any software that requires a different name or file extension, it doesn't matter.
    Though I highly recommend renaming it to prod.keys as this filename for Key file's is becoming a popular choice with other software
    There may be more keys, as the Switch's lifecycle goes on, more and more keys will be needed as the firmwares grow and grow.
    • The Hactool warning:
      Code:
      [WARN] prod.keys does not exist.
      can be safely ignored.
      - if you want to place your "keys.txt" file their, put "keys.txt" on your Desktop and run the following with Administrator Command Prompt (Step #4.1 for instructions):
      Code:
      mkdir -p %USERPROFILE%\.switch
      move "%USERPROFILE%\Desktop\keys.txt" "%USERPROFILE%\.switch\prod.keys"

  3. #1 ISSUES:
    • Code:
      Red QR Code Outline
      - The reasons this can occur is quite a rarity, all I can say is to keep rebooting and trying again.
      - If there's a new version of biskeydump out, try using the newer biskeydump.bin
    • Code:
      QR Code not being scanned by your Reader
      - Align your QR Code Readers alignment overlay with the Blue Square's Corners/Edges, NOT the QR Code's Corners/Edges.
      - Clean your camera lens
      - Be in a bright room

    #4 ISSUES:
    • Code:
      File "keys.py", line ...
      print message
      ^
      SyntaxError: Missing parentheses in call to 'print'. Did you mean print(message)?
      - You didn't place SBK and TSEC in the 4th line of the Command in Step #4.2
      - You installed Python 3.x.x when you must use 2.7.x, uninstall python, logout of windows (important it removes python from PATH) and follow Step #3.2 then move back to #4.1
    • Code:
      import lz4.block
      File "C:\Python27\lib\site-packages\lz4\__init__.py", line 17, in <module>
      from ._version import ( # noqa: F401
      ImportError: DLL load failed: The specified module could not be found.
      - The 2nd line of the Command in Step #4.2 failed without you noticing. Try running the 1st line to upgrade pip and if that goes successfully run the 2nd line to install lz4 and see if it successfully installs.
 
Last edited by shchmue,

Admiral-Purple

Well-Known Member
Newcomer
Joined
May 25, 2018
Messages
48
Trophies
0
Age
29
XP
408
Country
United States
Using BOOT0.bin to get keys from package1...
Deriving keys...
[WARN]: Failed to match key "tsec_key", (value "")
[WARN]: Failed to match key "secure_boot_key", (value "")
[WARN]: Failed to match key "keyblob_key_source_04", (value "")
[WARN]: Failed to match key "keyblob_key_source_00", (value "")
[WARN]: Failed to match key "master_key_source", (value "")
[WARN]: Failed to match key "keyblob_mac_key_source", (value "")
Invalid NCA header! Are keys correct?
Decrypting package1...
[WARN]: Failed to match key "tsec_key", (value "")
[WARN]: Failed to match key "secure_boot_key", (value "")
[WARN]: Failed to match key "keyblob_key_source_04", (value "")
[WARN]: Failed to match key "keyblob_key_source_00", (value "")
[WARN]: Failed to match key "master_key_source", (value "")
[WARN]: Failed to match key "keyblob_mac_key_source", (value "")
Failed to decrypt PK11! Is correct key present?
Using Secure_Monitor.bin to get keys to decrypt package2...
Traceback (most recent call last):
File "keys.py", line 391, in <module>
TZ_f = open("package1/Secure_Monitor.bin", "rb")
IOError: [Errno 2] No such file or directory: 'package1/Secure_Monitor.bin'

I was able to solve this error by doing the following:

re download hactool-1.1.0.win.zip from sciresm repo (sorry cant put links)
extract it and be sure to only have those files on that folder
Copy only the files needed for extraction with the proper bin extensions (python script + BOOT0 + BCPKG2-1-Normal-Main)
Run the script and it should be ok

That worked for me! Thank you for sharing that. I think the problem was that I had an old version of hactool.
 

SirNapkin1334

Renound Aritst
Member
Joined
Aug 20, 2017
Messages
1,665
Trophies
1
XP
975
Country
United States
I renamed keys.dat from hactoolgui to keys.txt and keys.ini, IDK if it's because hactoolgui uses a different layout for the key info or something else. Is there a keys.txt/keys.ini template?
No, I mean in the command. When you ran the command, did you input the keys correctly as arguments.
 

Endlessclouds

Well-Known Member
Member
Joined
Jun 13, 2018
Messages
134
Trophies
0
Age
37
XP
426
Country
United States
Okay, so I figured out why it was not working. If you look at the python script, the path to the hactool is set like this:
Code:
HACTOOL_PATH = "hactool"
You need to set it to this
Code:
HACTOOL_PATH = "./hactool"

Once you fix that, the python script works great!

ok I got the same error message. and I have tried changing the ./hactool path as well. still same error message. any help?
 

tomhanks69

Well-Known Member
Member
Joined
Oct 31, 2017
Messages
272
Trophies
0
Location
California
XP
864
Country
United States
im getting this issue... HELP?

--------------------- MERGED ---------------------------
 

Attachments

  • Screenshot (4).png
    Screenshot (4).png
    23.5 KB · Views: 602
Last edited by tomhanks69,

MYFW

Well-Known Member
Member
Joined
Apr 1, 2014
Messages
195
Trophies
1
Age
30
XP
1,232
Country
Ive got this error:

"Traceback (most recent call last):
File "keys.py", line 25, in <module>
import lz4.block
File "C:\Python27\lib\site-packages\lz4\__init__.py", line 11, in <module>
from ._version import ( # noqa: F401
ImportError: DLL load failed: No se puede encontrar el m¾dulo especificado."

Whats happen? :/
 

Endlessclouds

Well-Known Member
Member
Joined
Jun 13, 2018
Messages
134
Trophies
0
Age
37
XP
426
Country
United States
Did you compile the hactool source code and put the binary file next to keys.py?


yes, I tried the newest build as well from the GitHub. still same error for:

Using BOOT0.bin to get keys from package1...

Deriving keys...

Traceback (most recent call last):

File "keys.py", line 374, in <module>

stage0_results = subprocess.check_output([HACTOOL_PATH, "--keyset=keys.txt", "--intype=keygen", "BOOT0.bin"])

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 216, in check_output

process = Popen(stdout=PIPE, *popenargs, **kwargs)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 394, in __init__

errread, errwrite)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1047, in _execute_child

raise child_exception

OSError: [Errno 2] No such file or directory
 

CuriousTommy

Well-Known Member
Member
Joined
Jul 22, 2014
Messages
524
Trophies
0
Age
27
XP
647
Country
United States
yes, I tried the newest build as well from the GitHub. still same error for:

Using BOOT0.bin to get keys from package1...

Deriving keys...

Traceback (most recent call last):

File "keys.py", line 374, in <module>

stage0_results = subprocess.check_output([HACTOOL_PATH, "--keyset=keys.txt", "--intype=keygen", "BOOT0.bin"])

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 216, in check_output

process = Popen(stdout=PIPE, *popenargs, **kwargs)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 394, in __init__

errread, errwrite)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1047, in _execute_child

raise child_exception

OSError: [Errno 2] No such file or directory
send me a picture of all of the files in the directory (where you put the keys.py in).
 

Miqote

Well-Known Member
Member
Joined
May 2, 2018
Messages
259
Trophies
0
XP
822
Country
Macedonia, The Former Yugoslav Republic of
I've looked all over the place and I don't think anyone actually has a method for extracting the other master keys - You'll just have to look online for them.
 

Endlessclouds

Well-Known Member
Member
Joined
Jun 13, 2018
Messages
134
Trophies
0
Age
37
XP
426
Country
United States
send me a picture of all of the files in the directory (where you put the keys.py in).

hey thanks for the help! appreciate it, I figured it out a different way. I'm using a mac, got confused with the different tutorials and stuff. Used parallel to run all my windows files, and back to Mac vice versa.
thanks, tho.
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    SylverReZ @ SylverReZ: https://www.youtube.com/watch?v=fwcj_tIm44k