Face ID用にSHSHの取得やFuturerestoreが対応したのは記憶に新しいですが、どうやらもうひとつ問題があるようです…。
この辺りについてViktor Oreshkin氏が報告してくれています。
また、対処はどうするのか、本当に問題があるのか、この辺りについても後述します。
A12デバイスでは…
for everyone on A12: Good news, bad news.
Good news: Here's a nonce setter (see offsets I've added for my device to port it to your device): https://t.co/sIEPZB8oIc
Bad news: your blobs are useless, A12 has nonce entangling enabled.
— Viktor Oreshkin (@stek29) 2019年2月6日
Viktor Oreshkin氏より「A12デバイスについて、良いニュースと悪いニュースがある」と報告が行われています。
良いニュースについては「A12デバイスでもNonce(Generator値)の設定が出来るようになった」という事、悪いニュースは「これまでにA12デバイス用に取得・保存してあるSHSHは、現時点では使い物にならない」という事です。
ちなみに、A12デバイスとはiPhone XS / XS Max / XRが該当します。
Nonceの設定が可能に
現時点ではまだテスト版ではありますが、「voucher_nonce」がリリースされ、A12デバイスでもFuturerestoreで使用するNonce(Generator値)のセットが可能になりました。
デバイス&バージョンが指定されているため、使えない環境もありますし、コードを編集しなければ値の変更なども出来ないのですが、これによりA12デバイスでもNonce値のセットが可能となり、Futurerestoreが使えるようになります。
これまでのSHSHが…
問題はここからで、どうやらA12デバイスでは「Nonce Entangling」という仕組みが有効化されており、その影響でこれまで取得・保存したSHSHが使えない状況にあるようです。
A12以外のデバイスの場合、Generator値を元にApNonceを生成…することが出来たのですが、この仕組みが有効化されているA12デバイスでは、Generator値と「他の値」を使ってApNonceを生成する…という流れに。
そのため、これまでの方式で生成された既存のSHSHは使えない状況にあります。
あくまで現時点での話
「他の値」という物が判明し、それが生成される仕組みなどが判明し、この問題を解決できる方法が見つかれば、既存のSHSHも使えるようになる可能性があります。
そのため、取得・保存済みのSHSHもお捨てにならず、保存しておきましょう。
確認してみた
まず、A11デバイスであるiPhone Xで試してみました。
私の環境の場合、Generator値「0xc810e123f70da369」で生成されるApNonceは「F7BC2DBF2EBE720C37E02D0C4BAF47636C0DF5207D0BC5CB77B45C6AAD2F4C33」になります。
Generator値をセット後、リカバリーモードに入れて生成されたApNonceを確認してみると…この通り。同じApNonceが生成され、デバイス側に反映されているのがわかります。
A12デバイスの場合は
続いてA12デバイスであるiPhone XS Maxで試してみました。
従来であればGenerator値「0x074711952e3e28a7」で生成されるApNonceは「EEACD2DAF6D1FAFBFA3BBBF054001C471D773633F7435B1C3146A7A4A0EF20EE」となるのですが…。
実際にGenerator値をセット後、同じ手順で確認してみると…全く違うApNonceが生成されてしまっています。
これでは使えない
デバイス側で生成されるApNonceと、SHSH側に記録されているApNonceが合致しなければいけないため、A12デバイスでは現状…既存のSHSHを使用してFuturerestore等で復元することが出来ないという状況に。
では、どうするのか?
So, here's how you can save nonces for now:
– set generator
– reboot into recovery (ideviceenterrecovery)
– check actual nonce (irecovery -q | grep NONC)
– exit recovery (irecovery -n)then you can save nonces with both –generator and –apnonce.
— Viktor Oreshkin (@stek29) 2019年2月6日
既存のSHSHが使えないならばどうするのか?ですが、Viktor Oreshkin氏よりGenerator値をA12デバイスにセットし、実際に生成されたApNonceを指定してSHSHを取得する方法が提案されています。
これであれば、実際に生成されたApNonceを指定してSHSHを取得しているため、「他の値」が変更されるまでの間は使えます。
ちなみに、復元後も「他の値」は変更されなかったそうで、もしかしたら固定なのかも…?
取得方法がまだ面倒
対処法はわかりましたが、取得方法が面倒なのです…。今後もっと簡単に出来る方法が出てくると思いますが、今はまだ大変。
必要な物として、Generator値をセットする「voucher_nonce」、それをビルド&インストール&ログを確認する「Xcode」、安全にリカバリーモードへ入れるため「libimobiledevice
」、実際に生成されたApNonceを確認&リカバリーモードから抜けるため「libirecovery
」、SHSHを取得・保存するため「tsschecker」が必要です。
これら使用ツールの問題から、現在はMacでしか出来ない手法となっています。
取得してみた
現在はiOS 12.1.1&12.1.2のSHSHが発行を終了してしまっていますが、まだiOS 12.1.1 Beta 3のSHSHが発行中なため、今回はこちらを取得してみました。
① Generator値をセット
「voucher_nonce」をダウンロード&Xcodeで開き、ビルド&デバイスへインストール。
ちなみに「apps/AppDelegate.m」内の53行目のコメントアウトを外してあげないと、うまく動作しませんでした。
また、デフォルトではGenerator値「0xcafebabefeedface」がセットされますが、こちらも同ファイル内から変更出来ます。
インストールすると自動で実行され、Exploitが発動。成功するとログ内に「com.apple.System.boot-nonce 0xcafebabefeedface」と表示されれば、完了。
この値が違う場合は、再度実行してあげましょう。
② リカバリーモードへ
【ideviceenterrecovery】コマンドを使用し、リカバリーモードへ入れます。デバイスのUDIDが必要になるので、Xcode等で調べておくと便利。
ideviceenterrecovery [デバイスのUDID]
【例】*UDIDの形式などはデバイスにより様々なので、例はあまり参考にならないかも…
ideviceenterrecovery 00001629-1829F9174E91047E
③ ApNonceを確認
リカバリーモードに入ったら、続いて実際に生成されたApNonceを調べます。
以下のコマンドを実行すると、生成されたApNonce値が「NONC」に続き表示されるので、そちらをメモっておきましょう。
irecovery -q | grep NONC
【実行結果例】
NONC: 052E57C2236B2A6EB6413402BBD6FF015550F5E2027102EA426EC3AC5D677656
④ リカバリーモードから抜ける
以下のコマンドを実行してリカバリーモードを抜けてあげましょう。これ以外の方法もありますが、他でやるとリカバリーモードから抜けられなくなる可能性もあるので、ご注意を…。
irecovery -n
⑤ Generator値とApNonceを指定し、SHSHの取得
最後に「tsschecker」でSHSHを取得してあげます。
通常時の取得と異なっている部分は、Beta版なので「BuildManifest.plist」とビルドナンバーを指定してあげること、またセットしたGenerator値と生成されたApNonceを指定してあげる事です。
./tsschecker -d [機種ID] --boardconfig [デバイスモデル] -e [ECID] -m [iOS 12.1.1 Beta 3のIPSWから抜き出したBuildManifest.plist] -i --beta --buildid [iOS 12.1.1 Beta 3のビルドナンバー] --generator [セットしたGenerator値] --apnonce [生成されたApNonce値] -s
【例】
./tsschecker -d iPhone11,6 --boardconfig D331pAP -e 124A28127526B -m BuildManifest.plist -i --beta --buildid 16C5050a --generator 0xcafebabefeedface --apnonce 052E57C2236B2A6EB6413402BBD6FF015550F5E2027102EA426EC3AC5D677656 -s
〆
ツール等を揃えてしまえば面倒な事もないのですが、それまでが…ちょっと…。
また、リカバリーモードに入れることになるため、比較的安全なツールとは言え、危険性もあります。そのため、現状では…あまりオススメは出来ないかも。
ということで、A12デバイスはiOS 12.xが確定しているデバイスなので、現時点のバージョンを維持し、そのまま脱獄していただくのが安全かなと。
A12デバイス以外では既存のSHSHでもFuturerestoreが使えるので、そちらはひとまず安心ではあるのですが…。
コメント
マジか、コレは萎える
SANTAさん なんかすいませんでした
(´?ω?`)
XS 12.1.2で待機中なのでSHSHは使わないかな
WindowsでもVMware使って頑張ったらMac入れられるから絶望してはいけない(戒め)
やってみると意外と簡単に行けるぞ
rootlessJBでパッチ当ててTweak動かしてるけど楽しい
cafe babe feed face
これで16進数になってるのすごい
という感想
A12デバイスさんは大変だなぁ
(´・ω・` )頑張って
IOS12で脱獄してもspring customizerとかが使えるのかが問題。12対応のアプリが増えてる現状だと12に上げた方がいいんだが・・・
脱獄直後はどうしても対応脱獄アプリが少なくなるのは、どのバージョンでも同じですね…。
ただ、現在はrootlessJBの様に現時点でも開発者さんが対応作業が出来る仕組みもあるので、大物は直後から使えるものもちょこちょこありそうです