diosra2’s blog

iOS 脱獄、ダウングレード等

futurerestoreを使って32bit(A5/A6)のiOSデバイスをダウングレードする

0, 前置き

A4デバイスまではBootRom (Limera1n) Exploitが存在したため、SHSHを組み込んだCFWで復元することで容易にダウングレードやバージョンを保っての復元を可能にしていました。

しかし、A5以降ではBootRom Exploitは修正されたため、これらは使用できなくなりました。

 

 

復元時の動作 

iOS 5以降はAPTicketが導入されたことで復元時にNonceを検証するようになったため、SHSHを保存したとしても、そのまま利用することはできません。

(詳細: http://api.tihmstar.net/prometheusSlides.pdf

>Normal Restore (iOS 5~, 32bit)

 

~A4デバイスではLimrea1n Exploitを使って復元時の署名認証自体をbypassしているため、保存しておいたSHSHを使って復元ができます。

>Limera1n (~A4)

 

 

A5, A6デバイスではBootRom or iBoot Exploitはありませんが、(過去の記事でも書いたとおり)kloaderを利用することで、A5/A6(X)でも復元時の署名認証をbypassできます。

>kloader (32bit only): Image loader for the kernel, bootstraps custom image in RAM.

 

 

kloaderを使った復元には仕様上、Restore Mode (復元モード) を起動させるのに必要なもの(iBSS, iBEC, DeviceTree, Restore RamDisk, KernelCache, (AppleLogo))をdecrypt(復号化)しておく必要があります。

幸いなことに、A5(X)/A6(X)デバイスのFW Keyはほとんど公開されているので特に問題ありません。

Firmware Keys - The iPhone Wiki

*この方法ではFW Keyがない場合はダウングレードできません

 

 

また、現在のOSがiOS 9の場合はiBootが現在のNonceに関係なく有効なAPTicketを許可し、復元が実行されるため、Recovery Modeに入れるだけでiOS 9にのみ脱獄なしで復元できます。

このバグはiBSSにも存在するため、有効なiBSS blobを持っていればDFU ModeにすることでどのバージョンからでもiOS 9に復元することができます。

*この方法ではFW Key等は不要なのでiOS 9の動くすべての32bitデバイスが利用可能です。

 

 

*永久にバージョンを維持すること 

 

A4デバイス以下ではいろいろな方法でバージョン維持やダウングレードを可能にしていました。

iPhone 3GS等ではUntetherのBootrom Exploit(24kpwnやalloc8 exploitなど)が存在するため、SHSHなしでどのバージョンにも復元、脱獄が可能です。

A4(iPhone 4等)ではLimera1n ExploitというBootrom Exploitが存在するので、SHSHさえあればいつでもバージョンの維持が可能です。(1)

 

ではA5/A6デバイスはどうでしょう?

もし、Nonceの含まれないiOS 9.0~9.3.5のSHSHを1つでも持っていれば"3, 復元する"を利用することで、iOS 9のみに半*永久的にダウングレード、バージョンを保っての復元などが可能です。(2)

さらに、もしNonceの含まれないiOS 9.0~9.3.4のSHSHを1つでも持っていれば 脱獄することで、iDeviceReRestore or "4, 復元する(iOS 9.x (no Nonce) only) "が利用でき、すべてのバージョンへの半*永久的ダウングレード、バージョンを保っての復元、半*永久的な脱獄維持などが可能です。(3)(4)

(*ベースバンドのみ、復元時にAppleからの署名が必要)

例)

(1) iPhone 4: DFU --limera1n exploit--> Pwned DFU --> SHSH+CFWで復元!

(2) iPhone 5: DFU/Recovery --> SHSH(Nonce無し)を使ってiOS 9.0~9.3.5へ復元!

(3) iPhone 5 (iOS 6.0~8.4/9.0~9.3.4): Jailbreak --> kloader --> kDFU --> SHSH+CFWで復元!

(4) iPhone 5 (iOS 8.4.1/9.3.5~): DFU/Recovery --> SHSH(Nonce無し)を使ってiOS 9.0~9.3.4のどれかに復元 --> Jailbreak (Pangu9/Home Depot) --> kloader --> kDFU --> SHSH+CFWで復元!

 

逆にNonceの含まれないiOS 9.0~9.3.5のSHSHを1つも持っていない場合、脱獄を失えばダウングレードやバージョンを保っての復元は不可能となり、最新バージョンのみにしか復元できなくなってしまうため、注意してください。(今現在、A5以降では最新バージョンでの脱獄は不可。)

 

*A4デバイス以降はSHSHがなければあったとしてもダウングレードはできません。

 

1, 対応デバイス

iOS X.X -> iOS X.X ( 3の手順 )

Limera1n Device (iFaith等でもできるのでこれを使用するメリットはありません。)

iPhone 4S, iPhone 5, iPhone 5c

iPad 2, iPad (3rd generation), iPad (4th generation), iPad mini

iPod Touch (5th generation)

*(NonceなしSHSHでのiOS 9.xへの復元以外は) Jailbreak済み、tfp0が有効であることが条件です。

 

iOS X.X -> iOS 9.X ( 4の手順 )

iPhone 4S, iPhone 5, iPhone 5c

iPad 2, iPad (3rd generation), iPad (4th generation), iPad mini

iPod Touch (5th generation)

 

2, 注意

対応デバイスであることと、正常なSHSHがあることを確認してください。

SHSHは3の手順ではErase, Update, OTAのどれでも問題なくEraseで復元できます。

(署名認証しないため。)

4の手順ではEraseのSHSHを使ってください。

Pangu (iOS 7)の場合はuntetherを最新のものにアップデートしてください。(最新バージョン以外ではtfp0が有効でない。)

ベースバンドは最新のものになります。

*また、iOS 9.xのSHSH (no Nonce)がある場合は脱獄せずに復元可能です。

その場合はこの記事4, 復元する(iOS 9.x (no Nonce) only)を見てください。

3, 復元する

3-1, iOSバイス側の動作

iOSバイスをkloaderを使いkDFU Modeに入れる必要があります。

@tihmstar 氏のkDFU.appを使うと簡単にkDFU Modeに入ることができるので、これを使うと良いでしょう。

Repository: http://repo.tihmstar.net

(ただし、~A4ならPwned DFU Modeでもよいです。)

バイスをUSB接続させ、kDFU Modeに入れます。

 

3-2, PC側の動作

@tihmstar 氏のfuturerestoreを使用します。以下からダウンロードしておいてください。

github.com

直リンク: http://api.tihmstar.net/builds/futurerestore/futurerestore-latest.zip

 

futurerestoreでは自動でiBSS, iBEC, DeviceTree, Restore RamDisk, KernelCache, AppleLogoをdecrypt(復号化)し、iBSS/iBECにパッチしてくれるため、特に複雑な作業は入りません。

また、ベースバンドは最新のものになるため注意してください。

 

iOSバイスがkDFU Modeに入ったら以下のコマンドをターミナルで実行します。

User$ ./futurerestore --use-pwndfu -t ticket.shsh --latest-baseband ios.ipsw

 

iPod Touch, iPad(wi-fi only)のみ:

User$ ./futurerestore --use-pwndfu -t ticket.shsh --no-baseband ios.ipsw

バイスが復元モードとなり、復元が完了すれば成功です。お疲れ様でした!

 

4, 復元する(iOS 9.x (no Nonce) only)

iOS 9.xはiBootにAPTicket検証時のバグがあるため、脱獄せずにSHSHを使い、復元できます。

4-0, 注意点

iOS 9.xで、APTicketにNonceが含まれていないことが条件です。

この条件を満たしていない場合は復元できません。

 

Nonceが含まれているかどうかはaxi0mX 氏の"apticket-nonce-checker"で確認可能です。

github.com

 

使用方法

ターミナルから以下のコマンドを実行

(myblob.shshは確かめたいSHSHの名前です。) 

User$ ./apticket-nonce-checker.py ticket.shsh

 

APNonceが含まれていなければ

User$ ./apticket-nonce-checker.py ticket.shsh

Parsing APTicket from SHSH file.

APTicket: command not found

 

と表示されます。

 

APNonceが含まれていれば

User$ ./apticket-nonce-checker.py ticket.shsh

APTicket has a nonce. Valid nonces are 20 bytes long.

Nonce (hex dump): 0000000000000000000000000000000000000000

Nonce length: 20 bytes

 

のように表示されます。

 

*SHSHの種類を確認する

この方法ではErase, UpdateのSHSHでなければ使用できません。

おそらくこれが問題になることはないですが、一応目を通しておくと良いと思います。

diosra2.hatenadiary.jp

 

4-1, iOSバイス側の動作

現在のiOSバージョンがiOS 9.xの場合はiOSバイスをRecovery Modeに、

それ以外の場合はDFU Modeにします。

4-2, PC側の動作

@tihmstar 氏のfuturerestoreを使用します。以下からダウンロードしておいてください。

github.com

直リンク: http://api.tihmstar.net/builds/futurerestore/futurerestore-latest.zip

 

ベースバンドは最新のものになるため注意してください。

 

iOSバイスをDFU or Recovery Modeに入れたら以下のコマンドをターミナルで実行します。

User$ ./futurerestore -t ticket.shsh --latest-baseband ios.ipsw

 

iPod Touch, iPad(wi-fi only)のみ: 

User$ ./futurerestore -t ticket.shsh --no-baseband ios.ipsw

 

 

バイスが復元モードとなり、復元が完了すれば成功です。お疲れ様でした!