iPhone 5sでiOS 10.2.1から10.2へダウングレードする方法

iPhone 5sに限り、iOS 10.2.1にアップデートしてしまった場合でも、iOS 10.2のshshファイル(tsscheckerで取得したもの)を利用して脱獄可能なiOS 10.2へダウングレードする方法が発見されたので紹介いたします。
iOS 10.2へダウングレードするために必要なもの
iOS 10.2.1以降はJailbreakできないため、nonce collisionを利用したnon-jailbreak methodを使用します。nonce collisionとは、デバイスが復元する時にランダムな英数字を要求し、それと同じ数値が返ってきた時に復元が可能となる仕組みです。
以前にも書きましたので参考にして下さい。
futurerestore – Prometheusを使ったiOSのダウングレード・アップデートについて
「noncestatisticsを使用してapnonceを収集する」という部分でデバイスが要求するapnonceを解析し、より多くの同じ値のものをtsscheckerのオプションで指定して保存していました。
noncestatistics-latest.zip
「./noncestatistics nonces.txt」とコマンドを打つとデバイスがリカバリーモードを繰り返し複数のランダムな文字列が生成され CTRL+Cで抜け出すことでnonces.txtに保存されます。
「./noncestatistics -s nonces.txt」とコマンドを打つと、どのapnonceがより多く要求しているか確認できます。
この方法は、iPhone 5sとiPad Air 1でしか取得できませんでしたが、iOS 10.2.1でAppleにより修正されました。
しかし、iOS 10.3 beta1の場合、それは修正されていなかったため、一度iOS 10.3 beta1にDFUモードから復元してapnonceを確認してみました。

500回ほどnoncestatisticsで検証したところ、このような結果になりました。

1) 9e4c518009d00df190a450b3b47691768812360c
2) 9f4aeec726e7c682339ddb3c6c2dec52662dc517
3) a3eb70ccb7f4005d2789604f7724c6f37b4df096
この3つがより多くnonce collisionを発生させていたため、保存していたiOS 10.2のshshファイル(apnonce)を使用してfuturerestoreにより復元します。

このファイルがない限り、iOS 10.2へのダウングレードはできません。
Futurerestore Prometheusを使ってiOS 10.2へダウングレードする方法
1.iPhone 5sを一度iOS 10.3 beta1にするiOS 10.3 beta 1: iPhone_4.0_64bit_10.3_14E5230e_Restore.ipsw
DFUモードに入れてiTunesで復元します。
2.shshファイルをリネーム
1) 9e4c518009d00df190a450b3b47691768812360c
2) 9f4aeec726e7c682339ddb3c6c2dec52662dc517
3) a3eb70ccb7f4005d2789604f7724c6f37b4df096
3つのshshファイルを1.shsh 2.shsh 3.shshとリネームします。
3.iOS 10.2.1のIPSWから必要なファイルを取り出す
iOS 10.2.1: iPhone_4.0_64bit_10.2.1_14D27_Restore.ipsw
BuildManifest.plist, Mav7Mav8-7.21.00.Release.bbfw, sep-firmware.n51.RELEASE.im4p
3つのファイルを取り出します。
3.futurerestoreをダウンロードして展開
futurerestore-latest.zip
futurerestoreは、MacかLinuxのみなので、実行させる方法は過去記事を参照してください。
Windows上のUbuntu 16.04を使ってfuturerestoreを使用する方法
futurerestore-latestフォルダにiPhone_4.0_64bit_10.2_14C92_Restore.ipsw, 1.shsh, 2.shsh, 3.shsh, BuildManifest.plist, Mav7Mav8-7.21.00.Release.bbfw, sep-firmware.n51.RELEASE.im4pファイルをコピーします。
注意:iPhone 5s (iPhone6,1 n51ap)の場合
iOS 10.2: iPhone_4.0_64bit_10.2_14C92_Restore.ipsw
4.ターミナルを開いてfuturerestoreを実行
以下のコマンドでiOS 10.2へダウングレードすることができます。
sudo ./futurerestore_linux -t 1.shsh -t 2.shsh -t 3.shsh -b Mav7Mav8-7.21.00.Release.bbfw -p BuildManifest.plist -s sep-firmware.n51.RELEASE.im4p -m BuildManifest.plist -w iPhone_4.0_64bit_10.2_14C92_Restore.ipsw※Macの場合は「sudo」は要りません。
ビデオでのデモ
iPhone 5s以外では復元できません。もしかしたらiPad Air 1で実行できるかもしれませんが、持っていないため検証できません。
以上、参考になれば幸いです。
ディスカッション
コメント一覧
当方MacOS10.12.3にて、同様に作業しましたが、https://gs.apple.com/TSS/controller?action=2の部分でエラーが出ており、その先に進めません。
これは、Apple側でTSSサーバーを停止しているとかですか?
[Error] Got empty IM4M
[Error] Fail code=-15
Failed with errorcode=-15
とでています。
同様のエラーが出ているログを見つけたので参考にして下さい。
https://www.reddit.com/r/jailbreak/comments/5r8ad1/tip_used_futurerestore_prometheus_to_upgrade_to/dd6g8mb/
ご返信ありがとうございます。参考のページ拝見しましたが、結果は同じです。
ターミナルの結果を貼っておきます。
Version: b35d3e1245da49950028d753b1bdb40fce5d21d5 – 90
futurerestore init done
reading ticket 1.shsh done
reading ticket 2.shsh done
reading ticket 3.shsh done
[TSSC] opening BuildManifest.plist
WARNING: Unable to find BbSkeyId node
[TSSR] User specified not to request a Baseband ticket.
Request URL set to https://gs.apple.com/TSS/controller?action=2
Sending TSS request attempt 1… response successfully received
Did set sep+baseband path and firmware
[TSSC] opening BuildManifest.plist
WARNING: Unable to find BbSkeyId node
[TSSR] User specified to request only a Baseband ticket.
ERROR: Unable to get BasebandFirmware node
ERROR: Unable to find required BbGoldCertId in parameters
Request URL set to https://gs.apple.com/TSS/controller?action=2
Sending TSS request attempt 1… response successfully received
Found device in Normal mode
Entering recovery mode…
INFO: device serial number is DNPM4******J
[Error] Got empty IM4M
[Error] Fail code=-15
Failed with errorcode=-15
ResEditも関係するところ見ましたが、結果はおなじになってしまいます。
デバイスは5sでしょうか?
デバイスはiPhone5Sです。一旦10.21に上げてから10.3bで復元しました。
./futurerestore_macos -t 2983657450516_iPhone6,1_10.2-14C92.shsh2 –no-baseband -s sep-firmware.n51.RELEASE.im4p -m BuildManifest.plist -w iPhone_4.0_64bit_10.2_14C92_Restore.ipsw
これでおこなってますが、リカバリーモードのループになっています。
逆に–nobasebandを指定しているからエラーが起こっているかと考えられます。
shshが原因です。tsscheckerでshsh2を作成しても、中身は何も書かれていないshsh2が作られてます。
@ServerVersion
2.0.0
updateInstall
@ServerVersion
2.0.0
TSS Serverで以前取得したshsh2には、ギッシリ書かれていました。
そのshshで作業すると動作し続けますが、Appleと合致しするshshを待ち続ける状態のままで、既に2日間経っています。
この方法にて、futurerestoreで、ApNonceが一致するまで再起動ループ?するところまでいくのですが、ある程度するとループが止まってしまうのは仕様でしょうか?
コピペするだけとは言えやり直すのが面倒くさいです。
tsscheckerで指定して保存する必要があったので、ダウングレード出来る方は少数だと思います。
なんとなくわかりました。
ありがとうございます。