一些不幸的 iPhone 用户要求我帮助他们从 iTunes 备份中恢复数据。这在它们未加密时很容易,但在它们加密时就不容易了,无论密码是否已知。
因此,我试图找出加密时对 mddata 和 mdinfo 文件使用的加密方案。以其他方式读取这些文件没有问题,并且为此构建了一些健壮的 C # 库。(如果你能帮忙,我不在乎你用什么语言。这是我在这里追求的原则!)
苹果“ iPhone OS 企业部署指南”指出,“设备备份可以通过选择 Encrypt iPhone 以加密格式存储 ITunes 设备摘要窗格中的备份选项。文件使用带有256位密钥的 AES128进行加密。密钥被安全地存储在 iPhone 的钥匙链中。”
这是一个很好的线索,在 iPhone AES/Rijndael 互操作性的 Stackoverflow 上有一些很好的信息,建议使用128的键大小和 CBC 模式。
除了其他混淆之外,还需要一个键和初始化向量(IV)/salt。
人们可能会认为,这个密钥是对“备份密码”的操作,用户通过 iTunes 提示输入这个密码,然后传递给“ AppleMobileBackup.exe”,并按照 CBC 指定的方式进行填充。然而,考虑到对 iPhone 密钥链的引用,我想知道“备份密码”是否可以不用作 X509证书或对称私钥上的密码,证书或私钥本身是否可以用作密钥。(AES和 iTunes 的加密/解密过程是对称的。)
静脉注射是另外一回事,可能是几件事。也许这是 硬编码的进入 iTunes 或者进入 设备本身的关键之一。
虽然苹果上面的评论暗示钥匙在设备的钥匙链上,但我认为这并不重要。人们可以将加密的备份恢复到 与众不同设备,这意味着所有与解密相关的信息都存在于备份和 iTunes 配置中,在这种情况下,任何单独存在于设备上的东西都是不相关的和可替换的。那钥匙可能在哪里?
我在下面列出了 Windows 机器的路径,但无论我们使用哪种操作系统,它都有很大的不同。
“ appdata 漫游苹果电脑 iTunes itunesprefs.xml”包含一个 PList,其中包含一个“ Keychain”dict 条目。程序数据苹果锁定09037027da8f4bdefde97d706703ca034c88bab。PList”包含一个 PList,其中包含“ Device證书”、“ Host證书”和“ Root證书”,所有这些证书似乎都是有效的 X509证书。同一个文件似乎还包含非对称密钥“ RootPrivateKey”和“ HostPrivateKey”(我的阅读表明,这些密钥可能是 PKCS # 7封装的)。此外,在 Manifest.plist 文件中的每个备份中都有“ AuthSignature”和“ AuthData”值,尽管这些值似乎随着每个文件的增量备份而被轮换,表明它们作为一个密钥并不那么有用,除非有什么真正相关的事情正在发生。
有很多误导性的说法认为从加密备份中获取数据很容易。没有,据我所知,还没有人这么做过。备份加密完全是另一回事,而且也不是我想要做的。
这不是黑进 iPhone 或者其他类似的东西。我在这里追求的是一种从加密的 iTunes 备份中提取数据(照片、联系人等)的方法,就像我可以解密一样。我已经用上面写下的信息尝试了各种排列,但是一无所获。我希望你能告诉我一些我可能错过的想法和技巧。