diosra2’s blog

iOSのJailbreak、ダウングレード

ch3rryflower - 32-bit iOSデバイスをSHSHなしで紐付き・紐なしダウングレードするためのCFW作成ツール

32-bit iOSデバイスをSHSHなしで紐付き・紐なしダウングレードするためにCFW作成ツールを作成しました。使い方は下の方に書かれていますので見てください。

 

v1.2 iPhone 4のみです。checkm8が対応次第、他バージョンも対応させます。

 

対応環境: macOS 10.13 (それ以外は未確認)

 

使い方

*Untethered Downgrade (紐なしダウングレード) [for iOS 6/7]

iPhone 4で、iOS 6と7にダウングレードしたい場合

まず、iOS 7.1.2と、ダウングレードしたい目的のiOSのipswをch3rryflowerの中にダウンロードしてください。(この説明ではiOS 6.1.2を使用します。)

Firmware - The iPhone Wiki

 

ダウンロードできたら、ターミナルでch3rryflowerに移動します。

 

1, ブートローダーの作成

続いて、以下のコマンドをターミナルで実行します。

mkdir tmp

cd tmp

unzip -j ../iPhone3,1_6.1.2_10B146_Restore.ipsw Firmware/all_flash/all_flash*/iBoot*

unzip -j ../iPhone3,1_6.1.2_10B146_Restore.ipsw Firmware/dfu/iBEC*

※"iPhone3,1_6.1.2_10B146_Restore.ipsw"は、ダウングレードしたい目的のiOSのipswにあたります。

tmpフォルダ内に、"iBoot.n90ap.RELEASE.img3"と"iBEC.n90ap.RELEASE.dfu"が生成されました。

次にiBootを復号化したいので、iOS 6.1.2のiBootのkeyを調べます。The iPhone Wikiに乗っているのでそれを使用してください。

Firmware Keys - The iPhone Wiki

 

調べると、iOS 6.1.2では以下の通りになっていると思います。

IV = c939629e3473fdb67deae0c45582506d

Key = cbcd007712618cb6ab3be147f0317e22e7cceadb344e99ea1a076ef235c2c534

iBootを復号化するために、以下のコマンドをターミナルで実行します。

../bin/xpwntool iBoot.n90ap.RELEASE.img3 iBoot.n90ap.RELEASE.dec -iv c939629e3473fdb67deae0c45582506d -k cbcd007712618cb6ab3be147f0317e22e7cceadb344e99ea1a076ef235c2c534

iBoot.n90ap.RELEASE.decが生成されました。

 

*次が重要です!

このiBootは目的のiOSにSHSHなしでダウングレードするために重要です。

iBoot32Patcherを使用してiBootにダウングレード用のパッチをする必要があります。

このパッチを変更することで、起動時にverbose bootで起動したりすることが可能です。いくつか例を挙げておきます。どれか一つを実行してください。

*設定なし(基本)

../bin/iBoot32Patcher iBoot.n90ap.RELEASE.dec PwnediBoot --rsa --boot-partition

 

*verbose boot

../bin/iBoot32Patcher iBoot.n90ap.RELEASE.dec PwnediBoot --rsa --boot-partition -b "-v"

 

*verbose bootとcode signing enforcementの無効化

../bin/iBoot32Patcher iBoot.n90ap.RELEASE.dec PwnediBoot --rsa --debug --boot-partition -b "-v cs_enforcement_disable=1 amfi_get_out_of_my_way=1"

 

PwnediBootというファイルが生成されていればOKです。

最後に、以下のコマンドを実行します。

../bin/xpwntool PwnediBoot iBoot -t iBEC.n90ap.RELEASE.dfu

mv -v iBoot ..

cd ..

rm -r tmp

 

ch3rryflower内に"iBoot"というファイルが生成されていればOKです。

 

2, CFWの作成

cherryを使用して、CFWを作成します。

./cherry [in] [out] -derebusantiquis [base-ipsw] <bootloader>

[in]は、ダウングレードしたい目的のiOS (今回はiOS 6.1.2)のipsw

[out]は、作成したいCFWのファイル名

[base-ipsw]はiOS 7.1.2のipsw

<bootloader>は先ほど作成したiBootです。

 

つまり、今回の場合は以下のコマンドになります。

./cherry iPhone3,1_6.1.2_10B146_Restore.ipsw iPhone3,1_6.1.2_10B146_Custom.ipsw -derebusantiquis iPhone3,1_7.1.2_11D257_Restore.ipsw iBoot -memory

*Macの搭載メモリが8GB以下の場合は-memoryフラグは外してください。(約4GBのメモリを使用します。)

 

iPhone3,1_6.1.2_10B146_Custom.ipswがSHSHなしダウングレードで使用できるCFWです。

 

3, 復元

最初に、iPhone 4をDFU ModeでMacに接続しておいてください。

初回のみ、以下のコマンドからipwndfuをインストールする必要があります。

git clone https://github.com/axi0mX/ipwndfu

そして、以下のコマンドを実行し、デバイスをpwned DFU Modeにします。

cd ipwndfu

./ipwndfu -p

cd ..

 

*ここが重要です!

この手法では、簡単に言えばiOS 7.1.2のSHSHを使用して他のiOSを起動します。したがって、iOS 7.1.2のSHSHが必要です。

iOS 7.1.2はiPhone 4の最終バージョンなので、今でもSHSHは取得できます。

以下のコマンドで取得してください。

./idevicerestore -t iPhone3,1_7.1.2_11D257_Restore.ipsw

 

続いて、SHSHの名前を変更します。(このSHSHの名前は7.1.2となっていますが、ダウングレード対象はiOS 6.1.2のため。)

mv -v shsh/{ecid}-iPhone3,1-7.1.2.shsh shsh/{ecid}-iPhone3,1-6.1.2.shsh

*ecidはデバイスごとに違うので確認してください。

 

最後に、

./idevicerestore -e -w iPhone3,1_6.1.2_10B146_Custom.ipsw

を実行することで復元され、iOS 6.1.2が起動できるようになります。

 

*Untethered Downgrade (紐なしダウングレード) [for iOS 4.3]

iPhone 4で、iOS 4.3.xにダウングレードしたい場合

まず、iOS 7.1.2と、ダウングレードしたい目的のiOSのipswをch3rryflowerの中にダウンロードしてください。(この説明ではiOS 4.3.5を使用します。)

Firmware - The iPhone Wiki

 

ダウンロードできたら、ターミナルでch3rryflowerに移動します。

 

1, ブートローダーの作成

続いて、以下のコマンドをターミナルで実行します。

mkdir tmp

cd tmp

unzip -j ../iPhone3,1_4.3.5_8L1_Restore.ipsw Firmware/all_flash/all_flash*/iBoot*

unzip -j ../iPhone3,1_4.3.5_8L1_Restore.ipsw Firmware/dfu/iBEC*

※"iPhone3,1_4.3.5_8L1_Restore.ipsw"は、ダウングレードしたい目的のiOSのipswにあたります。

tmpフォルダ内に、"iBoot.n90ap.RELEASE.img3"と"iBEC.n90ap.RELEASE.dfu"が生成されました。

次にiBootを復号化したいので、iOS 4.3.5のiBootのkeyを調べます。The iPhone Wikiに乗っているのでそれを使用してください。

Firmware Keys - The iPhone Wiki

 

調べると、iOS 4.3.5では以下の通りになっていると思います。

IV = 986032eecd861c37ca2a86b6496a3c0d

Key = b4e300c54a9dd2e648ead50794e9bf2205a489c310a1c70a9fae687368229468

iBootを復号化するために、以下のコマンドをターミナルで実行します。

../bin/xpwntool iBoot.n90ap.RELEASE.img3 iBoot.n90ap.RELEASE.dec -iv 986032eecd861c37ca2a86b6496a3c0d -k b4e300c54a9dd2e648ead50794e9bf2205a489c310a1c70a9fae687368229468

iBoot.n90ap.RELEASE.decが生成されました。

 

*次が重要です!

このiBootは目的のiOSにSHSHなしでダウングレードするために重要です。

iBoot32Patcherを使用してiBootにダウングレード用のパッチをする必要があります。

このパッチを変更することで、起動時にverbose bootで起動したりすることが可能です。いくつか例を挙げておきます。どれか一つを実行してください。

iOS 4.3.3以下とiOS 4.3.4以降では使用するフラグが異なるので気をつけてください。

*設定なし(基本) (iOS 4.3.4 ~ 4.3.5の場合)

../bin/iBoot32Patcher iBoot.n90ap.RELEASE.dec PwnediBoot --rsa --logo4 --boot-partition

 

*verbose boot

../bin/iBoot32Patcher iBoot.n90ap.RELEASE.dec PwnediBoot --rsa --logo4 --boot-partition -b "-v"

 

*verbose bootとcode signing enforcementの無効化

../bin/iBoot32Patcher iBoot.n90ap.RELEASE.dec PwnediBoot --rsa --logo4 --debug --boot-partition -b "-v cs_enforcement_disable=1 amfi_get_out_of_my_way=1"

 

*設定なし(基本) (iOS 4.3.3以下の場合)

../bin/iBoot32Patcher iBoot.n90ap.RELEASE.dec PwnediBoot --rsa --logo4 --boot-partition --433  

*iOS 4.3.3以前にダウングレードする場合は、"--433"が必要です。

 

PwnediBootというファイルが生成されていればOKです。

最後に、以下のコマンドを実行します。

../bin/xpwntool PwnediBoot iBoot -t iBEC.n90ap.RELEASE.dfu

mv -v iBoot ..

cd ..

rm -r tmp

 

ch3rryflower内に"iBoot"というファイルが生成されていればOKです。

 

2, CFWの作成

cherryを使用して、CFWを作成します。

./cherry [in] [out] -derebusantiquis [base-ipsw] <bootloader>

[in]は、ダウングレードしたい目的のiOS (今回はiOS4.3.5)のipsw

[out]は、作成したいCFWのファイル名

[base-ipsw]はiOS 7.1.2のipsw

<bootloader>は先ほど作成したiBootです。

 

つまり、今回の場合は以下のコマンドになります。

./cherry iPhone3,1_4.3.5_8L1_Restore.ipsw iPhone3,1_4.3.5_8L1_Custom.ipsw -derebusantiquis iPhone3,1_7.1.2_11D257_Restore.ipsw iBoot -memory

*Macの搭載メモリが8GB以下の場合は-memoryフラグは外してください。(約4GBのメモリを使用します。)

 

iOS 4の場合はCFWを修正する必要があります。

iPhone 4をDFU ModeでMacに接続し、以下のコマンドを実行してください。

./ios4fix <iOS 4 ipsw [custom]> -t <iOS 4 ipsw [orig]> <iOS 7.1.2 ipsw>

 

今回の場合は、

./ios4fix iPhone3,1_4.3.5_8L1_Custom.ipsw -t iPhone3,1_4.3.5_8L1_Restore.ipsw iPhone3,1_7.1.2_11D257_Restore.ipsw

 

"iPhone3,1_4.3.5_8L1_Custom.ipsw"がSHSHなしダウングレードで使用できるCFWです。

 

3, 復元

最初に、iPhone 4をDFU ModeでMacに接続しておいてください。

初回のみ、以下のコマンドからipwndfuをインストールする必要があります。

git clone https://github.com/axi0mX/ipwndfu

そして、以下のコマンドを実行し、デバイスをpwned DFU Modeにします。

cd ipwndfu

./ipwndfu -p

cd ..

 

*ここが重要です!

この手法では、簡単に言えばiOS 7.1.2のSHSHを使用して他のiOSを起動します。したがって、iOS 7.1.2のSHSHが必要です。

iOS 7.1.2はiPhone 4の最終バージョンなので、今でもSHSHは取得できます。

以下のコマンドで取得してください。

./idevicerestore -t iPhone3,1_7.1.2_11D257_Restore.ipsw

 

続いて、SHSHの名前を変更します。(このSHSHの名前は7.1.2となっていますが、ダウングレード対象はiOS 4.3.5のため。)

mv -v shsh/{ecid}-iPhone3,1-7.1.2.shsh shsh/{ecid}-iPhone3,1-4.3.5.shsh

*ecidはデバイスごとに違うので確認してください。

 

最後に、

./idevicerestore -e -w iPhone3,1_4.3.5_8L1_Custom.ipsw

を実行することで復元され、iOS 4.3.5が起動できるようになります。

Bootrom exploitを使用して起動を試みる

先日公開されたBootrom exploitですが、iPhone 8/Xまで使用できることからかなり有用性が高いですよね。その証拠に、JB界隈では早速このexploitを使用して脱獄が行われ始めています。

 

*現時点で分かっている事

A7-A11はNonceのセットが不要。(=shsh2をこれまで以上に保存しておいた方が良い。)

A5-A11で、全バージョンの紐付き脱獄(仮脱獄)が可能

ダウングレード(shshを使用した紐なし)はSEPがあるので、多分今まで通りSEP互換性が重要です...多分...。(Bootrom exploitを使用して起動する紐付きなら可能かも...?)

 

まずは作者のaxi0mX氏。qwertyoruiopz氏と協力して行なっているようですね。心強い。verbose bootで起動していること、ケーブルに繋がれていることから、Bootrom exploitを使用して起動している事がわかると思います。

理論上はredsn0wなどのように最新OSでも脱獄ができるはずなので、期待が高まりますね。

 

Linus Henze氏はCustom BootLogoを表示させたものをアップロードしたようです。Custom LogoはiBootの署名チェックを回避しないと表示させる事が出来ないため、これもBootrom exploitを使用している事がわかると思います。

 

 

私もやってみました。

tihmstar氏のiBoot64Patcherを使用してブートローダーにパッチをあて、Linus Henze氏のforkを使用してPhone 5sでiOS 12.4をverbose bootで起動してみました。

 

ちなみにですが、勘違いされている方もいるようなのでもう一度、

今回のBootrom exploit (checkm8)はTethered Bootrom exploitと呼ばれる、USBケーブルを使用したものとなっています。これはUSBから攻撃をかけるので必ずケーブルが必要です。つまり紐無しにはなりません。(limera1nのように再起動ごとにDFU Modeから攻撃する必要がある。)

これを紐なしにするには、24kpwnのような紐なしで動作するBootrom exploitか、iH8sn0w氏がかつて使用していた未公開のものや、xerub氏が去年公開した(既にiOS 8で塞がれてる)ようなケーブル無して動作するiBoot explotが必要です。

 

axi0mX氏がA5-A11までのデバイスで利用可能な新しいBottom Exploitをリリース!

axi0mX氏がやってくれました...。A5からA11まで動作するBootrom exploit、「checkm8」をリリースしました...!

Bootrom exploitとしては2010年リリースのA4デバイス向け「limera1n exploit」以来となりますね。

 

実際にiPhone 5で動かしてみたところ、pwned DFU modeにする事が出来ました。(Bootromなどのdumpもできました。)

bash-3.2$ ./ipwndfu -p

*** checkm8 exploit by axi0mX ***

Found: CPID:8950 CPRV:20 CPFM:03 SCEP:10 BDID:02 ECID:-- IBFL:00 SRTG:[iBoot-1145.3]

Device is now in pwned DFU Mode.

(2.49 seconds)

bash-3.2$ ./ipwndfu -p

*** checkm8 exploit by axi0mX ***

Found: CPID:8950 CPRV:20 CPFM:03 SCEP:10 BDID:02 ECID:-- IBFL:00 SRTG:[iBoot-1145.3] PWND:[checkm8]

Device is already in pwned DFU Mode. Not executing exploit.

bash-3.2$ 

 

 

iloader

included device-version

iPad3,1-11D257 (by @xerub)

iPad3,3-11D257 (by @xerub)

iPhone3,1-11D257 (by @xerub)

iPhone4,1-11D257 (by @xerub)

iPhone5,2-11B554a (by @xerub)

iPhone5,2-11D257 (by @dora2_yururi)

iPhone5,3-11D201 (by @dora2_yururi)

iPod5,1-11D257 (by @dora2_yururi)

 

thanks @xerub & @b1n4r1b01 !!

LINK

activation_recordからsimロックを確認

activation_record.plistからSIMロックを調べる

1) Terminalを使用してAccountTokenを抽出

UserName$ /usr/libexec/PlistBuddy activation_record.plist

 

Command: Print AccountToken

{

"InternationalMobileEquipmentIdentity" = "0123456789ABCDE";

"CertificateURL" = "https://albert.apple.com/deviceservices/certifyMe";

"ActivationTicket" = "[val]\n";

"PhoneNumberNotificationURL" = "https://albert.apple.com/deviceservices/phoneHome";

"SerialNumber" = "XXXXXXXXXXXX";

"InternationalMobileSubscriberIdentity" = "44010xxxxxxxxxx";

"MobileEquipmentIdentifier" = "0123456789ABCD";

"ProductType" = "iPhone6,1";

"UniqueDeviceID" = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

"ActivationRandomness" = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";

"ActivityURL" = "https://albert.apple.com/deviceservices/activity";

"IntegratedCircuitCardIdentity" = "89014104278656914506";

}

Command: exit

 

必要なのはActivationTicketの値です。base64でエンコードされているのでデコードします。

UserName$ echo "[val]" > AccountToken_base64

UserName$ base64 --decode < AccountToken_base64 > AccountToken

 

2) Hex Editorで確認

AccountTokenをHex Editorで開き、IMEIの上から7桁(上の場合は"0123456789ABCD")を検索(Hex Search)

IMEIの始点offset + 0x10の地点(周辺)から0x8 byteのHex値がSIMロックのデータ(IMSI Mask)

 

EE EE EE EE EE EE EE EF ならSIMロックフリー

44 01 0E EE EE EE EE EF ならDocomoでSIMロック

*SIMロックがかかっている場合はIMSIのキャリアごとの固定値が指定されています。

 


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