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

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
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を任意のバージョンに正しく復元できます。参考Link:SEP/BB/Cryptex Compatibility Chart – Google スプレッドシート
そのうちリリースすることを予定しているので、A9-A10Xでは近日中に全てのバージョンに正しくダウングレード可能になるはずです。
A11はSEPにexploitが存在しないため、最新版にする必要があるので、SEP互換性があるバージョン間でのみ、保存したCryptex ticketと合わせてバージョン維持/復元が可能になると考えていただければ良いかと思います。
@dora2iosさんより
ディスカッション
コメント一覧
まだ、コメントがありません