逆向工程iWork '13格式

时间:2013-10-24 16:42:58

标签: macos cocoa serialization format reverse-engineering

Apple的iWork套件的早期版本使用了非常简单的文档格式:

  • 文件是捆绑资源(文件夹,是否压缩)
  • 该包包含一个index.apxl[z]文件,用于描述专有但相当容易理解的模式中的文档结构

iWork '13完全重做了格式。文档仍然是捆绑包,但索引XML文件中的内容现在编码为一组二进制文件,类型后缀.iwa打包到Index.zip

例如,在Keynote中,有以下iwa个文件:

AnnotationAuthorStorage.iwa
CalculationEngine.iwa
Document.iwa
DocumentStylesheet.iwa
MasterSlide-{n}.iwa
Metadata.iwa
Slide{m}.iwa
ThemeStylesheet.iwa
ViewState.iwa
Tables/DataList.iwa

MasterSlide s 1 ... n Slide s 1 ... m

从命名的角度来看,每个目的都非常明确。这些文件甚至看起来都是未压缩的,基本上所有内容文本都直接在二进制blob中作为字符串显示(虽然在可读的ASCII字符中有一些像RTF / NSAttributedString /类似相关的垃圾)。

我已在此处发布了一个简单示例Keynote文档的解压缩Indexhttps://github.com/jrk/iwork-13-format

但是,整体文件格式对我来说并不明显。 Apple长期使用简单的平台标准格式(如plist)来编码大部分文档,但文件开头没有明确的类型标记,对我来说这些iwa并不明显。文件是。

这些文件是否响铃?有证据表明它们处于某种可理解的序列化格式吗?

使用F-Script通过Keynote应用程序运行时和类转储进行修改,我发现的唯一证据是在序列化类中使用了协议缓冲区,这些类似乎用于iWork,例如:https://github.com/nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/iWorkImport.framework/TSPArchiverBase.h

通过protoc --decode_raw快速管理一些文件,其中第一个0 ... 16字节被删除,没有任何明显的可用信息。

2 个答案:

答案 0 :(得分:25)

我做了一些反向工程格式的工作并发布了我的结果here。我已经写了description格式并提供了一个示例项目。

基本上,.iwa文件是使用Snappy压缩的Protobuf流。

希望这有帮助!

答案 1 :(得分:3)

有趣的项目,我喜欢它!这是我到目前为止所发现的。

每个iwa文件的前4个字节看起来都是一个长度,有一个调整。所以看起来没有任何“魔法”来验证文件类型。

看看Slide1.iwa:
前4个字节是00 79 02 00
文件大小为637字节
取出第一个00,然后反转字节:00 02 79
00 02 79 == 633
637 - 633 = 4个字节,用于保存文件的大小。

这将检查我查看的4个文件:Slide1.iwa,Slide2.iwa,Document.iwa,DocumentStylesheet.iwa

相关问题