diosra2’s blog

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

【Tutorial】 iPhone 3GSをiPhoneOS 3.0にSHSHなしでダウングレードする。

iPhone 3GSではすでに知られているよう、SHSHなしでどのバージョンにも復元することができます。

しかし、CFWを作成するツールでは、PwnageToolのiPhoneOS 3.1が最小のバージョンとなっていて、3.0.xのバンドルは存在しません

作りました。

こっちの方が数百倍くらい簡単にできます。

 

 

SHSHがある場合は通常どおりのファームウェアで復元できますが、ない場合はLLBに0x24000 Segment Overflowを適用させる必要があるのでCFWで復元しなければいけません。CFWで復元するためにはPatchを作成しなければならず、結構面倒です。

そこで、今回は3.1のCFWを利用して3.0のファームウェアを復元してみることにします。

 

用意したもの

・iPhone 3GS (Old BootRom)

・Mac

・PwnageTool (iPhoneOS 3.1のCFW)

・iPhoneOS 3.0 のFW

・redsn0w (v0.9.15b3)

・Odysseus

 

使用する脆弱性

0x24000 Segment Overflow (以下24kpwn) --Old BootRom (旧ブートロム)のみ。SHSHなしでの起動

alloc8 exploit --New BootRom (新ブートロム)のみ。SHSHなしでの起動

limera1n exploit --復元、Flash/Dump NOR (ipwndfu)

iBoot Environment Variable Overflow --Jailbreak

 

手順

1, 3.0のLLB/iBootにパッチ

今回はSHSHがないので、署名認証を無効にする必要があります。3GSのブート手順は、以下の通りです。

BootRom -> LLB -> iBoot -> Kernel

BootRomからLLBは24kpwn(Old BootRom)で署名認証を回避できます。

また、LLB/iBootはIDA ProやHopperなどで逆アセンブルして、Signature Checkをパッチをして署名認証を無効にします。

 

LLB

*Decrypt

User$ ./xpwntool LLB.n88ap.RELEASE.img3 LLB.n88ap.dec -k [Key] -iv [IV]

 

*Signature Check Patch

0x00005CA2: FF F7 11 FF -> 00 20 00 20

0x00005D62: FF F7 B1 FE -> 00 20 00 20

0x000094E4: 4F F0 FF 30 -> 00 20 00 20

 

*24kpwnの適用されたIMG3ファイル作成

User$ ./xpwntool LLB.n88ap.dec PwnedLLB.n88ap.img3 -xn8824k -t LLB.n88ap.RELEASE.img3 -k [Key] -iv [IV]

 

iBoot

*Decrypt

User$ ./xpwntool iBoot.n88ap.RELEASE.img3 iBoot.n88ap.dec -k [Key] -iv [IV]

 

*Signature Check Patch

0x00014796: FF F7 11 FF -> 00 20 00 20

0x0001480C: FF F7 D6 FE -> 00 20 00 20

0x00014856: FF F7 B1 FE -> 00 20 00 20

0x0001D1F4: 4F F0 FF 30 -> 00 20 00 20

 

*IMG3ファイル作成

User$ ./xpwntool iBoot.n88ap.dec PwnediBoot.n88ap.img3 -t iBoot.n88ap.RELEASE.img3 -k [Key] -iv [IV]

 

2, 3.1のCFWを導入

PwnageToolで作成した3.1のCFWをunzipし、以下のものを取り出します。3.1のFWはこれで用済みです。

iBSS

iBEC

RestoreRamdisk (018-5352-086.dmg)

KernelCache

AppleLogo

DeviceTree

 

続いて、3.0FWを解凍し、Downgradeフォルダを作成して取り出した3.1のFWをすべてぶち込みます。

また、OdysseusのCFWの要領でBuildManifsetの以下の場所を、3.1のファームウェアのある場所に書き換えます。

 

 

 

そして、先ほどパッチしたLLB(PwnedLLB.n88ap.img3)/iBoot(PwnediBoot.n88ap.img3)を、既存のLLB/iBootと置き換えます。置き換えたら、LLBとiBootはLLB.n88ap.RELEASE.img3とiBoot.n88ap.RELEASE.img3にそれぞれリネームしなおしてください。

最後にvfdecryptで3.0のRootFSを復号化しておきます。

 

全部できたらzipして拡張子をipswにします。

これで完了です。

 

3, CFWで復元、起動失敗。

Odysseusのidevicerestoreで復元します。

空のSHSHファイルを用意してください。

デバイスをPwned DFU Modeに入れ、idevicerestoreで以下のコマンドから復元します。

User$ ./idevicerestore -e -w iPhone2,1_3.0_7A341_Custom.ipsw

復元が終わるとリカバリーモードに入ります。

 

4, ipwndfuでDump NOR

デバイスをDFU Modeに入れ、ipwndfuを使ってNORをダンプします。

User$ ./ipwndfu -p

User$ ./ipwndfu --dump-nor=iPhone2,1_3.0_7A341_NOR.dump

 

5, さらに2回OFWで復元

デバイスをDFU Modeに入れ、redsn0wでPwned DFU Modeにします。そしてidevicerestoreで通常の3.0のIPSWで2回復元します。(iPhoneOS 3.1以降から3.0にダウングレードするためには2度復元をかける必要があります。)

User$ ./idevicerestore -e -w iPhone2,1_3.0_7A341_Restore.ipsw

初期BBである04.26.08でない限り、復元は失敗します。これはBBのアップデートで失敗しているだけなので、無視して構いません。

また、デバイスはDFU Modeで停止します。これはLLBが未署名なためです。

 

6, ipwndfuでFlashNOR

ipwndfuで先ほどのNORを書き込みます。

User$ ./ipwndfu -p

User$ ./ipwndfu --flash-nor=iPhone2,1_3.0_7A341_NOR.dump

そうすると起動しますが、リカバリーモードで停止します。(復元に失敗していた場合)

 

7, irecoveryでrecovery fix

最後に、irecoveryでauto-bootします。

User$ ./irecovery -a

 

8, 成功!!

起動しました!

 

番外編: New BootRom(新ブートロム)の場合

New BootRomでは24kpwnは塞がれているので、alloc8 exploitを使用する必要があります。6の手順時の最後にこれを追加することで、起動することができます。

User$ ./ipwndfu -x

ただし、注意点としては2011年以降の3GSではiPhoneOS 3.xや、iOS 4.xですら起動させることができないものもあるようです。(2010年でも後半週のものは3.x起動は怪しいかも)

Old BootRom全種と2009年製造のNew BootRomではおそらく起動できるかと思います。

 

番外編2, Jailbreak

Jailbreakはpurplera1nやredsn0w(v0.8-0.9.3)で可能です。まだlimera1n exploitが存在しない頃のツールだったかと思います。3.0ではデバイスへの侵入にiBoot Exploitを利用しているはずなので、リカバリーモードにいれて脱獄処理をします。

ただし、同梱されているCydiaが古すぎて使い物にならないで、redsn0w(v0.9.15b3)のCydia(v1.1.8)あたりと置き換えてあげると良いかと思います。

3.0では24kpwnで脱獄します。そのため、脱獄すると新たに24kpwnによってブートロムベースで脱獄されるので、New BootRomの場合は再度ipwndfuでalloc8 exploitを適用してください。

脱獄すれば、BBが05.13.04以下ならUnlockも可能ですね。

 

Copyright (C) 2017-2018 Diosra2. All Rights Reserved.