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文档的解压缩Index
:https://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字节被删除,没有任何明显的可用信息。
答案 0 :(得分:25)
答案 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