iOS 16から導入されたCryptex1に対応したSHSH blobsの保存方法

2025/01/11 15:31

checkm8対応デバイス限定にはなりますが、iPhoneやiPadをAppleの署名なしで復元するために必要な「Cryptex1に対応したSHSHファイル」を「tsschecker」で保存する方法を説明いたします。

A12(iPhone XsやXʀ)以降のデバイスでもiOS 16.5(.1)までDopamineなどで脱獄できますが、対応していないため注意してください。

BootROM exploitであるcheckm8 などの強力なものが必要になります。

主なターゲットは iPad 6 / iPad 7 / iPad Pro (10.5-inch) のA9XとA10(X) などで唯一iPadOS18に対応しているiPad 7で有用となります。

2025/01/12 追記:A9X(第一世代iPad Pro 9.7″と12.9″)に関して、唯一iPadOS 16に対応しているものですが、A9X以下の場合はSHSHの保存方法に違いがあり現在のところ正しく機能しません。開発者さんには伝わっているのでいずれ修正されるかと思います。

必要なもの

macOSで実行します
Windowsではtsscheckerのバイナリが無いため実行できず、Linuxでは試していません

  • checkm8に対応したデバイス(iOS 15以降でrootlessで脱獄する必要があります)

  • palera1n

  • libimobiledevice

  • tsschecker

  • x8A4 tools(デバイスにインストール)

  • pycryptodome

  • aes_cryptex_nonce.py

(実行するために必要なものが他にあるかもしれません)

palera1nで脱獄しopensshをインストール


1)rootlessで脱獄

palera1n -l

2)SileoでOpenSSHをインストール
3)はじめにrootでsshログインできるようにしておく

ssh [email protected](デバイスのWi-Fi IP)
最初に決めたパスワードを入力
sudo su
passwd

rootのパスワードを設定してください
例)alpine(3回同じ文字を入力、毎回sudoで行ってもOK)

必要なデバイスの情報を取得してメモしておく

Homebrewのインストール

※すでにインストールしている場合は読み飛ばしてください

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

PATHを通す(zshのMシリーズ)

echo export PATH='/opt/homebrew/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

libimobiledeviceのインストール

brew install libimobiledevice




MacとデバイスをUSBで接続しideviceinfo(libimobiledeviceに付属)で必要な情報を取得

ECID

ideviceinfo -k UniqueChipID

DEVICE MODEL

ideviceinfo -k ProductType

BbSNUM(iPhoneやiPad Cellularモデルでのみ使用)

ideviceinfo -k BasebandSerialNumber


ECID:6835294998000000(Decimal)
DEVICE MODEL:iPad7,11


BbSNUMについてはWiFiモデルでは出力されず、base64でエンコードされたものが出力されます。

例)手持ちのiPhone X 16.3.1 から取得
a1AEQw==

x8A4 toolsをデバイスにインストールし必要なkeyをダンプ


  • libkrw-dev_1.1.2_iphoneos-arm64
  • libkrw0_1.1.2_iphoneos-arm64
  • libkrw0-tfp0_1.1.2_iphoneos-arm64
  • libx8a4-1_1.0.1_iphoneos-arm64
  • x8a4_1.0.1_iphoneos-arm64
(libx8a4-dev_1.0.1_iphoneos-arm64)←これはなくても動きます



GitHubから一つずつインストールするのが面倒なので秘密のrepoに入れときました←秘密とは
https://cydia.ichitaso.com/secret-repo

Terminalからデバイスにsshでログインして実行

ssh [email protected]
x8A4 -k 0x8A4

例)
KEYの文字列を利用する(0x以降の32文字)
E8F0B40EA9E929CF2509083B7B76B083

aes_cryptex_nonce.py を使用してシードを暗号化


上記URLから直接「Download raw file」するか以下のように全部保存してもいいです。

git clone https://github.com/Cryptiiiic/aes_nonce.git

macOS(Linux)上で実行

実行するのに「pycryptodome」が必要なためpip3でインストール

pip3 install pycryptodome

aes_cryptex_nonce.py を実行

python3 aes_cryptex_nonce.py <Dumped 0x8A4 Key (32文字) > <Cryptex Seed (32文字 任意のため分かりやすく1を32文字) >

例)

python3 aes_cryptex_nonce.py E8F0B40EA9E929CF2509083B7B76B083 11111111111111111111111111111111

出力:
Encrypted Seed: ed830d5ff48e86a243ebefbc8f9080d7
Entangled Nonce: 83d866b6345062b0a768dc57b05a212a0ad59977a7a312f21fc50891b8d60160

Entangled Nonce の値(64文字)を使用します。

tsscheckerを使用して有効なCryptex1 shsh blobを保存


上記Linkからご自身の環境にあったものをダウンロードしてください。私の場合は「tsschecker-macOS-Build_438-RELEASE.tar.xz」をダウンロードして展開、分かりやすいディレクトリに入れときました。

そのままでも動くと思いますが、動かなかったら以下を実行してください。

xattr -c ./tsschecker
chmod +x ./tsschecker

xattr -c:警告解除 (com.apple.quarantine 削除)、chmod +x:スクリプトやプログラムに実行権限を付与

例)iPad WiFiモデルで18.2のshshを保存(ECIDは10進数、16進数どちらでもOK)

./tsschecker -d <DEVICE MODEL> -Z 22C152 -s -e <ECID> -g 0x1111111111111111 -x 0x11111111111111111111111111111111 -t <Entangled Nonce> -E -b

例)最新の署名されているバージョンのshshを保存(マイiPad 7)

./tsschecker -d iPad7,11 -l -s -e 6835294998000000 -g 0x1111111111111111 -x 0x11111111111111111111111111111111 -t 83d866b6345062b0a768dc57b05a212a0ad59977a7a312f21fc50891b8d60160 -E -b

「-Z (buildid)」は「https://ipsw.me/」で確認するのがわかりやすいです(署名されているかも確認できるのと、たまに同じバージョンナンバーで違うbuildidになることもあるため)、 他は「./tsschecker」だけで実行したときのOption一覧で確認してください。

iPhoneやiPad Cellularモデルのbasebandシリアルナンバーは「-c」オプションで指定します。末尾の「-b (no-baseband)」を置き換えて指定してください。

例)マイiPhone X

./tsschecker -d iPhone10,3 -l -s -e 8488599813000000 -g 0x1111111111111111 -x 0x11111111111111111111111111111111 -t e5603c0b598463f08eca694e931438c072fbe4d9887c09d09b97a5b47f271e11 -E -c a1AEQw==

実行すると同じディレクトリ上に「shsh2」ファイルが保存されます。

【参考】aes_cryptex_nonce.pyを使用しない方法

ssh [email protected]

デバイスにsshでログイン

現在のCryptex1 seedを取得

x8A4 -x

例)出力
Got cryptex seed (0xF3323A8EFCF51FBF9AC0BEE2CE5C47DB)

現在のCryptex1 nonceを取得

x8A4 -t

例)出力
Got cryptex nonce (0xF1893A76800E10EAAF14AD567300EBEB30E57F75071C11D1FA0340FF03D0BED8)

この2つを利用してSHSHを保存

例)

./tsschecker -d <DEVICE MODEL> -l -s -e <ECID> -g 0x1111111111111111 -x 0xF3323A8EFCF51FBF9AC0BEE2CE5C47DB -t F1893A76800E10EAAF14AD567300EBEB30E57F75071C11D1FA0340FF03D0BED8 -E -b

注意点

「-t」以降に指定するNonce(64文字)部分の先頭に「0xを付けない」ことです。また、署名されていないバージョンのSHSHは保存できません。

参考

/private/preboot/cryptex1/current/apticket.{ECID(HEX)}.im4m

img4tool」に、このim4mファイルを渡すと「nonce」を確認でき、cnchの値がnonceで`x8A4 -t`で得た値と同じになるはずです。

注意:このファイルを消すとbootloopになるので消さないように

二通りの方法があるので紹介させてもらいました。

TSSChecker v438のReleaseページで紹介されているのは前述の方法ですが、やりやすい方法でOKです。

futurerestoreについて


x8A4を使用して「generator」の値をnvramへセットできます。
例:0x1111111111111111 をセット(1は16文字)

ssh [email protected]
x8A4 -s 0x1111111111111111

SHSHを利用してAppleで署名されていないファームウェアに復元する「futurerestore」ですが、今のところエラーとなり利用できません。iPad 7で18.2へ復元しようとしましたが失敗しました。

エラー内容

ERROR: Unable to fetch Cryptex1 ticket
Warning: restore_send_firmware_updater_data: Couldn't get Cryptex1 firmware data using current build_identity, trying again using latest build manifest
Sending Cryptex1 TSS request...
ERROR: Unable to fetch Cryptex1 ticket
ERROR: restore_send_firmware_updater_data: Couldn't get Cryptex1 firmware data a second time even using latest build manifest, this is not normal, RIPERONI :(
ERROR: Unable to send FirmwareUpdater data
ERROR: Unable to successfully restore device
ReverseProxy[Ctrl]: (status=2) Terminated
Cleaning up...
[exception]:
what=ERROR: Unable to restore device

code=107741252
line=1644
file=/Users/runner/work/futurerestore/futurerestore/src/futurerestore.cpp
commit count=338
commit sha =d3a584871b9537e7854359ba27e516752cbc807d
Done: restoring failed!
futurerestore(94803,0x1f7024c00) malloc: *** error for object 0x600000ce7bc0: pointer being freed was not allocated
futurerestore(94803,0x1f7024c00) malloc: *** set a breakpoint in malloc_error_break to debug
zsh: abort ./futurerestore -t -0 -2 iPad_10.2_18.2_22C152_Restore.ipsw

二通りの方法で取得したshsh2で試しましたが、同じ結果になりました。正規の方法で復元するしか無くなるため実行しないようにしてください。

この記事で紹介しているソフトウェアを「Cryptiiiic」氏が中心になって更新作業を行っているので、可能になったら紹介したいと思います。

追伸

この記事を書くのに情報提供してくれた@dora2iosさんに感謝します。

本人曰く

私と数名で行ってる SEP exploitを使用して、A9-A10Xデバイスをダウングレードできるようにするというプロジェクトがあるのですが、こちらでテストした限りでは今回のtsscheckerで保存したshshを使用してSEPとCryptexを任意のバージョンに正しく復元できます。
そのうちリリースすることを予定しているので、A9-A10Xでは近日中に全てのバージョンに正しくダウングレード可能になるはずです。
A11はSEPにexploitが存在しないため、最新版にする必要があるので、SEP互換性があるバージョン間でのみ、保存したCryptex ticketと合わせてバージョン維持/復元が可能になると考えていただければ良いかと思います。
@dora2iosさんより

参考Link:SEP/BB/Cryptex Compatibility Chart – Google スプレッドシート