diosra2’s blog

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

SHSHなしでiOSをダウングレードする

SHSH

『SHSH』とはiPhone 3GSから導入されたファームウェアの認証システムです。

これにより、iPhone 3GS以降, またはiOS 4以降のファームウェアはAppleの認証無しに復元や起動をすることができなくなっています。

iOS 4までは、Appleがファームウェアを認証しているうちに署名(SHSH blobs, ECID SHSH)を取得しておくことで、Cydia(Saurik) ServerやTinyUmbrella等を通してAppleの認証サーバーを偽装することで、あらかじめ保存しておいたSHSH blobsを使ってファームウェアを認証し、SHSH blobsのある特定のバージョンに復元することが可能です。

iOS 5以降はAPTicketが導入され、nonceが含まれるようになったため、上記のように簡単に任意のバージョンへダウングレードすることは難しくなりました。iOS 5以降はBootRom Exploitなどを活用し、デバイスをPwned DFU Modeにしてカスタム・ファームウェア(CFW)で復元する必要があります。

A7(64bit)デバイス以降はA6デバイス以前とは少し認証方法が異なります。

 

SHSHのないファームウェアにダウングレードする

iOSデバイスをSHSHなしでダウングレードするためにはUntethered BootRom Exploitが必要です。例えば、iPhone 3GSなどの一部の古いデバイスでは0x24000 Segment Overflowやalloc8 exploitのような脆弱性を利用することでSHSHなしでCFWを起動できます。

 

利用可能なデバイスと使用する脆弱性(iPhone 3GS/iPod 2nd)

0x24000 Segment Overflow

by iPhone Dev Team 

Device: iPod Touch 2nd Generation (Old BootRom), iPhone 3GS (Old BootRom)

Bootrom 240.4, Bootrom 359.3のデバイス上で未署名なLLBを実行できるUntethered BootRom Exploitです。

Limera1n Exploitと組み合わせてSHSHなしで復元・ダウングレードしてiOSを起動することが可能です。

 

alloc8 exploit

by axi0mX

Device: iPhone 3GS

iPhone 3GS上で使用できるUntetehred BootRom Exploitです。

Limera1n Exploitと組み合わせてSHSHなしで復元・ダウングレードし、起動することが可能です。(ただし制約あり)

Old BRの場合は24kpwnを利用したほうが良いです。

 

Tethered Downgrade (紐付きダウングレード)

A4デバイス以降はUntethered BootRom Exploitが存在しないため、SHSHなしではダウングレードできません。

しかし、A4デバイスではLimera1n Exploitを利用してTethered Downgrade (紐付きダウングレード)をすることは可能です。

例としては"Sund0wn"のようなツールや、GeekGradeのような改造されたIPSWが存在します。

利用可能なデバイスと使用する脆弱性

Limera1n Exploit

by geohot

Device: iPhone 3GS, iPhone 4, iPad, iPod Touch 3rd Generation, iPod Touch 4th Generation

USBの接続で、未署名のコードを実行可能にするTehered BootRom Exploitです。

SHSHなしでダウングレードすることが可能ですが、これらのデバイスはSHSHなしでは起動できないため、起動時にLimera1n Exploitを使用してBootする必要があります。

Tethered Downgrade (紐付きダウングレード)です。

手法

CFWで復元するためにiBSS/iBECにパッチをして復元時の署名認証を無効化し、CFWで復元が実行されるようRamdiskのasrにパッチをします。

続いて、Ramdisk内のoption.plistを開き、FlashNORをfalseに設定します。

これにより復元時にブートチェーンは復元されないため、元々のブートチェーンが維持されます。そのため復元後は、維持された元々のブートチェーンが新たに書き込まれたiOSの起動をできないため、デバイスは起動を停止しリカバリーモードとなります。(Sund0wnやGeekGradeではこの調整が実行されています。)

起動するためにはLimera1n Exploitを利用してデバイスをPwned DFU Modeに入れ、redsn0w等でデバイスにブートチェーンを送り込み、Just Bootする必要があります(Tethered)。この動作は再起動するたびに毎回必要です。

この方法では起動するために毎回母艦からブートローダーを送信しなければならない、A4デバイス以外では使用できないため、後述の方法をお勧めします。

 

デュアルブート

任意のiOSを起動させる方法としては、kloaderを利用してDual(Multi) Bootをする方法もあります。

任意のiOSをデュアルブートするためには、デバイスのパーティションを分割し、新たに生成した領域に任意のiOSのRoot FileSystemをインストールします。

Untethered(紐なし)での起動方法は2つ存在します。

一つはNOR Baseのもので、あらかじめ復元時にデュアルブートするiOSを起動するためのカスタムイメージを復元し、kloaderを利用しでパッチをしたLLBからカスタムイメージを起動してiOSをブートする方法です。これはあらかじめiOSの復元が必要です。

もう一つはOTA Updateの仕組みを利用したものです。パッチされたiBSS/iBECをmulti_kloadeを使ってロードしてiOSをブートします。この方法はiOSの復元は不要です。

どちらの方法でもkloaderを使用するため、32bitデバイスでJailbreakが必要です。

利用可能なデバイスと使用するツール

kloader/multi_kloader

by winocm

Device: Jailbreak済みの32bitデバイス。(tfp0が有効。)

kloaderを利用して、復号化されたイメージをRAMにBootstrapし、新しくインストールされたiOSを起動します。

 

64bitデバイス

64bitデバイスではSHSHなしでiOSをダウングレードする方法は存在しません。