ZONE_MAP 偏移量不是很容易找到,但我将在下面详细说明应该可行的方法。
一个警告:我为此使用了 Hopper,而不是 IDA Pro。不过,您可以使用 Hopper 的演示版。
第 1 步:解密您的 KernelCache。确保它已被解密,否则所有其余步骤将基本上失败。您可以为此使用 Decrypt0r。当Decrypt0r 发出以下输出时,你就知道你很好了:
Enter key for /Users/geosn0w/Desktop/kernelcache.release.n78: 87aa19c72db6e662d6c3dbcf74da88026fda5a66469baa7e271725918133cd2f
Enter key IV for /Users/geosn0w/Desktop/kernelcache.release.n78: 2692e6004e6240aab57f2affa0daedc0
[DEBUG] Opening /Users/geosn0w/Desktop/kernelcache.release.n78
Parsed TYPE element
Parsed DATA element
Parsed SEPO element
Parsed KBAG element
Parsed KBAG element
File opened successfully
Setting Img3 Key and IV
Fetching KBAG element from image
Found KBAG element in image
KBAG Type = 256, State = 1
Decrypting Img3 file
Fetching DATA element from image
Found DATA element in image
Setting keys to decrypt with
Performing decryption...
magic = 0x706d6f63
Image compressed, decompressing
signature = 0x706d6f63
compression_type = 0x73737a6c
Found LZSS compression type
Found output file listed as /Users/geosn0w/Desktop/kernelcache.release.n78.dec
Image claims it's decrypted, dump raw data
Closing Img3 file
/Users/geosn0w/Desktop/kernelcache.release.n78.dec copied to the root of IPSW folder
第 2 步: 打开 Hopper Disassembler 并弹出解密后的KernelCache
里面的文件。内核很大,所以给它时间来分析它。它
可能需要几分钟。
步骤 3: 成功分析内核文件后,导航到 Hopper 中的字符串选项卡并搜索 zone_init: kmem_suballoc failed。
第四步:双击出现的单个结果,然后双击DATA XREF: subXXXXXXXXXXX子例程交叉引用。
第 5 步:如果您完成了上述所有操作,您将跳转到包含 ; :lower16:(0x803bde69 - 0x80036856), "\\\"zone_init: kmem_suballoc failed\\\"", CODE XREF=sub_80032808+6204 之类的子程序。双击最右侧的CODE XREF=sub_XXXXXXXX 部分。
第 6 步:您的偏移量是您跳转到的位置的第一个 QWORD。就我而言,它是0x8003684a,这是ZONE_MAP 的偏移量。