diosra2’s blog

iOSのJailbreak、ダウングレード

SHSHなしでiOSダウングレードを行うツール 2020年版

SHSHなしでiOSのダウングレードを行うツール(簡易)

使えるツールをただ列挙していきます。ただし古いので最新環境で動かなかったりするかもしれません。OS Xの10.10とmacOS 10.13があればだいたい使えます。windowsは7推奨です。10では動かない可能性があります。

ここに列挙するのは3GS以降の32-bitデバイス用のみです。古いです。もう一度言います、32-bitデバイスのみです。

最近のお高いデバイスでは出来ません。

 

紐なしダウングレードを行うツール

電源ポチで起動できるいわゆる普通に使えるやつです。

これはデバイスに対しローレベルな段階で脆弱性を突いてexploitを適用させるので、当然デバイスは通常よりも脆弱になります。しかし、32-bitデバイスは上位互換の脆弱性が存在するので細かいことは大丈夫です。内からでも外からでも、掛かってる鍵を誰もが解除できるような家に住んでるようなものです。

条件があるやつは赤字です。

 

iPhone 3GS

sn0wbreeze (winのみ)

version: 3.1.3 ~ 6.1.6

ベースバンドアップデート保持モードなら脱獄されない。(winのみ)

 

redsn0w (win/mac)

version: 4.3.3, 5.0 ~ 6.0

*CFW作成機能は4.3.3-5.1.1のみ。

 

pwnagetool (macのみ)

version: 3.1 ~ 5.1.1

*脱獄されます。

 

New Bootrom: ipwndfu (macのみ)

 

3GSにはBootromが2つあります。古いやつはipwndfuは不要ですが、新しいやつは追加でipwndfuでalloc8を適用しないとダメです。

iPhoneOS 3.0にしたい人は作ったのでこれを使ってください。(古いROM限定です。)

 

iPhone 4

ch3rryflower [UNTETHERED]

version: 4.3, 4.3.3, 4.3.5 ~ 7.1.2

作りました。mac/linuxで動きます。

よく読んでから使ってください。

 

iPhone 4以外のA4

なし

 

iPhone 5/5c

ch3rryflower [UNTETHERED]

version: 6.0 - 9.3.5 (理論) *使用可能なデバイスに条件あり

作りました。macで動きます。

実際の対応バージョンはREADMEに書いてあります。よく読んでから使ってください。

iOS 7.x (iPhone 5), iOS 7.1.x (iPhone 5c)のSHSHが必要です。

 

iPhone 5/5c以外のA5/A6

なし

 

紐つきダウングレードを行うツール

電源ポチで起動しない、再起動ごとにパソコンを使用しなければ起動すら出来ない、常用しようとしているならやめましょう。それはゴミです。家で使う分、開発用(にしては古すぎるが...)には良いでしょう。

 

iPhone 3GS, iPhone 4

紐付きが完全上位互換なので不要です。macやlinux環境がない場合はこちらを。

iSuns9/Sund0wn

 

A5デバイス

checkm8の対応がまだなのでありません。

 

A6デバイス

synackuk/n1ghtshade

n1ghtshadeはiOS 6や7にSHSHなしでダウングレードしたり脱獄できます。macのみです。

 

また、私の産物も利用できます。こちらはiOS 8や9を利用したい場合にどうぞ。

iPhone 5/5cのみ: ch3rryflower [TETHERED]

 

こちらもmacのみです。

(基本的に、この手のものを使いたい場合はmacがあった方が良いです。)

Improved iOS 10 kernel patch for 32-bit devices

kernel_version

Darwin Kernel Version 16.3.0: Thu Dec 15 22:41:46 PST 2016; root:xnu-3789.42.2~1/RELEASE_ARM_S5L8950X

 

_mac_mount patch

Improvement: Fixed rootfs cannot be mounted read-only after patched by CBPatcher.

*before_patch (by CBPatcher)

...

80104fee         mov        r2, r1

80104ff0         ldrb.w     r0, [r0, #0x39]

80104ff4         tst.w      r0, #0x40

80104ff8         beq        loc_8010500e

80104ffa         tst.w      fp, #0x1

80104ffe         bne        loc_8010500a         -> b    loc_8010500a

...

8010500a         orr        fp, fp, #0x10000

...

 

*after_patch (using h3lix ..?)

...

80104fee         mov        r2, r1

80104ff0         ldrb.w     r0, [r0, #0x39]      -> //nop

80104ff2                                         -> //nop

80104ff4         tst.w      r0, #0x40            -> //nop

80104ff6                                         -> //nop

80104ff8         beq        loc_8010500e         -> b    loc_8010500e

...

8010500e         add.w      r3, r6, #0x128

...

 

_mapForIO lock patch

Patch based on FrideAppleTeam slides

PE_i_can_has_kernel_configuration

*original

int _PE_i_can_has_kernel_configuration() {

    ...

}

*patched

int _PE_i_can_has_kernel_configuration() {

    return 1;

}

 

isWriteProtected

*original

...

80cd1df4         bne        loc_80cd1e06

 

80cd1df6         ldr.w      r0, [fp, #0x104]

80cd1dfa         ldrb.w     r0, [r0, #0x20]

80cd1dfe         cbz        r0, loc_80cd1e06

 

             loc_80cd1e00:

80cd1e00         ldr        r0, [sp, #0x44 + var_28]

...

*patched

...

80cd1df4         bne        loc_80cd1e06

 

80cd1df6         nop

80cd1df8         nop

80cd1dfa         nop

80cd1dfc         movs       r0, #0x0

80cd1dfe         cbz        r0, loc_80cd1e06

 

             loc_80cd1e00:

80cd1e00         ldr        r0, [sp, #0x44 + var_28]

...

 

Psedo-Code (by Hopper Disassembler v4)

*original

f:id:diosra2:20191226021155p:plain

*patched

f:id:diosra2:20191226021214p:plain

 

iPhone 5をiOS 9.0にSHSHなしでダウングレードする手順(紐付き)

実際にこれを使った時の参考例です。iOS 9.0へ復元して起動します。

 

*緑が実際に入力するコマンドです (赤はログ)

 

ch3rryflower内のTETHERED_for_i5へ移動

bash-3.2$ cd ~/Desktop/ch3rryflower_v1.3b3/macos/TETHERED_for_i5

 

iPhone5,2_9.0_13A344_Restore.ipsw (iOS 9.0のFW)をフォルダ内に設置、以下のコマンド実行

bash-3.2$ ./cherry iPhone5,2_9.0_13A344_Restore.ipsw custom.ipsw -bbupdate -memory -tethered

 

 

復元過程

fake SHSH(偽のSHSH)を取得

bash-3.2$ ./fakeshsh.sh

 

デバイスをDFU Modeで接続

bash-3.2$ ./idevicerestore -t iPhone5,2_fake.ipsw

... 

Received SHSH blobs

SHSH saved to 'shsh/FFFFFFFFFFFF-iPhone5,2-10.3.4.shsh'

bash-3.2$ mv -v shsh/FFFFFFFFFFFF-iPhone5,2-10.3.4.shsh shsh/FFFFFFFFFFFF-iPhone5,2-9.0-13A344.shsh

shsh/FFFFFFFFFFFF-iPhone5,2-10.3.4.shsh -> shsh/FFFFFFFFFFFF-iPhone5,2-9.0-13A344.shsh

 

ここから、CFWで復元する工程です。

pwnediBSSを抽出

bash-3.2$ unzip -j custom.ipsw Firmware/dfu/iBSS*

Archive:  custom.ipsw

  inflating: iBSS.n42.RELEASE.dfu    

bash-3.2$ bin/xpwntool iBSS.n42.RELEASE.dfu softdfu

bash-3.2$ rm iBSS.n42.RELEASE.dfu

 

デバイスをDFU Modeで接続

bash-3.2$ ./checkm8 -p

*** based on checkm8 exploit by axi0mX

**  pwned dfu based on belladonna by synackuk

**  improved by dora2_yururi

Grooming heap

preparing for overwrite

overwriting task struct

uploading payload

executing payload

device is now in pwned DFU mode

bash-3.2$ ./checkm8 -f softdfu

uploading soft DFU

executing soft DFU 

 

idevicererestoreで復元

bash-3.2$ ./idevicererestore -r custom.ipsw

 

起動準備 - Bootloaderの準備(1度だけ行えばよい)

起動するiOSのBuildナンバーでフォルダを作って、そこに格納しておくと便利です。

bash-3.2$ mkdir 13A344

 

iOS 9.0のFWからbootloaderを取り出す

bash-3.2$ unzip -j iPhone5,2_9.0_13A344_Restore.ipsw 058-03706-363.dmg -d 13A344

bash-3.2$ unzip -j iPhone5,2_9.0_13A344_Restore.ipsw Firmware/all_flash/all_flash.n42ap.production/DeviceTree.n42ap.img3 -d 13A344

bash-3.2$ unzip -j iPhone5,2_9.0_13A344_Restore.ipsw Firmware/dfu/iBEC.n42.RELEASE.dfu -d 13A344

bash-3.2$ unzip -j iPhone5,2_9.0_13A344_Restore.ipsw Firmware/dfu/iBSS.n42.RELEASE.dfu -d 13A344

bash-3.2$ unzip -j iPhone5,2_9.0_13A344_Restore.ipsw kernelcache.release.n42 -d 13A344

 

iBSS/iBECのdecrypt

FW Keyはこちら: Monarch 13A344 (iPhone5,2) - The iPhone Wiki

bash-3.2$ bin/xpwntool 13A344/iBSS.n42.RELEASE.dfu 13A344/iBSS.n42.RELEASE.dec -iv f47771607eb9761ee4d62bfde4853afd -k a28a482dedea0079f79b19c0b77b8eca2f64371fed61bdd726dc6c5af6560758

bash-3.2$ bin/xpwntool 13A344/iBEC.n42.RELEASE.dfu 13A344/iBEC.n42.RELEASE.dec -iv 437404a5b4165e635187a4e4b73a148b -k 85cb205cd551442e629ffb267708c5eafe5642c845d46becf7dc5ef5f6244ca4

 

iBSSにrsaパッチ

bash-3.2$ bin/iBoot32Patcher 13A344/iBSS.n42.RELEASE.dec 13A344/pwnediBSS --rsa

main: Starting...

main: iBoot-2817 inputted.

patch_rsa_check: Entering...

find_bl_verify_shsh_generic: Entering...

find_bl_verify_shsh_generic: Found LDR instruction at 0x634e

find_bl_verify_shsh_generic: Found BL verify_shsh at 0x667a

find_bl_verify_shsh_generic: Leaving...

patch_rsa_check: Patching BL verify_shsh at 0x667a...

patch_rsa_check: Leaving...

main: Writing out patched file to 13A344/pwnediBSS...

main: Quitting...

 

iBECにrsa, boot-argsをパッチ

(-b引数のあとに"-v"を渡すことでverbose bootで起動します。(boot-args))

bash-3.2$ bin/iBoot32Patcher 13A344/iBEC.n42.RELEASE.dec 13A344/pwnediBEC.dec --rsa -b "-v"

main: Starting...

main: iBoot-2817 inputted.

patch_boot_args: Entering...

patch_boot_args: Default boot-args string is at 0x3e1ac

patch_boot_args: boot-args xref is at 0x1a43c

patch_boot_args: Applying custom boot-args "-v"

patch_boot_args: Found LDR R1, =boot_args at 0x1a1ca

patch_boot_args: Found CMP R0, #0 at 0x1a1e8

patch_boot_args: Found IT EQ/IT NE at 0x1a1ea

patch_boot_args: Found MOV R6, R1 at 0x1a1ec

patch_boot_args: Found LDR R6, =null_str at 0x1a1e6

patch_boot_args: Pointing LDR R6, =null_str to boot-args xref...

patch_boot_args: Leaving...

patch_rsa_check: Entering...

find_bl_verify_shsh_generic: Entering...

find_bl_verify_shsh_generic: Found LDR instruction at 0x17fc2

find_bl_verify_shsh_generic: Found BL verify_shsh at 0x186f4

find_bl_verify_shsh_generic: Leaving...

patch_rsa_check: Patching BL verify_shsh at 0x186f4...

patch_rsa_check: Leaving...

main: Writing out patched file to 13A344/pwnediBEC.dec...

main: Quitting...

 

iBECのみimg3ファイルに戻す

bash-3.2$ bin/xpwntool 13A344/pwnediBEC.dec 13A344/pwnediBEC -t 13A344/iBEC.n42.RELEASE.dfu

 

不要なファイル削除

bash-3.2$ rm 13A344/iBEC.n42.RELEASE.dec

bash-3.2$ rm 13A344/iBSS.n42.RELEASE.dec

bash-3.2$ rm 13A344/pwnediBEC.dec

 

準備は終わりです。

 

起動 (Tethered)

デバイスをDFU Modeで接続

bash-3.2$ ./checkm8 -p

*** based on checkm8 exploit by axi0mX

**  pwned dfu based on belladonna by synackuk

**  improved by dora2_yururi

Grooming heap

preparing for overwrite

overwriting task struct

uploading payload

executing payload

device is now in pwned DFU mode

 

pwnediBSSを送信

bash-3.2$ ./checkm8 -f 13A344/pwnediBSS

uploading soft DFU

executing soft DFU

 

pwnediBECを送信

bash-3.2$ ./irecovery -f 13A344/pwnediBEC

[==================================================] 100.0%

 

数秒待ってください。

 

./irecovery -qでデバイスがRecovery modeになっているかを確認します。

MODEがRecoveryで、デバイスが真っ黒の状態ならOKです。

bash-3.2$ ./irecovery -q

CPID: 8950

CPRV: 20

BDID: 02

ECID: FFFFFFFFFFFF

CPFM: 03

SCEP: 10

IBFL: 1a

SRNM: FFFFFFFFFFFF

IMEI: N/A

NONC: da2ca29a17a18a87334c37b91318acd27f567d0d

SNON: N/A

MODE: Recovery

 

最後にリカバリーモードから起動(Just Boot)します。

bash-3.2$ ./irecovery -f 13A344/DeviceTree.n42ap.img3

[==================================================] 100.0%

bash-3.2$ ./irecovery -c devicetree

bash-3.2$ ./irecovery -f 13A344/058-03706-363.dmg

[==================================================] 100.0%

bash-3.2$ ./irecovery -c ramdisk

bash-3.2$ ./irecovery -f 13A344/kernelcache.release.n42

[==================================================] 100.0%

bash-3.2$ ./irecovery -c bootx

 

verbose modeで起動したら成功です。この作業は再起動するたびに必要です。

iPhone 5をSHSH不要でTethered Downgrade(紐付きダウングレード)する方法

Release ch3rryflower v1.3 ~ b3 · dora2-iOS/xpwn · GitHub

 

対応環境

macOS 10.13以降

iPhone 5 (Global) *SHSHは不要

 

使い方

*この手法は従来のTethered Downgradeの手法をそのまま適用したものです。

 

1, CFWの作成

./cherry <orininal-ipsw> custom.ipsw -bbupdate -memory -tethered

 

2, fake SHSHの取得

./fakeshsh.sh

デバイスをDFU modeに。idevicerestoreを使用してfake SHSH を取得

./idevicerestore -t iPhone5,2_fake.ipsw

 

3, 復元

3-1, デバイスをpwned DFU modeに

*pwnediBSSの抽出

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

bin/xpwntool iBSS* softdfu

rm iBSS*

 

*デバイスをpwned DFU modeに

./checkm8 -p

 

以下のようになれば成功

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

*** based on checkm8 exploit by axi0mX

** pwned dfu based on belladonna by synackuk

** improved by dora2_yururi

Grooming heap

preparing for overwrite

overwriting task struct

uploading payload

executing payload

device is now in pwned DFU mode

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

 

*デバイスをiBSS(soft)DFU modeに昇格

./checkm8 -f softdfu

 

3-2, 復元作業

*以下のコマンド実行前にshshディレクトリ内のfake SHSHの名前を以下のように変更

shsh/[ECID]-iPhone5,2-[ios-version]-[build].shsh

例) mv -v shsh/123456789-iPhone5,2-8.4.1.shsh shsh/123456789-iPhone5,2-9.0-13A344.shsh

 

./idevicererestore -r custom.ipsw

 

復元成功するとリカバリーモードに。

 

4, justboot

4-1, 準備

ipsw(original)からiBSS, iBEC, DeviceTree, RestoreRamdisk, KernelCacheを抽出

 

The iPhone WikiからFW keyを取得、iBSS, iBECを以下のようにdecryptし、パッチする。この作業は一度行えば2回目以降に同OSをブートする際は省略可能。

The iPhone Wiki: https://www.theiphonewiki.com/wiki/Firmware_Keys

 

*iBSS

bin/xpwntool iBSS_original iBSS_decrypt -iv [iv] -k [key]

bin/iBoot32patcher iBSS_decrypt pwnediBSS --rsa

-> "pwnediBSS"が対象ファイル。

 

*iBEC

bin/xpwntool iBEC_original iBEC_decrypt -iv [iv] -k [key]

bin/iBoot32patcher iBEC_decrypt iBEC_pwned --rsa -b "-v"

bin/xpwntool iBEC_pwned pwnediBEC -t iBEC_original

-> "pwnediBEC"が対象ファイル。

pwnediBSS/pwnediBEC/DeviceTree/RestoreRamdisk/KernelCacheを保存しておくことで、次回以降4-2から作業可能。

 

4-2, boot

tetheredなので、この作業は毎度必要です。

**以下、[]内は4-1で準備したファイルを表す。

*デバイスをpwned DFU modeに

./checkm8 -p

 

以下のようになれば成功

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

*** based on checkm8 exploit by axi0mX

** pwned dfu based on belladonna by synackuk

** improved by dora2_yururi

Grooming heap

preparing for overwrite

overwriting task struct

uploading payload

executing payload

device is now in pwned DFU mode

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

*デバイスをiBSS(soft)DFU modeに

./checkm8 -f [pwnediBSS]

 

*デバイスをiBEC (recovery) modeに

./irecovery -f [pwnediBEC]

 

(5秒程度待ってからBootの手順へ。)

 

*Boot

./irecovery -f [DeviceTree]

./irecovery -c devicetree

./irecovery -f [RestoreRamdisk]

./irecovery -c ramdisk

./irecovery -f [KernelCache]

./irecovery -c bootx

 

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

を実行してください。


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