diosra2’s blog

iOSのJailbreak、ダウングレード

ch3rryflower v1.3の使い方

ch3rryflowerとは?

iOS 7のSHSHがあるiPhone 4やiPhone 5向けの、iBoot exploitを使用した(理論上)全バージョンへのダウングレードを行うためのツールです。

 

ここでは、v1.3で導入したiPhone 5向けの使用方法を説明します。

 

基本情報

名称: ch3rryflower

バージョン: v1.3 b2

サポートしているデバイス(無条件): iPhone 4

サポートしているデバイス(条件付): iPhone 5 (ただし、iOS 7.xのSHSHを有するものに限る)

 

ダウングレード可能なバージョン(iPhone 4)

iOS 4.3.3, 4.3.5, 6.1.2, 6.1.3, 7.0, 7.0.2, 7.0.3, 7.0.4, 7.0.6, 7.1, 7.1.1, 7.1.2

 

ダウングレード可能なバージョン(iPhone 5)

iOS 6.1.2, 6.1.3, 7.0, 7.0.2, 7.0.3, 7.0.4, 7.0.6, 7.1, 7.1.1, 7.1.2

 

使用方法 (iPhone 5)

ここでは、iOS 7.1.2のSHSHをもつiPhone 5を6.1.2にダウングレードします。

 

先にiOS 7のSHSHをダンプしておきましょう(すでに持っている人はこの作業は不要)

A6デバイスのSHSHを脱獄なしでDumpする - diosra2’s blog

 

 

以下のリンクからch3rryflower v1.3を取得してください。

Releases · dora2-iOS/xpwn · GitHub

 

また、iOS 6.1.2と7.1.2のipswをダウンロードしておいてください。

ipswはch3rryflower内に入れておいてください。

 

まず、iOS 6.1.2のiBootのkeyを調べます。

Brighton 10B146 (iPhone5,2) - The iPhone Wiki

 

ターミナルでch3rryflowerのディレクトリに移動し、以下のコマンドを入力してください。

./make_iBoot.sh ipsw -iv [IV] -k [KEY]

 

今回の場合は以下のようになります。

./make_iBoot.sh ipsw -iv 2d9b731bede6196f54d01cb821a4aa70 -k 77b211f89344b83d330586690c972142d420cfd6f9b562b7bd7c087a5ab8e79c

 

(上級者向け)

make_iBoot.shのline 22にある"../bin/iBoot32Patcher ..."の記述を書き換えることで、iBootへのパッチをカスタマイズすることが可能です(boot-argsを書き換えてシリアル経由でブートログの取得など...)。ただし、"--boot-partition"と"--boot-ramdisk"は必須です。

 

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

./cherry iPhone5,2_6.1.2_10B146_Restore.ipsw custom.ipsw -bbupdate -memory -derebusantiquis iPhone5,2_7.1.2_11D257_Restore.ipsw iBoot

 

iPhone 5の場合、-bbupdateは必須です。(逆に、iPhone 4の場合はつけないでください。)

-derebusantiquisフラグの次に指定するipswはそのiPhone 5が保有するSHSHのバージョンと一致するものを使用してください。(重要)

 

custom.ipswというCFWが作成されましたね。そうしたら、ipwndfuをcloneします。

synackuk氏のforkを使用してください。

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

cd ipwndfu

 

iPhone 5をDFU Modeにして、デバイスをpwnedDFUにします。

./ipwndfu -p

 

pwnedDFUになったらiBSSを送信します。

unzip -j ../custom.ipsw Firmware/dfu/iBSS*

../bin/xpwntool iBSS* softdfu

./ipwndfu -l softdfu

cd ..

 

最後に、idevicererestoreで復元をします。

この際、shsh/ ディレクトリにiOS 7のSHSHを配置しますが、

{ecid}-{device}-{ios_var}-{build}.shsh

という形になるようにします。

例: iOS 6.1.2の場合

{ecid}-iPhone5,2-6.1.2-10B146.shsh

*この際に使用するのはiOS 7のSHSHです。 先ほどcherryで使用したFWと同じバージョンのものを使用してください。

 

ここまできたら復元するのみです。

./idevicererestore -r custom.ipsw

これでおしまいです。

 

exploitを解除する

脱獄して、

nvram -d boot-partition

nvram -d boot-ramdisk

を実行してください。

A6デバイスのSHSHを脱獄なしでDumpする

用意するもの

Mac

GitHub - synackuk/ipwndfu

Odysseus

現在実機に搭載されているiOSバージョンのFW(ipsw)

iOS 7.1.2のFW(ipsw)

 

 

1, pwnedDFU

./ipwndfu -p

 

2, send iBSS

OdysseusでiOS 7.1.2のCFWを作成してください。

./ipsw 11D257.ipsw custom.ipsw -memory -bbupdate

 

iBSSを取り出します。

./xpwntool `unzip -j custom.ipsw 'Firmware/dfu/iBSS*' | awk '/inflating/{print $2}'` pwnediBSS

 

ipwdfuでiBSSを送信します。

./ipwndfu -l pwnediBSS

 

あとは今までと同じです。

 

3, iBECを送信

./irecovery -f pwnediBEC

 

数秒後、リカバリーモードとなるのでリカバリーシェルを開きます。

./irecovery -s

 

リカバリーシェルを開いたら、payloadを転送してblobをデバイスのメモリ内にdumpさせます。

 

/send payload

go blob

/exit

 

リカバリーシェルから出たら、実際にパソコン側にblobをdumpします。

 

./irecovery -g blobs.dump

./irecovery -a

 

blobs.dumpが目的のダンプです。 最後に、blobを実際にSHSHとして使える形にします。実際のiOSデバイスに入っているipswを用意してください。

 

./ticket blobs.dump blobs.plist [実機のFWバージョンのIPSW] -z

 

validateでエラーが出なければOKです。

./validate blobs.plist [実機のFWバージョンのIPSW] -z

checkra1nでローカルホストにSSH接続

昨日、checkra1nがリリースされましたね。

checkra1nはcheckm8と呼ばれるBootrom exploitを使用するため、紐付きではありますがA11デバイスまでを永久に脱獄することが可能となります。

 

そんなcheckra1nですが、localhost経由でSSH接続が可能ですので記しておきます。

libmuxdが必要です。インストールされていなければインストールしておきましょう。

 

1, checkra1nで脱獄する

まずはcheckra1nで脱獄します。

 

2, macに接続し、mac側でterminalを起動

*USB接続が必要です。

 

3, terminalで次のコマンドを実行

iproxy 2222 22

 

4, 別ウィンドでterminalを開き、次のコマンドを実行してSSH接続

ssh root@localhost -p 2222

 

rootのパスワード(初期はalpine)を入力すればSSH接続されます。

 

iPhone 5などの32-bitデバイスでiOSを維持してGPSを修正する。

2019年11月3日以降、GPSタイムロールオーバー問題により一部のデバイスでGPSを使用したサービスの一部が利用できなくなることが判明しましたね。

 

iPhone 5の場合、iOS 10.3.4にすることで解決しますが、実際のところはbasebandのアップデートのみでこの問題は解決可能です。

appleがiOSバージョンで制限をかけなかれば、以下の手法を使用して旧バージョンを使用しつつGPSタイムロールオーバー問題を回避できるはずです。

 

注意: 全て自己責任で。

 

1) デバイスから現在のデバイスのiOSのSHSHをDumpする

SHSHは、簡単に言えばiOSの起動時の検証に使われている署名です。

これはデバイス・バージョンごとに異なるので、旧バージョンを維持するには必須です。

*脱獄が嫌な人向け: もう少し我慢すればcheckm8により、脱獄なしでSHSHのDumpが可能になります。

 

2) futurerestoreでiOSを復元

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

 

これでバージョンを保ったまま最新ベースバンドに復元できます。

多分大丈夫だとは思いますが...実際に修正できているかどうかは2019年11月3日以降に確認します...。

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が起動できるようになります。


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