Reverse engineering von iWork '13-Formate

Frühere Versionen von apples iWork-suite, die mit einer sehr einfachen Dokument-format:

  • Dokumente wurden Bündel von Ressourcen (Ordner, gezippt oder nicht)
  • das bundle enthielt einen index.apxl[z] Datei-Beschreibung der Dokument-Struktur in eine proprietäre, aber Recht einfach zu verstehen-schema

iWork '13 wurde komplett überarbeitet und das format. Dokumente sind noch bundles, aber was war in den index-XML-Datei ist jetzt codiert in eine Reihe von binären Dateien mit Typ-suffix .iwa verpackt in Index.zip.

In Keynote, zum Beispiel, gibt es die folgenden iwa Dateien:

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

für MasterSlides 1...n und Slides 1...m

Den Zweck eines jeden von Ihnen ist ganz klar von Ihrer Namensgebung. Die Dateien werden auch entpackt, mit im wesentlichen alle Inhalte, text direkt sichtbar als strings unter den binären blobs (wenn auch mit einigen wie RTF/NSAttributedString/ähnlich-im Zusammenhang Müll, die in der Mitte der lesbaren ASCII-Zeichen).

Habe ich geschrieben die entpackt Index einem einfachen Beispiel Keynote-Dokument hier: https://github.com/jrk/iwork-13-format.

Jedoch die gesamte Datei-format ist nicht selbstverständlich für mich. Apple hat eine lange Geschichte der Verwendung von einfachen, Plattform-standard-Formate wie plists für die Codierung, die die meisten von eigenen Dokumenten, aber es gibt keine klare Typ-tag am Anfang der Dateien, und es ist mir nicht klar, was diese iwa Dateien sind.

Diese Dateien klingelt da etwas? Gibt es Evidenz, Sie sind in irgendeiner halbwegs verständlich Serialisierungsformat?

Durchstöbern der Keynote-app-runtime und die Klasse bildet mit F-Script, das nur die Beweise, die ich gefunden habe, ist für einige die Verwendung der Protocol Buffers in die Serialisierungs-Klassen, die zu sein scheinen verwendet für iWork, z.B.: https://github.com/nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/iWorkImport.framework/TSPArchiverBase.h.

Rohrleitungen schnell ein paar Dateien durch protoc --decode_raw mit der erste 0...16 bytes lopped off produziert offensichtlich nichts brauchbares.

  • haben Sie versucht file ThemeStylesheet.iwa um zu sehen, ob die Datei herausfinden können, was Sie sind?
  • Ja, und die Datei einfach zurück data (d.h., er hat keine Ahnung).
  • Ich bin auch versucht, zu decodieren, das format, sondern sich auf die Seiten, ich bin auf der Suche auf Document.iwa. Einige Leute hatten vorgeschlagen, dass Apple mit protocol buffers, also schrieb ich ein Skript, um --decode_raw alle möglichen Segmente des Dokuments (z.B. 100 bytes -> 3000). Wie du, fand ich keine brauchbare Ausgabe.
  • Versuchen strings /Applications/Pages.app/Contents/MacOS/Pages | grep google::protobuf zu greifen alle die protobuf-Daten aus der Pages-app, die Sie möglicherweise in der Lage, beziehen sich auf einzelne Seiten docs.
InformationsquelleAutor jrk | 2013-10-24
Schreibe einen Kommentar