futurerestore – Prometheusを使ったiOSのダウングレード・アップデートについて

2017/01/06 11:55


iPhoneなどで使われているiOSのダウングレードやアップグレードができる「futurerestore(aka Prometheus)」ですが、情報が錯綜して利用できない状態でした。

64bitデバイスでは今までAppleから現在発行されているバージョンでしか復元できませんでしたが、正しい手順で取得したshsh2ファイルを利用することにより、Appleがシステムを変更しない限りいつでもそのバージョンで復元ができるようになりました。

※32bitの場合、脱獄が必要です(Tridentを使った方法でiOS 9.3.4までは非脱獄でも出来る場合があります)

今回は実際にfuturerestoreを使用してiPhoneの復元ができたので、その使用方法を紹介します。

実際にfuturerestoreで復元に使った環境

記事執筆時点ではiOS 10.2しか署名されておらず、futurerestoreを使った10.2から10.2への復元になりました。10.1、10.1.1が署名されていた頃にtsscheckerを使用してshsh2を保存された方もいるかと思いますが、非脱獄状態では利用できません。

しかし、必ずしも不要なものとはならないので取っておいて下さい。

環境の構築


XcodeとCommand Line toolsをインストール

Homebrewのインストール
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

依存ツールのインストール
brew install automake autoconf libtool pkg-config libzip
git clone https://github.com/tihmstar/libirecovery && cd ./libirecovery && bash autogen.sh && make install
git clone https://github.com/tihmstar/libcrippy && cd ./libcrippy && bash autogen.sh && make install
git clone https://github.com/tihmstar/libfragmentzip && cd ./libfragmentzip && bash autogen.sh && make install
git clone https://github.com/tihmstar/libpartialzip && cd ./libpartialzip && bash autogen.sh && make install

opensslのインストール
cd /usr/local
sudo mkdir ssl
sudo chmod 777 /usr/local/ssl
cd
git clone https://github.com/openssl/openssl.git
cd openssl
./config
make
make install

curlのインストール
brew install curl

シンボリックリンクの生成
brew install openssl
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/Cellar/openssl/1.0.2j/bin/openssl openssl

これで動くようになるはずです。もしかしたら足りない部分もあるかもしれません。

Xcodeは8.2を使用しました。

noncestatisticsを使用してapnonceを収集する


@tihmstar氏のブログに詳細が書いてあります。

How to downgrade without jailbreak using prometheus

chmod +xで実行権限を与えた後に、「./noncestatistics nonces.txt」とコマンドを打つとデバイスがリカバリーモードを繰り返し複数のランダムな文字列が生成され CTRL+Cで抜け出すことでnonces.txtに保存されます。

※CTRL+Cで抜け出すと自動的にデバイスがRebootして通常のモードに戻ります。

これはiOSバージョンやデバイスごとに異なります。

※記事執筆時点では公開されているnoncestatisticsにバグが有り、txtとして保存できません。

デバイスをUSBで接続して、./noncestatistics とターミナルで実行するとログが表示されるので、500~1000回ログを収集します。

touch nonce.txt

これで空のテキストファイルを作成し、ターミナルのログをコピペし保存します。

先頭の文字列「000001 」などが邪魔なので、以下のコマンドで削除します。

cut -c 7- nonce.txt >> nonce2.txt

nonce2.txtに先頭の数字を取り除いた「ApNonce」が保存されます。
次に重複したものが何回でているか確認します。

cat nonce2.txt | sort | uniq -c | sort -r

iPhone 5s iOS 10.2の場合、以下のAppNonceが多く記録されました。
106 ApNonce=9e4c518009d00df190a450b3b47691768812360c
101 ApNonce=9f4aeec726e7c682339ddb3c6c2dec52662dc517
39 ApNonce=a3eb70ccb7f4005d2789604f7724c6f37b4df096
32 ApNonce=8514e466166d7cc8632e26cc49376adea798ba56
24 ApNonce=543c6279f80bfd192aa7fd96c31faeb86c62a487
18 ApNonce=8ce022de8e10b7a8dd04bd8a524f88e41d450075
14 ApNonce=e35948fd9400e7c4732ac2199bf379de81589e59

上位5つを指定してtsscheckerでshsh2を取得します。

tsscheckerでのshsh2の取得


./tsschecker_macos -d DEVICE_MODEL -i 10.2 --buildid 14C92 -e YOURECID -s
これでiOS 10.2のshsh2を取得できますが、ApNonceが含まれません。

nonceEnablerを使った脱獄向けの「no-apnonce shsh2」ファイルになります。

非脱獄の場合、このファイルではfuturerestoreを使って復元することはできません。

そこで、さきほど取得した上位5つのApNonceを指定して、shsh2ファイルを取得します。

YOURECIDは自分のデバイスのECID
./tsschecker_macos -d iPhone6,1 -i 10.2 --buildid 14C92 -e YOURECID -s --apnonce 9f4aeec726e7c682339ddb3c6c2dec52662dc517

このようにして「–apnonce」の後にさきほどの文字列を追加して保存していきます。

9f4aeec726e7c682339ddb3c6c2dec52662dc517
9e4c518009d00df190a450b3b47691768812360c
a3eb70ccb7f4005d2789604f7724c6f37b4df096
8514e466166d7cc8632e26cc49376adea798ba56
543c6279f80bfd192aa7fd96c31faeb86c62a487

一回実行するごとに同じ名前になってしまうので、1.shsh2 2.shsh2~とリネームして下さい。

img4toolを使うことで、どのnonceか確認することができます。

./img4tool -s 1.shsh

shsh2ファイルが有効かどうかも確認できます。

./img4tool -v BuildManifest.plist -s my_saved_file.shsh2

BuildManifest.plistは、取得したバージョンのIPSWファイルを展開するとあります(.ipswを.zipにリネーム)

futurerestoreを使ったダウングレード/アップグレード


有効なshsh2ファイルを保存したら、futurerestoreを使って復元することができます。

事前にどんな手順で行うか確認してみましょう。


保存したshsh2ファイルはiOS 10.2なので、10.2から10.2への復元となります。

./futurerestore_macos -t 1.shsh -t 2.shsh -t 3.shsh -t 4.shsh -t 5.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

このようにしてファイルを選択して実行します。

成功するとこのように復元作業が行われます。

まとめ


今回成功したのはiPhone 5sで現在署名が発行されているiOS 10.2のSHSHファイルを利用したためでした。


以前にtsscheckerを利用して、iOS 10.1 – 10.1.1のshsh2を保存した方も多いかと思いますが、非脱獄状態では利用することができません。

https://tsssaver.1conan.com/」こちらのサイトを利用して保存したshsh2も同様です。

apnonceも含まれていますが、過去に@tihmstarがiOS 9.3.5時代に取得したものを利用していたため

603be133ff0bdfa0f83f21e74191cf6770ea43bb
352dfad1713834f4f94c5ff3c3e5e99477347b95
42c88f5a7b75bc944c288a7215391dc9c73b6e9f
0dc448240696866b0cc1b2ac3eca4ce22af11cb3
9804d99e85bbafd4bb1135a1044773b4df9f1ba3

tihmstar’s Blog: Noncestatistics


iOS 9.3.3などからnonceEnablerで復元するとSEPの非互換性からTouch IDが使えなくなってしまいます。

また、iPhone 5s以外のデバイスで「noncestatistics」を利用しても、重複するapnonceは得られませんでした。
(iPhone 6s、iPhone 7 Plusで確認)


noncestatisticsのバグなのか、デバイスの問題なのかは分かりませんが、iPhone 5s以外では非脱獄の利用はできなそうです。tihmstar氏にログを送っていますが、返答がないのでわからない状態です。

現状脱獄なしでできることはiOS 10.2への復元のみになります。

iOS 10.2から10.1.1へのダウングレード、9.3.5などから10.1.1へのアップグレードはできません。

上記の手順でshsh2を保存しておけば、Appleのシステムが変わらない限り、iOS 10.2.1以降がリリースされ10.2の署名が止まってもiOS 10.2で復元することができます。




Tsschecker v170ではiPhone 7(+)のshsh2ファイルをジェネレータで保存できるようになったとのこと。

iOS 10.1.1の脱獄ベータをリリースしているLuca氏も保存を推奨しています。


こちらはiPhone 7 / 7+ でnonceEnablerを使った方法で利用できるかと思います。

不具合が起きた時に復元できるようにshsh2を保存しておきましょう。