Generate XORpads for a game or application in .3ds or .cci format using a 3DS - ihaveamac/3DS-rom-tools GitHub Wiki

This guide explains how you can generate XORpads for a CTR Cart Image (.3ds/.cci) so you can extract its files on a computer.

Generally decrypting the game directly is preferred now. If you still need to generate XORpads, or only want access to the ExHeader/ExeFS, XORpads can still be used.

Requirements

  • Python 2.7
  • A 3DS system with arm9loaderhax
    • arm9loaderhax is not technically required, but is the simplest and most popular setup on 3DS systems. Other setups are not covered in these guides.
  • Decrypt9WIP by d0k3
    See its README on how to set it up.
  • One of the Python scripts for NCCHInfo generation:
  • Some patience with huge games, especially if generating XORpads for the RomFS
  • Basic knowledge of the Terminal/Command Line

Useful notes

  • NCCH partitions of a CCI

    Partition Use Type
    0 Game Executable [[CXI
    1 Manual [[CFA
    2 Download Play Child container [[CFA
    6 New3DS Update Data [[CFA
    7 Old3DS Update Data [[CFA

    3, 4, and 5 do exist and can be extracted, but don't usually contain anything.

  • Possible XORpads (all beginning with 000400000XXXXX00), assuming ncchinfo_gen from this repository was used:

    • .Main.exheader.xorpad - Game Executable ExHeader
    • .Main.exefs_norm.xorpad - Game Executable ExeFS
    • .Main.exefs_7x.xorpad- Game Executable Exefs (7.x/9.3/9.6)
    • .Main.romfs.xorpad - Game Executable RomFS
    • .Manual.romfs.xorpad - Manual RomFS
    • .DownloadPlay.romfs.xorpad - Download Play Child container RomFS
    • .N3DSUpdateData.romfs.xorpad - New3DS Update Data RomFS
    • .O3DSUpdateData.romfs.xorpad - Old3DS Update Data RomFS

Setting up

  1. Get the latest release of Decrypt9WIP.
  2. Make a folder at the root of the SD card named files9
  3. Get these slot keys (or an aeskeydb.bin with them) and place them at the root or /files9 (you can find them online):
  • slot0x25KeyX.bin - 7.x NCCH
    • Needed for decrypting Secure2 on Old3DS <7.0 or arm9loaderhax
    • MD5: 817fd1bffba60f79cf8cdf19caf28923
  • slot0x18KeyX.bin - New3DS 9.3 NCCH
    • Needed for decrypting Secure3 for some New3DS exclusive titles on Old3DS without arm9loaderhax
    • MD5: 32ae55444f3feca802a6ed251a619bc7
  • slot0x1BKeyX.bin - New3DS 9.6 NCCH
    • Needed for decrypting Secure4 for some New3DS exclusive titles in every environment
    • MD5: 79cd40405d0f5417ae73a064318cbf0d

Generating

  1. Place your roms in a folder.
  2. Use one of the ncchinfo_gen scripts to generate a file called ncchinfo.bin. For example:
# generate XORpads for all parts
python2 ncchinfo_gen.py game1.3ds game2.cci

# generate XORpads for just ExHeader and ExeFS
python2 ncchinfo_gen_exh.py *.3ds
  1. Place ncchinfo.bin in /files9 on your 3DS SD card.
  2. Enter Decrypt9 using one of the various entry points.
  3. Choose "XORpad Generator Options".
  4. Choose "NCCH Padgen".
  5. Wait for the process to finish.
  6. Your XORpads will now be in /files9 and are usable on a computer.

Common Errors

/Decrypt9/Decrypt9.log can contain errors that might have happened generating.

  • More will be added here...
⚠️ **GitHub.com Fallback** ⚠️