Microsoft Compress ist die Bezeichnung zweier früher Komprimierungsformate von Microsoft, die überwiegend für deren eigene Produkte genutzt wurde, um die Größe der Installationsdateien und damit die Anzahl der Disketten zu senken.

Mit diesen Formaten können nur einzelne Dateien komprimiert werden, das im Gegensatz zum späteren CAB-Dateiformat, das auch die Komprimierung mehrerer Dateien und Verzeichnisse unterstützt. Komprimierte Dateien lassen sich in der Regel daran erkennen, dass das letzte Zeichen der Dateierweiterung durch einen Unterstrich oder ein Dollar-Zeichen ersetzt ist (also DATEI.EX_ oder DATEI.EX$ statt DATEI.EXE). Dateien dieser Formate lassen sich mit dem Programm COMPRESS.EXE erstellen, das verschiedenen Produkten (etwa frühen Versionen von Visual C++) beiliegt. Das Entpacken ist ebenso mit dem Programm EXPAND.EXE möglich. (Heutige Versionen von EXPAND.EXE unterstützen diese alten Formate nicht mehr und können ausschließlich Dateien aus CAB-Archiven extrahieren.)

Beide Formate waren ursprünglich undokumentiert, konnten aber durch Reverse Engineering rekonstruiert werden. Für Linux wurde das Paket libmspack entwickelt, das beide Formate entpacken kann.

Das ältere Format wurde erstmals 1990 eingesetzt und ist am magischen Wort SZDD am Dateibeginn erkennbar.

Die Dateistruktur ist sehr einfach: nach dem magischen Wort folgt das Kompressionsformat (nur eins, nämlich A), das letzte Zeichen der Dateierweiterung und die Dateigröße als 32-Bit-Integer. Anschließend folgt unmittelbar der komprimierte Datenstrom, genutzt wird der LZSS-Algorithmus.

Das neuere Format kam erstmals 1993 zum Einsatz und ist am magischen Wort KWAJ am Dateibeginn erkennbar.

Das Dateiformat ist im Gegensatz zum früheren Format wesentlich komplizierter, so wird nach dem magischen Wort der Kompressionsalgorithmus als 16-Bit-Integer angegeben. Das Format unterstützt fünf Kompressionsalgorithmen:

  1. unkomprimiert
  2. unkomprimiert, aber mit dem Wert 0xFF XOR-codiert
  3. LZSS
  4. ein proprietärer Komprimierungsalgorithmus von Microsoft, der LZSS und Huffman kombiniert
  5. CAB

Danach folgt der Offset zum komprimierten Datenstrom als 16-Bit-Integer. Anschließend werden noch optionale Header-Erweiterungen unterstützt, mit denen zusätzliche Metadaten angegeben werden können, z. B. die Dateigröße oder der volle Dateiname.

Bearbeiten