macOS 系统固件解包与提取

下载 macOS Sonoma 14.8.4 的安装包

查看签名信息

/Users/wnagzihxa1n/Security/macOS/固件提取 > pkgutil --check-signature InstallAssistant.pkg
Package "InstallAssistant.pkg":
   Status: signed Apple Software
   Certificate Chain:
    1. Software Update
       Expires: 2029-04-14 21:28:23 +0000
       SHA256 Fingerprint:
           E0 74 D2 04 AC 24 98 E9 DC 90 4A 7B C7 CE D8 46 41 19 B7 9D 05 66
           80 28 92 05 83 B1 E8 96 EB B4
       ------------------------------------------------------------------------
    2. Apple Software Update Certification Authority
       Expires: 2031-10-15 00:00:00 +0000
       SHA256 Fingerprint:
           12 99 E9 BF E7 76 A2 9F F4 52 F8 C4 F5 E5 5F 3B 4D FD 29 34 34 9D
           D1 85 0B 82 74 F3 5C 71 74 5C
       ------------------------------------------------------------------------
    3. Apple Root CA
       Expires: 2035-02-09 21:40:36 +0000
       SHA256 Fingerprint:
           B0 B1 73 0E CB C7 FF 45 05 14 2C 49 F1 29 5E 6E DA 6B CA ED 7E 2C
           68 C5 BE 91 B5 A1 10 01 F0 24

解压缩

➜  /Users/wnagzihxa1n/Security/macOS/固件提取 > pkgutil --expand-full InstallAssistant.pkg expanded
/Users/wnagzihxa1n/Security/macOS/固件提取 > cd expanded
/Users/wnagzihxa1n/Security/macOS/固件提取/expanded > ls -al
drwxr-xr-x@ 9 wnagzihxa1n  staff          288 Apr 12 16:53 .
drwxr-xr-x  5 wnagzihxa1n  staff          160 Apr 12 16:48 ..
-rw-r--r--@ 1 wnagzihxa1n  staff       275808 Feb  1 04:40 Bom
-rw-r--r--@ 1 wnagzihxa1n  staff          918 Apr 12 16:48 PackageInfo
drwxr-xr-x@ 4 wnagzihxa1n  staff          128 Apr 12 16:48 Payload
drwxr-xr-x@ 4 wnagzihxa1n  admin          128 Apr 12 16:48 Scripts
-rw-r--r--@ 1 wnagzihxa1n  staff  13646176379 Feb  1 04:40 SharedSupport.dmg

提取SharedSupport.dmg中的com_apple_MobileAsset_MacSoftwareUpdate

IMAGE

这个目录下还有一个很大的压缩包

IMAGE

再提取com_apple_MobileAsset_MacSoftwareUpdate下的338d60054828e458deaa18b4a7375ee710ee4cf2.zip

/Users/wnagzihxa1n/Security/macOS/固件提取/expanded/SharedSupport/com_apple_MobileAsset_MacSoftwareUpdate/338d60054828e458deaa18b4a7375ee710ee4cf2 > ls -al
total 32
drwx------   6 wnagzihxa1n  staff   192 Apr 12 19:57 .
drwxr-xr-x  81 wnagzihxa1n  staff  2592 Apr 12 16:55 ..
drwxr-xr-x  17 wnagzihxa1n  staff   544 Apr 12 20:25 AssetData
-rw-r--r--   1 wnagzihxa1n  staff  5456 Feb  1 04:10 Info.plist
drwxr-xr-x   3 wnagzihxa1n  staff    96 Feb  1 04:10 META-INF

进入目录AssetData,目录中就是要进行处理的二进制数据

/Users/wnagzihxa1n/Security/macOS/固件提取/expanded/SharedSupport/com_apple_MobileAsset_MacSoftwareUpdate/338d60054828e458deaa18b4a7375ee710ee4cf2/AssetData > ls -al
total 90648
drwxr-xr-x  17 wnagzihxa1n  staff       544 Apr 12 20:25 .
drwx------   6 wnagzihxa1n  staff       192 Apr 12 19:57 ..
drwxr-xr-x  21 wnagzihxa1n  staff       672 Feb  1 03:40 boot
-rw-r--r--   1 wnagzihxa1n  staff      2210 Feb  1 04:08 Info.plist
drwxr-xr-x   4 wnagzihxa1n  staff       128 Apr 12 16:57 payload
-rw-r--r--   1 wnagzihxa1n  staff    447426 Feb  1 04:10 payload.bom
-rw-r--r--   1 wnagzihxa1n  staff       128 Feb  1 04:10 payload.bom.signature
drwxr-xr-x  97 wnagzihxa1n  staff      3104 Apr 12 16:58 payloadv2
-rw-r--r--   1 wnagzihxa1n  staff    483474 Feb  1 04:09 payloadv2.bom
-rw-r--r--   1 wnagzihxa1n  staff       128 Feb  1 04:09 payloadv2.bom.signature
-rw-r--r--   1 wnagzihxa1n  staff  45411154 Feb  1 03:41 post.bom
-rw-r--r--   1 wnagzihxa1n  staff     35046 Feb  1 03:41 pre.bom
drwxr-xr-x   8 wnagzihxa1n  staff       256 Apr 12 16:57 Restore
drwxr-xr-x   4 wnagzihxa1n  staff       128 Apr 12 16:57 usr

先创建extracted文件夹用于存储解析后的文件,同时使用如下脚本,对二进制数据进行解析

/Users/wnagzihxa1n/Security/macOS/固件提取/expanded/SharedSupport/com_apple_MobileAsset_MacSoftwareUpdate/338d60054828e458deaa18b4a7375ee710ee4cf2/AssetData > mkdir extracted
/Users/wnagzihxa1n/Security/macOS/固件提取/expanded/SharedSupport/com_apple_MobileAsset_MacSoftwareUpdate/338d60054828e458deaa18b4a7375ee710ee4cf2/AssetData > for i in $(seq -f "%03g" 0 42); do
    python3 ./extracted/pbzx.py < payloadv2/payload.$i
done > ./extracted/payload.aa

pbzx.py文件的内容如下

import sys, struct, lzma

def pbzx_stream(input_stream, output_stream):
    magic = input_stream.read(4)
    assert magic == b'pbzx', f"Not a pbzx stream, got: {magic}"
    input_stream.read(8)  # skip global flags
    while True:
        header = input_stream.read(16)
        if len(header) < 16:
            break
        chunk_flags = struct.unpack('>Q', header[0:8])[0]
        chunk_size  = struct.unpack('>Q', header[8:16])[0]
        chunk_data  = input_stream.read(chunk_size)
        if len(chunk_data) < chunk_size:
            break
        # 用 XZ 魔数检测,而不是依赖 flag 位
        if chunk_data[:6] == b'\xfd7zXZ\x00':
            output_stream.write(lzma.decompress(chunk_data))
        else:
            output_stream.write(chunk_data)

pbzx_stream(sys.stdin.buffer, sys.stdout.buffer)

完成后在extracted目录下就会生成payload.aa文件

/Users/wnagzihxa1n/Security/macOS/固件提取/expanded/SharedSupport/com_apple_MobileAsset_MacSoftwareUpdate/338d60054828e458deaa18b4a7375ee710ee4cf2/AssetData > ls -lh extracted/payload.aa
-rw-r--r--@ 1 wnagzihxa1n  wheel    14G Apr 12 20:14 extracted/payload.aa

现在开始提取PlugInLibraryService.xpc文件

/Users/wnagzihxa1n/Security/macOS/固件提取/expanded/SharedSupport/com_apple_MobileAsset_MacSoftwareUpdate/338d60054828e458deaa18b4a7375ee710ee4cf2/AssetData > aa extract -i ./extracted/payload.aa -d ./extracted/ -include-path "System/Library/Frameworks/NetFS.framework/Versions/A/XPCServices"

右键PlugInLibraryService.xpc文件,点击显示文件内容,接下来就可以开始进行后续的逆向分析了

IMAGE

目录