我被许多不幸的iPhone用户请求帮助他们从iTunes备份中恢复数据.这些在未加密时很容易,但不是在加密时,无论密码是否已知.
因此,我试图找出加密时mddata和mdinfo文件上使用的加密方案.否则,我没有读取这些文件的问题,并且已经构建了一些强大的C#库.(如果你能够提供帮助,我不在乎你使用哪种语言.这是我在这之后的原则!)
Apple"iPhone OS企业部署指南"指出"通过在iTunes的设备摘要窗格中选择加密iPhone备份选项,可以以加密格式存储设备备份.文件使用带有256位密钥的AES128进行加密.关键是安全地存放在iPhone钥匙串中."
这是一个非常好的线索,这里有关于iPhone AES/Rijndael互操作性的 Stackoverflow的一些很好的信息,表明可以使用128和CBC模式的密钥.
除了任何其他混淆之外,还需要密钥和初始化向量(IV)/盐.
人们可能会认为关键是操纵"备份密码",用户被提示通过iTunes输入并传递给" AppleMobileBackup.exe ",以CBC规定的方式填充.但是,考虑到对iPhone钥匙串的引用,我想知道"备份密码"是否可能不会用作X509证书或对称私钥的密码,并且证书或私钥本身可能会被用作密钥.(AES和iTunes加密/解密过程是对称的.)
IV是另一回事,它可能是一些事情.也许它是硬编码到iTunes或设备本身的密钥之一.
虽然Apple上面的评论表明该设备的钥匙链上有钥匙,但我认为这并不重要.可以将加密的备份恢复到不同的设备,这表明与解密相关的所有信息都存在于备份和iTunes配置中,并且仅在设备上的任何内容都是无关紧要的,并且在此上下文中可以替换.所以关键在哪里?
我在Windows机器上列出了下面的路径,但无论我们使用哪种操作系统,它都非常多.
"\ appdata\Roaming\Apple Computer\iTunes\itunesprefs.xml"包含一个带有"Keychain"dict条目的PList."\ programdata\apple\Lockdown\09037027da8f4bdefdea97d706703ca034c88bab.plist"包含带有"DeviceCertificate","HostCertificate"和"RootCertificate"的PList,所有这些看起来都是有效的X509证书.同一个文件似乎也包含非对称密钥"RootPrivateKey"和"HostPrivateKey"(我的阅读建议这些可能是PKCS#7-enveloped).此外,在每个备份中,Manifest.plist文件中都有"AuthSignature"和"AuthData"值,尽管这些值似乎在每个文件逐步备份时轮换,表明它们不是一个有用的键,除非确实有什么相关的工作正在进行中.
有很多误导性的东西表明从加密备份中获取数据很容易.它不是,据我所知,它还没有完成.绕过或禁用备份加密完全是另一回事,而不是我想做的事情.
这不是关于黑客攻击iPhone或类似的东西.我在这里的所有内容都是从加密的iTunes备份中提取数据(照片,联系人等)的方法,因为我可以解密.我已经尝试了各种各样的排列信息,我已经在上面提到了这些信息,但却无处可去.我很欣赏我可能错过的任何想法或技巧.
我需要从.po文件中提取消息.是否有Python模块可以做到这一点?我写了一个解析器,但它取决于平台(\r\nvs. \n).
有一个更好的方法吗?