Для расшифровки игр в установочных архивах CIA существует скрипт:
eshop_content_to_cxi.py (Требует наличия python 2.7 с установленным pyCrypto) и его вариация в виде экзешника для Windows:
eshop_content_to_cxi.rar (Не требует установленного python и чего-либо ещё). Данный скрипт расшифровывает не сам CIA, а лишь распакованные из него контейнеры CXI (файлы контента), расшифрованные версии которых, впрочем, без проблем открываются эмулятором Citra.
Извлечь контейнеры CXI из зашифрованного CIA можно с помощью консольной программы
ctrtool, команда:
ctrtool.exe --contents="game" --tik="game.cetk" --tmd="game.tmd" -p -x "game.cia"
Только для Windows - Пакетный файл распаковки контента из множества CIA разом:
for %%a in (*.cia) do ctrtool.exe --contents="%%~na" --tik="%%~na.cetk" --tmd="%%~na.tmd" -p -x "%%a"
На выходе должны получиться файлы вроде "game.0000.0000002" и "game.0001.0000003". Где '0000' - это индекс контента, а '00000002' - название файла контента.
Расшифровка файлов контента производится командой:
python eshop_content_to_cxi.py <content_filename> <DECRYPTED_KEY!> <Content_Index> <Seed>
Аргументы командной строки. Почти все, за вычетом 'seed' являются обязательными, если только тот не используется игрой:
content_filename = Имя файла контента (например '00000000')
DECRYPTED_KEY! = Расшифрованный TitleKey, который можно подсмотреть в "базе ключей" по ссылке ниже. Чтобы найти его, потребуется также узнать TitleId игры.
Content_Index = Индекс контента, обычно '0000' для игры, '0001' для мануала, и '0002' для данных "загружаемой игры".
Seed = Ключ шифрования seed, который можно подсмотреть в "базе ключей" по ссылке ниже. Если контент использует seed шифрование, но параметр не указан в командной строке, скрипт даст сбой.
База ключей и Seed'ов на 4612 игр. TitleId можно подсмотреть с помощью ctrtool, либо
здесь или
здесь.