解密IPSW固件文件

最近看“Mac OSX and iOS Internals”,顺便小动手了一把,把IPSW(iOS固件包)里的文件拆开来看了看。操作平台为Mac OSX Lion。(另外似乎只适用于6.0以前的固件)
工具:
vfdecrypt (http://theiphonewiki.com/wiki/VFDecrypt
xpwntool (http://code.google.com/p/ios-jailbreaking-stuff/source/browse/trunk/tools_bin/xpwntool?r=5)点击下载raw file
lzssdec(Google第一个结果是源代码,下下来直接用g++编译)
固件下载:
http://www.ipswdownloader.com/download-iphone-ipsw-files.php
步骤:
1. ipsw直接当成zip文件解压;
2. 得到一个文件夹和几个文件,其中最大的那个以dmg结尾的就是文件系统ramdisk,另外一个dmg是restore ramdisk(大概将近20M)。不过由于文件被加密,不能直接mount;
3. 在 http://theiphonewiki.com/wiki/VFDecrypt_Keys 找到对应的版本,并得到文件系统的key;
4. 通过“./vfdecrypt -i<dmg location> -k<key> -o<out location>.dmg” 命令解密后的文件系统镜像;
5. Mount 解密后的镜像,可以看到一个类Unix的文件系统结构,其实这就是iOS的文件系统的layout;
6. 在ipsw解压的文件里找到kernelcache文件,基本上这可以算是iOS的内核文件(加上了一些静态链接好的扩展)
7. 通过xpwntool先把kernelcache给解密出来
./xpwntool <infile> <outfile>  [-k <key>] [-iv <key>] [-decrypt]
8. 用lzssdec把kernelcache从解密的文件里提取出来(其实就是找到相应的offset然后用lzss算法解压缩出来),注意“<“和“>”都要打
./lzssdec -o 448 < input_file > out_file
9. 用file确定解压文件的属性“Mach-O executable arm”