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 MasterSlide
s 1...n und Slide
s 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe einige Arbeit-reverse-engineering des formats und veröffentlichte meine Ergebnisse hier. Ich habe geschrieben bis ein Beschreibung das format und ein Beispiel-Projekt, wie gut.
Grundsätzlich, die .iwa-Dateien sind Protobuf-streams komprimiert Bissig.
Hoffe, das hilft!
Interessantes Projekt, wie ich es mag! Hier ist, was ich bis jetzt gefunden habe.
Den ersten 4 bytes von jedem der iwa-Dateien angezeigt werden, eine Länge, mit einem tweak. So wie es aussieht wird es keine "Magie", um zu überprüfen, Datei-Typ.
Blick auf Slide1.iwa:
Ersten 4 bytes sind
00 79 02 00
Dateigröße 637 bytes
nehmen Sie die erste
00
aus, und Umgekehrt die bytes:00 02 79
00 02 79
== 633637 - 633 = 4 bytes, halten Sie die Größe der Datei.
Diese Prüfungen für die 4 Dateien, die ich sah: Slide1.iwa, gleiter2 befindet.iwa, Dokument.iwa, DocumentStylesheet.iwa