刷机过程大概是这样的:你从网上下载一个ipsw格式的固件,打开iTunes,连接手机,固件就可以刷进去了。实际上,刷机过程中,数据是这么流动的:
ipsw文件 --> iTunes --> iOS设备的CPU --> iOS设备的Flash/eMMC
其中非常关键的一点是:只有CPU才能把固件写到Flash/eMMC中,所以你能不能成功刷机,在于CPU同不同意。CPU不同意,你就刷不进去。
(为什么不能绕开CPU直接写入Flash/eMMC呢?这是因为iOS设备是全盘加密的,也就是说,往Flash/eMMC里写东西要先加密。这个加密密钥写在CPU内部,只有CPU才知道。而且每台设备的密钥都是不一样的。
所以,你没有密钥,就无法向Flash/eMMC写入正确的数据,即使把Flash/eMMC拆下来刷入也不行。)
那么CPU怎么决定能否刷机呢?需要验证来自苹果服务器的固件签名。假如固件签名正确,就可以刷入固件。所以iTunes必须向苹果服务器询问这个固件的签名,提供给CPU。苹果服务器根据这个固件的真伪、版本号,来决定是否提供签名。所以,苹果服务器对你能否刷入固件是有决定权的。
可以想象以下情景:
iTunes:我要刷入这个固件
CPU:那你得提供这个固件的签名
iTunes向苹果验证服务器索要了这个固件的签名
iTunes:这是这个固件的签名
CPU:这个签名是真的!这个包可以刷入。
如果固件过期的话,会是以下情景:
iTunes:我要刷入这个固件
CPU:那你得提供这个固件的签名
iTunes向苹果验证服务器索要这个固件的签名
苹果验证服务器:这个固件过期了,所以我不能给你提供签名。
(数字签名使用非对称加密技术,具有不可伪造性。所以你不能自行伪造签名)
虽然数字签名不能伪造,但是可以保存下来重放。前几年可以使用SHSH刷入旧版固件,就是这个原理。可以想象以下情景:
iTunes:我要刷入这个固件
CPU:那你得提供这个固件的签名
iTunes拿出了收藏多年的旧签名
iTunes:这是这个固件的签名
CPU:这个签名是真的!这个包可以刷入。
(实际上要搭建一个假的验证服务器,把收藏多年的旧签名提供给iTunes)
这种重放攻击是很容易避免的,所以现在SHSH已经没用了。你可以想象成以下情景:
iTunes:我要刷入这个固件
CPU:那你得提供这个固件的签名,并且签名中含有随机数fasdjhpgia;
收藏的旧签名中,随机数不是fasdjhpgia,而是另外一个,所以无法使用
网友评论