Macos 逆向工程iWork';13种格式

Macos 逆向工程iWork';13种格式,macos,cocoa,serialization,format,reverse-engineering,Macos,Cocoa,Serialization,Format,Reverse Engineering,苹果iWork套件的早期版本使用了非常简单的文档格式: 文档是一捆捆资源(文件夹,是否压缩) 该捆绑包包含一个index.apxl[z]文件,该文件以专有但相当容易理解的模式描述文档结构 iWork'13已经完全重做了格式。文档仍然是捆绑包,但索引XML文件中的内容现在编码在一组二进制文件中,类型后缀为.iwa打包到index.zip 例如,在Keynote中,有以下iwa文件: AnnotationAuthorStorage.iwa CalculationEngine.iwa Docume

苹果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
s1…n和
Slide
s1…m

从它们的命名来看,每一个的目的都很清楚。这些文件甚至显示为未压缩文件,基本上所有内容文本都以二进制blob中的字符串形式直接可见(尽管在可读的ASCII字符中有一些类似RTF/NSAttributedString/类似的相关垃圾)

我已经在这里发布了一个简单示例Keynote文档的未打包的
索引

但是,总体文件格式对我来说并不明显。苹果公司在使用简单的平台标准格式(如plists)对大多数文档进行编码方面有着悠久的历史,但在文件的开头没有明确的类型标记,我也不清楚这些
iwa
文件是什么

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

使用F-Script翻阅Keynote应用程序运行时和类转储,我发现的唯一证据是在序列化类中使用了一些协议缓冲区,这些类似乎用于iWork,例如:


通过
protoc快速地传输一些文件——解码原始数据
,去掉最初的0…16个字节,没有明显的可用性。

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

每个iwa文件的前4个字节似乎是一个长度,带有一个调整。因此,似乎不会有任何“魔法”来验证文件类型

请看幻灯片1。iwa:
前4个字节是
00790200

文件大小为637字节
取下第一个
00
并反转字节:
00 02 79

000279
==633
637-633=保存文件大小的4个字节。


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

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

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


希望这有帮助

您是否尝试过
将主题样式表.iwa
归档以查看该文件是否能够识别出它们是什么?是的,并且该文件只返回
数据
(即,它不知道)。我也尝试解码该格式,但重点是页面,因此我正在查看
文档.iwa
。有几个人建议苹果使用协议缓冲区,所以我写了一个脚本来解码文档中所有可能的片段(例如字节100->3000)。和您一样,我也没有找到可用的输出。请尝试
strings/Applications/Pages.app/Contents/MacOS/Pages | grep google::protobuf
从Pages应用程序中获取所有protobuf数据,您可以将这些数据与单个页面文档关联。您在那里看到的是所谓的“小端点”(little endianness),而不是“微调”: