Wieso starten ZIP Datein immer mit 50 4B im hex Editor?

2 Antworten

Die Prämisse ist falsch: sie starten nicht immer mit diesen zwei Bytes ("PK" in ASCII). ZIP-Dateien werden nämlich von hinten gelesen (wo das Central Directory steht), nicht von vorn, und können vor dem eigentlichen Inhalt beliebige Daten enthalten. So war es auch möglich, selbstextrahierende ZIPs zu bauen. Die fangen dann z.B. mit "MZ" an.

Warum aber diese zwei Bytes "PK"? Weil der Erfinder (Phil Katz) diese zwei Bytes als "Signatur" verwendet hat. Jeder Local Header - das ist die Datenstruktur, die jeweils vor den eigentlichen archivierten Dateien steht - fängt damit an. Wirklich nötig wäre das nicht, kann aber helfen, beschädigte Dateien halbwegs wiederherzustellen.

Wer Details wissen will, liest APPNOTE.TXT.


Krabat693  02.11.2023, 19:10
und können vor dem eigentlichen Inhalt beliebige Daten enthalten. So war es auch möglich, selbstextrahierende ZIPs zu bauen.

Oder man baut sich einen zip Container der auch als gültige PNG Datei funktioniert ¯\_(ツ)_/¯

1
jo135  02.11.2023, 19:12
@Krabat693

Ja, da kann man viele lustige Sachen machen (hier ein paar). Das Format ist eigentlich bis heute sehr schlampig definiert und hat viele Lücken - hat sich aber trotzdem über Jahrzehnte als de-facto-Standard etabliert und gehalten.

1
Krabat693  02.11.2023, 19:18
@jo135

Naja das Format hat eben getan was es sollte, nämlich Disketten und Lebenszeit gespart.

Und was danach kam ¯\_(ツ)_/¯ warum sollte man auf ein besseres kompressions und Containerformat umstellen wenn das bestehende doch funktioniert.

0
Commodore64  02.11.2023, 20:10

Korrekt! Zur Ergänzung:

Die meisten Dateien haben einen Header damit eine Anwendung oder das Betriebssystem erkennen können, um was für eine Datei es sich handelt.

So kann dann Word, Excel, Paint oder was auch immer sehr schnell feststellen, ob die mit der Datei die man damit öffnen will umgehen kann und wie die verarbeitet werden muss.

Windows guckt auf die Dateiendung, den Suffix (z.B. .EXE), die meisten anderen Betriebssysteme können das zwar auch, sind aber nicht auf Dateiendungen angewiesen. Die schauen schnell auf die ersten paar Zeichen im sogenannten Header und wissen dann, was das ist.

Und bei den ZIP Dateien hat halt der "Macher" PK gewählt. PNG Grafiken fangen mit

 (decimal)              137  80  78  71  13  10  26  10
 (hexadecimal)           89  50  4e  47  0d  0a  1a  0a
 (ASCII C notation)    \211   P   N   G  \r  \n \032 \n

an. Da steht also direkt "PNG" vorne drin. Das allererste Zeichen davor verhindert, dass nicht aus versehen eine Text-Datei die zufällig mit PNG anfängt für eine Bilddatei gehalten wird.

Es gibt keine Vorschrift wie ein Header aus zu sehen hat und ob es überhaupt einen gibt. Die meisten gängigen Dateien haben aber einen.

0

Schau mal hier: https://en.wikipedia.org/wiki/List_of_file_signatures

Das ist die Datei-Signatur von ZIP Dateien, an der andere Programme erkennen können, dass es sich um ein ZIP-Archiv handelt und damit die entsprechende Programm-Bibliothek aufrufen, um die Datei zu entpacken. Viele Dateiformate basieren heutzutage auf ZIP Containern in denen die eigentlichen Anwendungsdaten verpackt sind (unter anderem alle aktuellen Microsoft Office, LibreOffice und Openoffice Dateien).