diosra2’s blog

iOSのJailbreak、ダウングレード

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

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$ 

 

 


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