逆向工程 iWork '13 格式

2023-12-26

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

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

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

以Keynote为例,有以下内容iwa files:

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

for MasterSlides 1…n and Slides 1…m

从它们的命名中可以清楚地看出它们的用途。这些文件甚至看起来是未压缩的,基本上所有内容文本都作为二进制 blob 中的字符串直接可见(尽管在可读 ASCII 字符中存在一些类似 RTF/NSAttributedString/类似相关的垃圾)。

我已经把解压后的贴贴出来了Index这里有一个简单的 Keynote 文档示例:https://github.com/jrk/iwork-13-format https://github.com/jrk/iwork-13-format.

然而,整体文件格式对我来说并不明显。 Apple 长期以来一直使用简单的平台标准格式(例如 plists)来编码其大部分文档,但文件开头没有明确的类型标记,而且我不清楚这些文件的含义iwa文件是。

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

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

快速通过管道传输一些文件protoc --decode_raw前 0…16 个字节被删除,没有产生任何明显可用的东西。


我已经完成了一些对格式进行逆向工程的工作并发布了我的结果here https://github.com/obriensp/iWorkFileFormat。我写了一个描述 https://github.com/obriensp/iWorkFileFormat/blob/master/Docs/index.md格式并提供了一个示例项目。

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

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逆向工程 iWork '13 格式 的相关文章

  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 即使在可访问性中勾选应用程序,AXIsProcessTrustedWithOptions 也不会返回 true

    As this question https stackoverflow com questions 17693408 enable access for assistive devices programmatically on 10 9
  • 如何在 swiftUI (macOS) 中检测按键按下和释放

    除了标题之外没什么可说的 我希望能够在按下按键和释放按键时 在 macOS 上 在 swiftUI 视图中执行操作 在 swiftUI 中是否有任何好的方法可以做到这一点 如果没有 有什么解决方法吗 不幸的是 键盘事件处理是其中一个令人痛苦
  • 使用 Boost 序列化并发送数据结构?

    我有一个如下所示的数据结构 typedef struct unsigned short m short1 unsigned short m short2 unsigned char m character MyDataType 我想使用 b
  • OSX 上的 locale.getlocale() 问题

    我需要获取系统区域设置来执行许多操作 最终我想使用 gettext 翻译我的应用程序 我打算在 Linux 和 OSX 上分发它 但我在 OSX Snow Leopard 上遇到了问题 python Python 2 5 2 r252 60
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩
  • 使用 MacPorts 在 Mac OS X 10.5 上安装 PostgreSQL 时出错

    我已经使用 MacPorts 在几台不同的计算机上安装了 PostgreSQL 没有问题 但是当涉及到我自己的笔记本电脑时 我无法构建它 当我执行此命令时 sudo port install postgresql83 我收到此错误 chec
  • 超类与类SpecificationPolicy不匹配

    我得到了一个superclass mismatch for class SpecificationPolicy尝试安装或升级某些brew 软件包时出错 例如 更新安装 supabase CLI 时 brew install supabase
  • iPad - 无法在框架内滚动

    我无法滚动 iPad Safari 中框架内调用的 pdf 我已经尝试过两件事 2 指滚动 使用对象 嵌入代替框架 但这是行不通的 事实上我已经尝试了很多东西 溢出 高度等等 请帮我 先感谢您 根据这篇文章http support appl
  • 如何更改刻度标签字体大小

    在 matplotlib 图中 如何使用以下命令设置刻度标签的字体大小ax1 set xticklabels 更小 此外 如何将其从水平旋转为垂直 其实还有更简单的方法 我刚刚发现 import matplotlib pyplot as p
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 下载Xcode? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我刚刚升级到 OS X Mavericks 我很高兴能够使用所有新的 Mavericks 技术 我只有
  • 适用于 Objective-C / iPhone 的良好 HTTP 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPDATE 这个问题显然已经过时了 参见日期 我建议只使用现代 iOS7 功能 例如 NSURLSession 我想 这个问题是为了历史
  • 确定 NSView 是否绘制的正确方法

    有没有正确的方法来确定是否NSView实际上是否在当前视图层次结构中绘制 考虑以下情况 视图完全在屏幕外 不是强制性的 该视图不在视图层次结构的顶部 The isHidden and isHiddenOrHasHiddenAncestor不
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 如何通过辅助功能 API 获取当前所选文本的全局屏幕坐标。

    我需要帮助来了解字典应用程序如何在任何应用程序上按 CMD CTRL D 时显示所选文本的以下弹出对话框 我想实施 我的可可应用程序具有相同的功能 我的应用程序将在后台运行 并显示有关所选文本的一些热键的建议 我已经实现了热键捕获 我只需要
  • Mac 上用户“postgres”的密码身份验证失败

    我在创建新的 psql 用户时遇到问题 因为我无法以 postgres 身份登录 psql 我已尝试过 1 sudo u postgres psql 2 sudo u postgres createuser img site P s e 他
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • XCode 4.2.1 在 Lion 10.7.2 上启动时崩溃

    这周我买了大约 10 年来的第一台 Mac 是的 这是一台二手 Mac Pro 2x2GHz 双核 Xeon 2GB RAM 它全新安装了 Mac OS X Lion 10 7 2 我只安装了 OmniOutlner Pro Textmat

随机推荐

  • 变量定义中带有 findViewById 的 NullPointerException

    我已经阅读了有关空点异常的非常流行的帖子 但我仍然对为什么会收到错误感到困惑 我试图确保一些 EditText 已填写 我在onCreate方法中试过了 还是不行 任何帮助 将不胜感激 如果这是一个愚蠢的问题 我深表歉意 public cl
  • 通过 Jenkins CI 在 Docker 容器中运行 Selenium 测试的最简单方法

    我想执行我的自动化测试 用以下语言编写Nightwatch Cucumber通过 Docker 容器中的 Jenkins CI 我有一个想要用于它的 Docker 映像 这就是我想做的更详细的事情 开始测试 Jenkins CI 作业 在同
  • 加密和解密 iOS/Node.js 安全查询

    我目前在两个平台上使用 AES128 以及我的代码answer https stackoverflow com a 27893935 2977578 注意 我对代码进行了一些更改 以偏离使用 IV 因为我认为这对于我的应用程序来说有点过分了
  • Pandas:将每小时值重新采样为带有偏移量的每月值

    我想聚合一个pandas Series每小时DatetimeIndex到每月值 同时考虑到午夜的偏移 Example 考虑以下跨度约为 1 5 个月的 统一 时间序列 import pandas as pd hours pd Series
  • Google Maps API 永远不会满足

    如果我将 URL 引荐来源网址身份验证与地理编码 API 结合使用 它会显示 There was an error while trying to fix the Venues geolocation information API key
  • python telebot 得到了意想不到的响应

    我一直在使用我的 Telegram 机器人使用 python 的远程机器人库从我的台式计算机向我发送不同的通知 很长一段时间一切都正常工作 但有一天它停止工作了 这是代码 Python 2 7 import telebot import s
  • 在 Safari 中检测 iOS 上的初始设备方向

    我知道怎么做检测设备方向变化 https developer apple com library safari documentation SafariDOMAdditions Reference DeviceOrientationEven
  • OSGI捆绑异常,maven依赖问题

    我对 OSGI Felix 和 Maven 还很陌生 刚刚开始使用 我正在通过 jenkins 部署 java 构建 并且遇到以下依赖问题 下面是包含依赖项的pom文件内容 我不确定它是否正确 但它仍然抱怨它 它正在寻找 javax jws
  • Qt Creator 无法在 Mac 上启动调试

    最近 我怀疑某些系统 自制程序更新 Qt 的调试器停止工作 它永远挂在Setting up inferior 内部日志 dStart parameters QGIS mode 1 dABI x86 darwin generic mach o
  • SQL 如果没有返回行则执行此操作

    我有一个 select 语句 我想说如果这个 select 语句不返回任何行 则在每个单元格中放置一个 我该怎么做呢 select a b c from t if rowcount 0 select as a as b as c 但请确保你
  • 如何在Python中使用BeautifulSoup从标签中提取innerHTML

    我正在尝试使用以下代码从标签中提取innerHTML theurl http na op gg summoner userName Darshan thepage urlopen theurl soup BeautifulSoup thep
  • google oauth2 刷新令牌何时过期?

    google oauth2 刷新令牌何时过期 我所说的过期的意思是由于已经过了一定的时间跨度而过期 不是因为用户已撤销访问权限或因为用户已请求新的刷新令牌 我做了一些研究 但没有一个引用官方谷歌文档 我也找不到有效的谷歌文档 其他一些问题说
  • Mongo 更新子文档

    我在使用 MongoDB 时似乎遇到了障碍 并且想知道是否有解决方案 而无需修改我的数据库结构 现在我的数据库结构如下 Company id 1 properties property id 1 tags tag id 1 tag valu
  • 使用 PHP/AJAX 从 HTML 表单发送电子邮件

    我想将用户从 HTML 表单填写的信息发送到我的电子邮件地址 根据我的理解 由于电子邮件工作方式的性质 仅使用客户端编码无法完成此操作 因此建议使用 PHP 与 AJAX 结合 来处理服务器端代码 我跟着导游here https stack
  • 无法在 x86 ubuntu linux 上添加自定义系统调用

    我对此很陌生 刚刚了解内核 我正在尝试添加对内核 4 20 4 的自定义调用 这是我所做的步骤 首先我创建文件 kernel printmsg c 包含代码 include
  • 在 Windows 7 上安装 Cabal-dev

    我正在尝试在 Windows 7 上安装 Cabal dev 我已经设法通过使用以下方法解决了无法构建网络的问题 cabal install constraint network installed cabal dev 但是后来我得到了这个
  • Spring Mvc java.io.FileNotFoundException - ApplicationContext.xml

    applicationContext xml 位于 WEB INF 文件夹中 为什么我收到此错误 org springframework beans factory BeanDefinitionStoreException IOExcept
  • IE9 开发者工具中的 IE9 兼容性视图是什么?

    我正在查看 IE 9 开发人员工具 当我单击浏览器模式时 我会看到一个列表 IE 7 IE 8 IE 9 IE 9 Compatibility View 那有什么作用 IE 9 和 IE 9 兼容性视图有什么区别 The main区别在于用
  • kali linux python3-pip 面临的问题

    我面临这个问题 sudo apt get install python3 pip Reading package lists Done Building dependency tree Reading state information D
  • 逆向工程 iWork '13 格式

    Apple iWork 套件的早期版本使用非常简单的文档格式 文档是资源包 文件夹 压缩或未压缩 该捆绑包包含一个index apxl z 以专有但相当容易理解的模式描述文档结构的文件 iWork 13 完全重做了格式 文档仍然是捆绑包 但