Apple iWork 套件的早期版本使用非常简单的文档格式:
- 文档是资源包(文件夹,无论是否压缩)
- 该 bundle 包含一个
index.apxl[z]
文件,以专有但相当容易理解的模式描述文档结构
iWork '13 完全重做了格式。文档仍然是 bundle ,但索引 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/类似相关的垃圾)。
我在这里发布了一个简单示例主题文档的解压Index
:https://github.com/jrk/iwork-13-format .
但是,整体文件格式对我来说并不明显。 Apple 长期以来一直使用简单的平台标准格式(例如 plists)来对其大部分文档进行编码,但文件开头没有明确的类型标记,而且对我来说这些 iwa< 的含义并不明显
文件是。
这些文件有任何提示吗?是否有证据表明它们采用某种合理可理解的序列化格式?
通过 F-Script 翻查 Keynote 应用程序运行时和类转储,我发现的唯一证据是在似乎用于 iWork 的序列化类中使用了 Protocol Buffer ,例如:https://github.com/nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/iWorkImport.framework/TSPArchiverBase.h .
通过 protoc --decode_raw
快速传输一些文件,并删除前 0…16 个字节,没有产生任何明显可用的内容。
最佳答案
我已经完成了一些对格式进行逆向工程的工作并发布了我的结果 here 。我写了一个description格式并提供了示例项目。
基本上,.iwa 文件是使用 Snappy 压缩的 Protobuf 流。
希望这有帮助!
关于macos - 逆向工程 iWork '13 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19571787/