Bearbeiten: OK. Hinweis Frage wurde aktualisiert, so dass Sie nicht eine v0.1, sondern v1.0 erhalten. gilt nicht mehr.
Die Version ist nicht "wie leistungsfähig" die Datei ist, sondern welche Mindestversion erforderlich ist, um diese Datei aus dem Archiv zu extrahieren .
Dies ist nicht die Gesamtversion für das Archiv!
Ein Unterschied besteht darin, dass z. B. OO alle Dateien mit derselben Versionsanforderung markiert. Dies ist wiederum die Datei im Dokument (Archiv über alles) mit den höchsten Anforderungen.
Das ist. Jede Datei verfügt über einen Zip-Header, der die zum Extrahieren erforderliche Mindestversion angibt. Durch die oben genannten haben wir in der Regel:
archive-files PackType Zip-Required OO-Header `zip`-header
+--------------------------------------------------------------+
| mimetype Store 1.0 2.0 1.0 |__ foo.odt
| content.xml Deflate 2.0 2.0 2.0 |
+---------------------------------------------------------------+
Also setzte OO das erforderliche Flag auf 2.0, obwohl es 1.0 ist. Dies hat jedoch keinen Einfluss auf die Möglichkeit, das Dokument zu öffnen. (Es ist in Ordnung, eine manuell komprimierte Datei in OO zu öffnen, obwohl sie mimetype
mit v1.0 gekennzeichnet ist.)
Versionen
foo.odt:
1400 Version needed to extract.
0008 General Purpose
0000 Compression method
Die zum Extrahieren benötigte Version , hier das untere Byte 0x14
, wird durch Teilen und Modul durch 10 übersetzt:
Major: 0x14 / 0x0a = 2
Minor: 0x14 % 0x0a = 0
Aka Version 2.0
Das höhere Byte 0x00
gibt an, mit was die Datei kompatibel ist. Wenn Null, ist es mit MS-DOS (FAT, FAT32, VFAT) kompatibel. Andernfalls wird es durch eine Zuordnung angegeben. Wenn ich zB zip
ohne Optionen auf meinem System verwende, erhalte ich eine, 0x03
die Unix anzeigt. 0x0a
ist NTFS usw.
Version 2.0 zeigt Folgendes an: (4.4.3.2 Aktuelle Mindestfunktionsversionen)
* File is a folder (directory)
* File is compressed using Deflate compression
* File is encrypted using traditional PKWARE encryption
In Ihrer Zip-Datei haben Sie:
bar.odt:
0a00 Version needed to extract.
0000 General Purpose
0000 Compression method
Major: 0x0a / 0x0a = 1
Minor: 0x0a % 0x0a = 0
Aka Version 1.0
Version 1.0 ist einfach der Standardwert.
Dateihierarchie und Mindestversion
Der Grund, warum Sie die Version 1.0
unter Version sehen, die zum Extrahieren benötigt wird, ist, dass Sie tatsächlich den Zip-Header für die Datei sehen mimetype
. Diese Datei wird nicht entleert, sondern ohne Komprimierung gespeichert . Daher benötigen Sie nur die Version 1.0
, um diese Datei zu extrahieren. Dies ist jedoch nicht die Gesamtversion des Archivs. Wenn Sie weiter nach unten schauen, finden Sie Version 2.0, sobald Sie eine mit Deflating gespeicherte Datei finden. Sie können überprüfen, indem Sie z.
hexdump -v -e '/1 "%02x "' bar.odt | grep -o '50 4b 03 04 .\{6\}'
Sollte dir so etwas geben
50 4b 03 04 0a 00
50 4b 03 04 0a 00
...
50 4b 03 04 14 00
50 4b 03 04 14 00
50 4b 03 04 0a 00
50 4b 03 04 14 00
...
Header der zentralen Verzeichnisdatei
Es gibt einige Dateien mit einem erweiterten Header. Sie können diese auflisten, indem Sie:
hexdump -v -e '/1 "%02x "' foo.odt | grep -o '50 4b 01 02.\{16\}'
(Denken Sie daran, umzukehren 50 4b ...
, 02 01 4b 50
wenn hexdump -n 4 foo.odt dies sagt)
Auf diese Weise erhalten Sie in der Regel:
____________ Version required (2.0)
| |
50 4b 01 02 14 00 14 00 00
50 4b 01 02 14 00 14 00 00
50 4b 01 02 14 00 14 00 08
|___|
|
+-------------- Version supported by packing application. v2.0
Auf die zip
erstellte Datei könnte man zB bekommen:
____________ Version required for this file (2.0)
| |
50 4b 01 02 1e 03 14 00 00
|___|
|
+-------------- Version supported by packing
application. v3.0
Allgemeiner Zweck (und anderes in Odt-Dateien gesetztes Flag)
Dies ist eine kleine Flagge. Da Ihre Datei Big-Endian / Motorola ist, lautet die Flagge:
0x0800 = 0000 1000 0000 0000
|
+---------------- 11 => File names and comments MUST be
stored as Utf-8.
Zumindest spart LibreOffice mit verschiedenen Mods weiter.
mimetype
steht immer an erster Stelle und sollte nicht komprimiert werden. Dies soll verschiedenen Softwareprogrammen helfen, die Datei und ihren Inhalt zu identifizieren. Auf diese Weise kann man zB:
$ hexdump -C -s 38 -n 39 foo.odt
00000026 61 70 70 6c 69 63 61 74 69 6f 6e 2f 76 6e 64 2e |application/vnd.|
00000036 6f 61 73 69 73 2e 6f 70 65 6e 64 6f 63 75 6d 65 |oasis.opendocume|
00000046 6e 74 2e 74 65 78 74 |nt.text|
Während zip
normalerweise alle Verzeichnisse gespeichert werden, speichert OO nur ein Verzeichnis, wenn es leer ist. Somit:
Postleitzahl:
Thumbnails/
Thumbnails/thumbnail.png
META-INF/
META-INF/manifest.xml
oo:
Thumbnails/thumbnail.png
META-INF/manifest.xml
Und so weiter ...