iOS Dualboot 手動修改

iOS Dualboot 手動修改_第1张图片

一 需要工具

系統環境需求: Unix系統 (如Linux、Mac)

PC端工具:

xpwntool:

https://github.com/xerub/xpwn

https://github.com/sektioneins/xpwntool-lite

已編譯 Mac OS X

https://github.com/kalifans/Darwin/raw/IOS/XPwn-0.5.8-Darwin.zip

已編譯 Linux

https://github.com/Mint-Fans/linux-package/raw/IOS/XPwn-0.5.8-Linux.tar.bz2

HEX Editor: 如 HxD 之類

disassembler: 如 IDA Pro 之類

SSH client

iOS端工具

Cydia 添加源http://nyansatan.github.io/apt/

安裝以下套件

dualbootstuff (包含 gptfdisk,hfs_resize,kloader)

或者使用ssh連接iOS以命令安裝

echo "deb http://nyansatan.github.io/apt/ ./" >> /etc/apt/sources.list.d/cydia.listapt-get updateapt-get install com.nyansatan.dualbootstuff diskdev-cmds

二 Patching bootchain

1. iBSS Patch

解密 iBSS

xpwntool 輸入 輸出 -iv -k

IDA Pro 載入

查看 ROM:00000044                LDR            R1, =0x34000000

0x34000000 為載入基址

Edit > Segments > Rebase program...設定基址為 0x34000000

搜尋字串 iBSS ready, asking for DFU...

來到這裡

ROM:340008F2                LDR            R0, =aIbssReadyAskin ; "iBSS ready, asking for DFU...\n"ROM:340008F4                BL              sub_3400C850ROM:340008F8                BL              sub_34007A18ROM:340008FC                MOVW            R10, #0ROM:34000900                ADD.W          R11, SP, #0x14ROM:34000904                MOV.W          R8, #1ROM:34000908                MOVT.W          R10, #0x8FE0 ; 改為 #0x7FD0ROM:3400090CROM:3400090C loc_3400090CROM:3400090C                MOVS            R0, #1ROM:3400090E                BL              sub_340098B4ROM:34000912                MOV.W          R0, #0x200000ROM:34000916                MOV.W          R1, #0x200000ROM:3400091A                STR            R0, [SP,#0x14]ROM:3400091C                MOV            R0, R10ROM:3400091E                STR.W          R10, [SP,#0x18]ROM:34000922                BL              sub_3400B12C ; 改為NOPROM:34000926                MOV            R6, R0ROM:34000928                CMP            R6, #0ROM:3400092A                BLT            loc_3400090C ; 改為NOP

iPhone 4S 改為 #0xBFD0

0x908  ?B F? D0 ??

其他改為 #0x7FD0

0x908  ?7 F? D0 ??

iOS 8 則搜尋 HEX 00 00 E0 8F (0x8FE00000) 改為 與 multi_kloader 批配的 iBEC Remap addresses 0x7FD00000

搜尋字串 Apple Mobile Device (DFU Mode)

x 選擇第一項目

來到這裡

ROM:3400A638 sub_3400A638ROM:3400A638                PUSH            {R4,R7,LR}ROM:3400A63A                LDR            R4, =0x34012D34ROM:3400A63C                MOVS            R0, #0ROM:3400A63E                ADD            R7, SP, #4ROM:3400A640                LDRB            R1, [R4]ROM:3400A642                CMP            R1, #0ROM:3400A644                IT NEROM:3400A646                POPNE          {R4,R7,PC}ROM:3400A648                LDR            R0, =aAppleMobileDev ; "Apple Mobile Device (DFU Mode)"ROM:3400A64A                BL              sub_3400A6B8sub_3400A638 x 返回ROM:3400B12C sub_3400B12CROM:3400B12C                PUSH            {R4-R7,LR}ROM:3400B12E                LDR            R5, =0x34012EF0ROM:3400B130                ADD            R7, SP, #0xCROM:3400B132                STRD.W          R0, R1, [R5]ROM:3400B136                BL              sub_3400A638 ; 返回到此sub_3400B12C x 返回ROM:340008F2                LDR            R0, =aIbssReadyAskin ; "iBSS ready, asking for DFU...\n"ROM:340008F4                BL              sub_3400C850ROM:340008F8                BL              sub_34007A18ROM:340008FC                MOVW            R10, #0ROM:34000900                ADD.W          R11, SP, #0x14ROM:34000904                MOV.W          R8, #1ROM:34000908                MOVT.W          R10, #0x8FE0 ; 改為 #0xBFD0ROM:3400090CROM:3400090C loc_3400090CROM:3400090C                MOVS            R0, #1ROM:3400090E                BL              sub_340098B4ROM:34000912                MOV.W          R0, #0x200000ROM:34000916                MOV.W          R1, #0x200000ROM:3400091A                STR            R0, [SP,#0x14]ROM:3400091C                MOV            R0, R10ROM:3400091E                STR.W          R10, [SP,#0x18]ROM:34000922                BL              sub_3400B12C ; 返回到此 改為NOPROM:34000926                MOV            R6, R0ROM:34000928                CMP            R6, #0ROM:3400092A                BLT            loc_3400090C ; BLT loop 改為NOP0x922  00 BF 00 BF0x92A  00 BF

搜尋 TEXT "CMP            R1, #0x41 ; 'A'"

代碼開頭 x 返回

ROM:340065E8                IT NEROM:340065EA                ORRNE.W        R6, R6, #4ROM:340065EE                ADD            R3, SP, #0xC8+var_90ROM:340065F0                MOV            R1, R5ROM:340065F2                MOV            R2, R6ROM:340065F4                BL              sub_34006190 ; 來到這裡 改為 MOVS R0, #0  STR R0, [R3]ROM:340065F8                MOVS            R1, #0ROM:340065FA                CMP            R0, #0

0x65F4  00 20 18 60

然後往上看

ROM:3400657C                BL              sub_340060E4 ; 這裡進入ROM:34006580                MOV.W          R10, #0xFFFFFFFFROM:34006584                CMP            R0, #0ROM:34006586                BNE.W          loc_3400679EROM:3400658A                LDR            R0, [SP,#0xC8+var_84]ROM:3400658C                MOVS            R5, #0ROM:3400658E                CMP            R6, #0ROM:34006590                LDR            R0, [R0]ROM:34006592                LDR            R0, [R0,#0x10]ROM:34006594                STR            R0, [SP,#0xC8+var_9C]ROM:34006596                BEQ            loc_340065B0 x 2ROM:34006598ROM:34006598 loc_34006598ROM:34006598                MOV.W          R10, #0xFFFFFFFFROM:3400659C                CMP            R5, R6ROM:3400659E                BCS.W          loc_3400679EROM:340065A2                LDR.W          R0, [R8,R5,LSL#2]ROM:340065A6                ADDS            R5, #1ROM:340065A8                LDR            R1, [SP,#0xC8+var_9C]ROM:340065AA                CMP            R0, R1ROM:340065AC                BNE            loc_34006598ROM:340065AE                LDR            R5, [SP,#0xC8+var_9C]ROM:340065B0ROM:340065B0 loc_340065B0 x 2ROM:340065B0                LDR            R1, [R4,#0xC]ROM:340065B2                MOVW            R2, #0x6733ROM:340065B6                LDR            R0, [R4,#0x10]ROM:340065B8                MOVT.W          R2, #0x696DROM:340065BC                CMP            R1, R2ROM:340065BE                ITT EQROM:340065C0                MOVEQ          R6, #1ROM:340065C2                TSTEQ.W        R0, #0x200ROM:340065C6                BEQ            loc_340065CE ; x 1ROM:340065C8                AND.W          R0, R0, #4ROM:340065CC                LSRS            R6, R0, #2ROM:340065CEROM:340065CE loc_340065CE x 1ROM:340065CE                BL              sub_34006EB0ROM:340065D2                MOV            R1, R0ROM:340065D4                MOVS            R0, #0ROM:340065D6                STRB.W          R0, [SP,#0xC8+var_90]ROM:340065DA                LDR            R0, [SP,#0xC8+var_84]ROM:340065DC                CMP            R0, #0ROM:340065DE                BEQ.W          loc_3400682AROM:340065E2                CMP            R1, #0ROM:340065E4                LDR.W          R8, [R4,#0x10]ROM:340065E8                IT NEROM:340065EA                ORRNE.W        R6, R6, #4ROM:340065EE                ADD            R3, SP, #0xC8+var_90ROM:340065F0                MOV            R1, R5ROM:340065F2                MOV            R2, R6ROM:340065F4                BL              sub_34006190 ; 改為 MOVS R0, #0  STR R0, [R3]

來到這裡

ROM:340060E4 sub_340060E4ROM:340060E4                PUSH            {R4-R7,LR}ROM:340060E6                ADD            R7, SP, #0xCROM:340060E8                PUSH.W          {R8,R10}ROM:340060EC                MOV            R6, R2ROM:340060EE                MOV            R8, R0ROM:340060F0                MOV            R10, R3ROM:340060F2                MOV            R5, R1ROM:340060F4                MOVS            R0, #0x16ROM:340060F6                CMP            R6, #0x14ROM:340060F8                BCC            loc_34006188ROM:340060FA                LDR            R1, [R5]ROM:340060FC                MOVW            R2, #0x6733ROM:34006100                MOVS            R0, #0x16ROM:34006102                MOVT.W          R2, #0x496DROM:34006106                CMP            R1, R2ROM:34006108                BNE            loc_34006188ROM:3400610A                LDR            R1, [R5,#8]ROM:3400610C                SUB.W          R2, R6, #0x14ROM:34006110                MOVS            R0, #0x16ROM:34006112                CMP            R1, R2ROM:34006114                BHI            loc_34006188 ; 改為 NOPROM:34006116                LDR            R2, [R5,#0xC]ROM:34006118                MOVS            R0, #0x16ROM:3400611A                CMP            R2, R1ROM:3400611C                BHI            loc_34006188

0x6114  00 BF

修改完後不用加密

2. iBEC Patch

解密 iBEC

用法: xpwntool 輸入 輸出 -iv -k

IDA Pro 載入

查看 ROM:00000044                LDR            R1, =0x9FF00000

0x9FF00000 為載入基址

Edit > Segments > Rebase program...設定基址為 0x9FF00000

搜尋 TEXT "CMP            R1, #0x41 ; 'A'"

代碼開頭 x 返回

ROM:9FF1A3D0                MOV            R1, R5ROM:9FF1A3D2                MOV            R2, R6ROM:9FF1A3D4                BL              sub_9FF19CC0 ; 返回到此 改為 MOVS R0, #0  STR R0, [R3]0x1A3D4 00 20 18 60

然後往上看代碼

ROM:9FF1A35C                BL              sub_9FF19C14 ; 這裡進入ROM:9FF1A360                MOV.W          R10, #0xFFFFFFFFROM:9FF1A364                CMP            R0, #0ROM:9FF1A366                BNE.W          loc_9FF1A57EROM:9FF1A36A                LDR            R0, [SP,#0xC8+var_84]ROM:9FF1A36C                MOVS            R5, #0ROM:9FF1A36E                CMP            R6, #0ROM:9FF1A370                LDR            R0, [R0]ROM:9FF1A372                LDR            R0, [R0,#0x10]ROM:9FF1A374                STR            R0, [SP,#0xC8+var_9C]ROM:9FF1A376                BEQ            loc_9FF1A390 ; x 2ROM:9FF1A378ROM:9FF1A378 loc_9FF1A378ROM:9FF1A378                MOV.W          R10, #0xFFFFFFFFROM:9FF1A37C                CMP            R5, R6ROM:9FF1A37E                BCS.W          loc_9FF1A57EROM:9FF1A382                LDR.W          R0, [R8,R5,LSL#2]ROM:9FF1A386                ADDS            R5, #1ROM:9FF1A388                LDR            R1, [SP,#0xC8+var_9C]ROM:9FF1A38A                CMP            R0, R1ROM:9FF1A38C                BNE            loc_9FF1A378ROM:9FF1A38E                LDR            R5, [SP,#0xC8+var_9C]ROM:9FF1A390ROM:9FF1A390 loc_9FF1A390 x 2ROM:9FF1A390                LDR            R1, [R4,#0xC] ; x 2ROM:9FF1A392                MOVW            R2, #0x6733ROM:9FF1A396                LDR            R0, [R4,#0x10]ROM:9FF1A398                MOVT.W          R2, #0x696DROM:9FF1A39C                CMP            R1, R2ROM:9FF1A39E                ITT EQROM:9FF1A3A0                MOVEQ          R6, #1ROM:9FF1A3A2                TSTEQ.W        R0, #0x200ROM:9FF1A3A6                BEQ            loc_9FF1A3AE ; x 1ROM:9FF1A3A8                AND.W          R0, R0, #4ROM:9FF1A3AC                LSRS            R6, R0, #2ROM:9FF1A3AEROM:9FF1A3AE loc_9FF1A3AE  x 1ROM:9FF1A3AE                BL              sub_9FF1DF64ROM:9FF1A3B2                MOV            R1, R0ROM:9FF1A3B4                MOVS            R0, #0ROM:9FF1A3B6                STRB.W          R0, [SP,#0xC8+var_90]ROM:9FF1A3BA                LDR            R0, [SP,#0xC8+var_84]ROM:9FF1A3BC                CMP            R0, #0ROM:9FF1A3BE                BEQ.W          loc_9FF1A60AROM:9FF1A3C2                CMP            R1, #0ROM:9FF1A3C4                LDR.W          R8, [R4,#0x10]ROM:9FF1A3C8                IT NEROM:9FF1A3CA                ORRNE.W        R6, R6, #4ROM:9FF1A3CE                ADD            R3, SP, #0xC8+var_90ROM:9FF1A3D0                MOV            R1, R5ROM:9FF1A3D2                MOV            R2, R6ROM:9FF1A3D4                BL              sub_9FF19CC0 ; 改為 MOVS R0, #0  STR R0, [R3]

來到這裡

ROM:9FF19C14 sub_9FF19C14ROM:9FF19C14                PUSH            {R4-R7,LR}ROM:9FF19C16                ADD            R7, SP, #0xCROM:9FF19C18                PUSH.W          {R8,R10}ROM:9FF19C1C                MOV            R6, R2ROM:9FF19C1E                MOV            R8, R0ROM:9FF19C20                MOV            R10, R3ROM:9FF19C22                MOV            R5, R1ROM:9FF19C24                MOVS            R0, #0x16ROM:9FF19C26                CMP            R6, #0x14ROM:9FF19C28                BCC            loc_9FF19CB8ROM:9FF19C2A                LDR            R1, [R5]ROM:9FF19C2C                MOVW            R2, #0x6733ROM:9FF19C30                MOVS            R0, #0x16ROM:9FF19C32                MOVT.W          R2, #0x496DROM:9FF19C36                CMP            R1, R2ROM:9FF19C38                BNE            loc_9FF19CB8ROM:9FF19C3A                LDR            R1, [R5,#8]ROM:9FF19C3C                SUB.W          R2, R6, #0x14ROM:9FF19C40                MOVS            R0, #0x16ROM:9FF19C42                CMP            R1, R2ROM:9FF19C44                BHI            loc_9FF19CB8 ; 改為 NOPROM:9FF19C46                LDR            R2, [R5,#0xC]ROM:9FF19C48                MOVS            R0, #0x16ROM:9FF19C4A                CMP            R2, R1ROM:9FF19C4C                BHI            loc_9FF19CB8

0x19C44 00 BF

找尋字串 debug-enabled

x 選擇第一項目

來到這裡

ROM:9FF1AED0 loc_9FF1AED0ROM:9FF1AED0                LDR.W          R0, =aDebugEnabled ; "debug-enabled"ROM:9FF1AED4                ADD            R1, SP, #0xAC+var_3CROM:9FF1AED6                STR            R0, [SP,#0xAC+var_3C]ROM:9FF1AED8                ADD            R2, SP, #0xAC+var_40ROM:9FF1AEDA                LDR            R0, [SP,#0xAC+var_34]ROM:9FF1AEDC                ADD            R3, SP, #0xAC+var_38ROM:9FF1AEDE                BL              sub_9FF17B8CROM:9FF1AEE2                CMP            R0, #1ROM:9FF1AEE4                BNE            loc_9FF1AEF6ROM:9FF1AEE6                MOVS            R0, #0x20 ; ' 'ROM:9FF1AEE8                BL              sub_9FF20E40 ; 改為 MOVS R0, #1ROM:9FF1AEEC                CMP            R0, #1ROM:9FF1AEEE                ITTT EQROM:9FF1AEF0                LDREQ          R0, [SP,#0xAC+var_40]ROM:9FF1AEF2                MOVEQ          R1, #1ROM:9FF1AEF4                STREQ          R1, [R0]

0x1AEE8 01 20 01 20

找尋字串 upgrade 改為 fsboot

找尋字串 false 改為 true

找尋字串 Reliance on this certificate by any party assumes acceptance 位於 offset 0x42680

0x42680+0x9FF00000=0x9FF42680 Byte = 80 26 F4 9F

在 0x42680 寫入 rd=disk0s1s3 cs_enforcement_disable=1 -v amfi=0xff

搜尋 rd=md0 nand-enable-reformat=1 -progress offset 位於 offset 0x3B810

0x3B810+0x9FF00000=0x9FF3B810 Byte = 10 B8 F3 9F

搜尋指標指向 0x9FF3B810 的位址

找尋 Byte 10 B8 F3 9F

0x1C250 指標指向 0x9FF3B810

將 rd=md0 ... 指標替換為 rd=disk0s1s3 cs_enforcement_disable=1 -v amfi=0xff 的指標

offset 0x1C250 寫入 80 26 F4 9F (0x9FF42680)

修改完後添加img3檔頭

用法: xpwntool 輸入 輸出 -t <原始加密文件>

範例:

xpwntool iBEC.dec iBEC -t iBEC.n94ap.RELEASE.dfu

3. keybagd Patch

for iOS 6/7

安裝第二系統後

使用scp下載 root@device_ip:/mnt3/usr/libexec/keybagd 到電腦修改,改完後替換源文件並重新簽名。

搜尋 RegisterBackupBag

__const:0000A27C                DCD cfstr_Com_apple_keys ; "com.apple.keystore.device"__const:0000A280                DCD cfstr_Registerbackup ; "RegisterBackupBag"__const:0000A284                DCD sub_23B8+1          ; 這裡點進去

__text:000023B8                PUSH            {R4-R7,LR}__text:000023BA                ADD            R7, SP, #0xC          ; 改為 MOVS R0, #0  POP {R4-R7,PC}__text:000023BC                STR.W          R8, [SP,#0xC+var_10]!__text:000023C0                SUB            SP, SP, #0x34__text:000023C2                MOV            R5, R1__text:000023C4                MOV            R1, #(cfstr_Backupkeybagke - 0x23D2) ; "BackupKeyBagKeys"__text:000023CC                MOV            R8, R0__text:000023CE                ADD            R1, PC  ; "BackupKeyBagKeys"__text:000023D0                MOV            R0, R5__text:000023D2                BL              sub_1CA4__text:000023D6                MOVW            R1, #(:lower16:(cfstr_Passcode - 0x23E6)) ; "Passcode"__text:000023DA                MOV            R6, R0__text:000023DC                MOVT.W          R1, #(:upper16:(cfstr_Passcode - 0x23E6)) ; "Passcode"__text:000023E0                MOV            R0, R5__text:000023E2                ADD            R1, PC  ; "Passcode"

0x13BA  00 20 F0 BD

搜尋 EXPORT _AppleKeyStoreKeyBagChangeSecret

x 返回

來到這裡

__text:0000622A                BL              _AppleKeyStoreKeyBagGetSystem__text:0000622E                MOV            R1, R0__text:00006230                MOV.W          R0, #0xFFFFFFFF__text:00006234                CBNZ            R1, loc_6266 ; 改為 B__text:00006236                LDR            R0, [SP,#0x1C+var_14]__text:00006238                MOV            R1, R6__text:0000623A                MOV            R2, R5__text:0000623C                BL              _AppleKeyStoreKeyBagChangeSecret__text:00006240                MOV            R1, R0__text:00006242                MOV.W          R0, #0xFFFFFFFF__text:00006246                CBNZ            R1, loc_6266__text:00006248                LDR            R0, [SP,#0x1C+var_14]__text:0000624A                MOV            R2, #(aPrivateVar - 0x625A) ; "/private/var/"__text:00006252                MOV.W          R8, #1__text:00006256                ADD            R2, PC  ; "/private/var/"__text:00006258                MOVS            R1, #0__text:0000625A                MOV            R3, R4__text:0000625C                STR.W          R8, [SP,#0x1C+var_1C]__text:00006260                STR            R1, [SP,#0x1C+var_18]__text:00006262                BL              _KBSaveBagHandle

0x5234  17 E0

搜尋 EXPORT _KBUpdateSystemKeyBag

__text:00006338                EXPORT _KBUpdateSystemKeyBag__text:00006338                PUSH            {R4-R7,LR}__text:0000633A                ADD            R7, SP, #0xC__text:0000633C                STR.W          R8, [SP,#0xC+var_10]!__text:00006340                SUB            SP, SP, #0xC__text:00006342                MOV            R5, R0__text:00006344                MOV            R0, #(aPrivateVarKeyb - 0x6358) ; "/private/var//keybags"__text:0000634C                MOV            R1, #(aSystembag - 0x635A) ; "systembag"__text:00006354                ADD            R0, PC  ; "/private/var//keybags"__text:00006356                ADD            R1, PC  ; "systembag"__text:00006358                BL              _KBLoadKeyBag__text:0000635C                MOV            R6, R0__text:0000635E                CMP            R6, #0__text:00006360                BEQ            loc_63EC ; 改為 B__text:00006362                MOVW            R1, #(:lower16:(cfstr_Opaquestuff - 0x6370)) ; "OpaqueStuff"__text:00006366                MOV            R0, R6__text:00006368                MOVT.W          R1, #(:upper16:(cfstr_Opaquestuff - 0x6370)) ; "OpaqueStuff"

0x5360  ?? E0

搜尋字串 auto-boot

__text:00002BCA                ADD            R0, PC  ; "keybagd"__text:00002BCC                BL              sub_2A4C__text:00002BD0                MOV            R0, #(aAutoBoot - 0x2BE4) ; "auto-boot"__text:00002BD8                MOV            R1, #(aFalse - 0x2BE6) ; 將字串改為 true__text:00002BE0                ADD            R0, PC  ; "auto-boot"__text:00002BE2                ADD            R1, PC  ; "false"

搜尋字串 false 改為 true 0x00結尾

三 磁碟分割

調整第二分割區大小

================================

調整 /private/var 分割區大小來釋放空間,來建立另外兩個新的分割區。

* 檢查空間

使用 ssh 連接裝置

ssh root@device_ip

# df -B1Filesystem      1B-blocks      Used  Available Use% Mounted on/dev/disk0s1s1  2332835840 2224795648    84713472  97% /devfs                26624      26624          0 100% /dev/dev/disk0s1s2 13521633280  476921856 13044711424  4% /private/var/dev/disk1      240852992  69222400  171630592  29% /Developer

/ 為系統分割區(system)

/private/var 為資料分割區(data)

1B-blocks 總空間

Used      已用空間

Available 可用空間

上面看到資料分割區:

總空間為 13521633280 byte (約12.59GB)

已經使用 476921856 byte (約454.8MB)

剩餘空間 13044711424 byte (約12.14GB)

資料分割區至少預留400-500MB的可用空間,iOS是從真實的可用空間中減去200MB,所以至少必須留700MB以上的空間。

例如:我們要分配8GB的空間給第二系統, 其餘的可用空間留給「disk0s1s2 資料分割區」

計算新的大小

8*1024*1024*1024 = 8589934592 byte

第二分區大小 - 第三分割區大小 = 第二分割區新的大小

總空間(13521633280) - 8G(8589934592) = 資料分割區新的大小(4931698688) byte (約4.59GB)

用法:

hfs_resize 掛載點 新的大小(byte)

範例:調整 /private/var 容量為4.59G(4931698688 byte)

hfs_resize /private/var 4931698688

然後執行df查看調整結果

# df -B1Filesystem      1B-blocks      Used  Available Use% Mounted on/dev/disk0s1s1 2332835840 2224795648  84713472  97% /devfs              26624      26624          0 100% /dev/dev/disk0s1s2 4931698688  474763264 4456935424  10% /private/var/dev/disk1      240852992  69222400  171630592  29% /Developer

編輯分割區

編輯磁碟

gptfdisk /dev/rdisk0s1

p

Command (? for help): pDisk /dev/rdisk0s1: 3870731 sectors, 14.8 GiBLogical sector size: 4096 bytesDisk identifier (GUID): DA60F21F-DD91-4076-A4D3-632BA7F38079Partition table holds up to 2 entriesFirst usable sector is 6, last usable sector is 3870725Partitions will be aligned on 2-sector boundariesTotal free space is 0 sectors (0 bytes)Number  Start (sector)    End (sector)  Size      Code  Name  1              6          569545  2.2 GiB    AF00  System  2          569546        3870725  12.6 GiB    AF00  Data

第一分割區 開始區塊 6 結束區塊 569545

第二分割區 開始區塊 569546 結束區塊 3870725

1個區塊等於 4096-byte (4KB),區塊對齊也就是俗稱的4K對齊。

第二分割區修正

hfs_resize 調整可能無法對齊區塊,所以必須使用gptfdisk重新對齊資料分割區的區塊。

顯示分割區2的詳細信息

i 2

Command (? for help): iPartition number (1-2): 2Partition GUID code: 48465300-0000-11AA-AA11-00306543ECAC (Apple HFS/HFS+)Partition unique GUID: 353A726C-E8E1-4A9C-BD2D-BF34F7810862First sector: 569546 (at 2.2 GiB)Last sector: 3870725 (at 14.8 GiB)Partition size: 3301180 sectors (12.6 GiB)Attribute flags: 0003000000000000Partition name: 'Data'

記住 Partition unique GUID : 353A726C-E8E1-4A9C-BD2D-BF34F7810862 後面恢復GUID會用到。

刪除第二分割區

d 2

Command (? for help): dPartition number (1-2): 2

計算第二分割區區塊大小

新的大小(byte) / 4096 = 區塊大小

4931698688 / 4096 = 1204028

開始區塊 + 區塊大小 = 結束區塊

569546 + 1204028 = 1773574

記住第二分割區結束區塊大小為 1773574

修正第二分割區區塊大小

建立新的分割區

n ENTER 1773574 ENTER

Command (? for help): nUsing 2First sector (569546-3870725, default = 569546) or {+-}size{KMGTP}: Last sector (569546-3870725, default = 3870725) or {+-}size{KMGTP}: 1773574Current type is 'Apple HFS/HFS+'Hex code or GUID (L to show codes, Enter = AF00): Changed type of partition to 'Apple HFS/HFS+'

修改第二分割區標籤為 Data

c 2 Data

Command (? for help): cPartition number (1-2): 2Enter name: Data

查看修改結果

p

Command (? for help): pDisk /dev/rdisk0s1: 3870731 sectors, 14.8 GiBLogical sector size: 4096 bytesDisk identifier (GUID): DA60F21F-DD91-4076-A4D3-632BA7F38079Partition table holds up to 2 entriesFirst usable sector is 6, last usable sector is 3870725Partitions will be aligned on 2-sector boundariesTotal free space is 2097151 sectors (8.0 GiB)Number  Start (sector)    End (sector)  Size      Code  Name  1              6          569545  2.2 GiB    AF00  System  2          569546        1773574  4.6 GiB    AF00  Data

修正第二分割區 Attribute flags

通常系統分割區 Attribute flags 為 0000000000000000

資料分割區 Attribute flags 為 0003000000000000

x a 2 48 49 ENTER

Command (? for help): xExpert command (? for help): aPartition number (1-2): 2Known attributes are:0: system partition1: hide from EFI2: legacy BIOS bootable60: read-only62: hidden63: do not automountAttribute value is 0000000000000000. Set fields are:  No fields setToggle which attribute field (0-63, 64 or to exit): 48Have enabled the 'Undefined bit #48' attribute.Attribute value is 0001000000000000. Set fields are:48 (Undefined bit #48)Toggle which attribute field (0-63, 64 or to exit): 49Have enabled the 'Undefined bit #49' attribute.Attribute value is 0003000000000000. Set fields are:48 (Undefined bit #48)49 (Undefined bit #49)Toggle which attribute field (0-63, 64 or to exit):

恢復先前的GUID

先前紀錄的 Partition unique GUID 為 353A726C-E8E1-4A9C-BD2D-BF34F7810862

c 2 353A726C-E8E1-4A9C-BD2D-BF34F7810862

Expert command (? for help): cPartition number (1-2): 2Enter the partition's new unique GUID ('R' to randomize): 353A726C-E8E1-4A9C-BD2D-BF34F7810862New GUID is 353A726C-E8E1-4A9C-BD2D-BF34F7810862

到此第二分割區搞定.....

建立第二系統分割區

修改分割表允許擁有4個分割區

s 4Expert command (? for help): sCurrent partition table size is 32.Enter new size (32 up, default 128): 4Caution: The partition table size should officially be 16KB or larger,which works out to 128 entries. In practice, smaller tables seem towork with most OSes, but this practice is risky. I'm proceeding withthe resize, but you may want to reconsider this action and undo it.Adjusting GPT size from 4 to 32 to fill the sector

返回主選單

mExpert command (? for help): mCommand (? for help):

建立第三分割區(為第二系統的系統分割區)

設定前須先確定要安裝的目標系統容量大小,然後計算第三分割區區塊大小,設置第三分割區結束區塊。

或者可以自行分配大一點的區塊給第三分割區

例如分配2.2GB的空間給第三分割區

2.2GB = 2248MB

2248*1024*1024=2357198848 byte

2357198848 / 4096 = 575488 (區塊大小)

開始區塊 + 區塊大小 = 結束區塊

1773576 + 575488 = 2349064

n 3 ENTER 2349064 ENTER

Command (? for help): nPartition number (3-32, default 3): 3First sector (3-3870728, default = 1773576) or {+-}size{KMGTP}: Last sector (1773576-3870728, default = 3870728) or {+-}size{KMGTP}: 2349064Current type is 'Apple HFS/HFS+'Hex code or GUID (L to show codes, Enter = AF00): Changed type of partition to 'Apple HFS/HFS+'

建立第四分割區(為第二系統的資料分割區)

設置第四分割區結束區塊為:

Last sector (2349066-3870728, default = 3870728) 的 3870728 - 3 = 3870725

也就是第四分割區結束區塊後面必須預留3個區塊空間

.......剩余内容,请点击查看原文

本文由看雪论坛 djpvd 原创  转载请注明来自看雪社区

iOSMac软件逆向工程

你可能感兴趣的:(iOS Dualboot 手動修改)