Kompression ausführbarer Programmdateien

Unter Kompression ausführbarer Programmdateien versteht man die Kompression der Programmdaten einer ausführbaren Datei und die Kombination der komprimierten Daten mit einer Dekompressionsroutine zu einer einzigen ausführbaren Datei. Die komprimierten Daten werden mittels der Dekompressionsroutine zur Laufzeit automatisch auf ihre ursprüngliche Größe im Arbeitsspeicher dekomprimiert und die ursprünglichen Programmdaten ausgeführt. Komprimierte ausführbare Programmdateien werden auch als gepackte Programmdateien bezeichnet.

Ziele

Ziele der Komprimierung von ausführbaren Dateien sind verringerte Dateigrößen, um im Rahmen des Verbreitungsmediums zu bleiben (z. B. einer Diskette), und meist kürzere Startzeiten, falls die Dekomprimierung im Arbeitsspeicher stattfindet. Für manche Programmautoren geht es bei der Komprimierung ausführbarer Dateien darum, das Reverse Engineering zu erschweren, indem direktes Disassemblieren behindert, Zeichenketten verborgen und Signaturen verändert werden. Im Falle von Schadprogrammen ist das Ziel oftmals, die Erkennung durch Antivirenprogramme zu verhindern. Dabei wird die Kompression ausführbarer Programmdateien meist mit anderen Methoden der Verschleierung, wie beispielsweise Verschlüsselung, kombiniert. Gepackte Programme ohne weitere Verschleierungsmechanismen werden jedoch häufig von Antivirenprogrammen als solche erkannt, entpackt und überprüft. Manche ältere Antivirenprogramme klassifizieren gepackte Programmdateien generell als Schadprogramme.

Eine gepackte Programmdatei ist für Laien von ihrem ungepackten Original zur Laufzeit kaum zu unterscheiden. In der Regel gilt, dass die gepackten Dateien beim Starten direkt in den Arbeitsspeicher gelangen und keinen freien Speicher im Dateisystem benötigen, um zu starten. Abhängig von den Eigenschaften des Betriebssystems (insbesondere Unterstützung für das NX-Bit) ist es für die Entpackprogramme manchmal erforderlich, temporäre Programmdateien auf dem Datenträger anzulegen, die dann gestartet werden. Bei der Ausführung wird die ursprüngliche Programmdatei automatisch entpackt und ihr dann die Kontrolle übertragen. Bei manchen Packprogrammen, wie beispielsweise UPX mit dem UCL-Algorithmus, erfordern die gepackten Programmdateien auch zur Laufzeit nicht mehr Hauptspeicher als das nicht gepackte Programm.

Eine gepackte Programmdatei benötigt weniger Speicherplatz auf dem Datenträger, weniger Zeit, um über das Netzwerk geladen und in den Hauptspeicher zu übertragen zu werden, aber zusätzliche Zeit, um die Programmdaten vor deren Ausführung zu entpacken. Aufgrund der Geschwindigkeit heutiger Prozessoren und der damit verbundenen schnellen Dekompression überwiegen meist die Vorteile durch die geringere Dateigröße. Die Verwendung gepackter Programmdateien geht jedoch zurück, da der Vorteil bei der Dateigröße heutzutage bei steigenden Speicherkapazitäten und schnellerer Netzwerke an Bedeutung verliert.

Einen Sonderfall von gepackten ausführbaren Dateien stellen die Selbstextrahierenden Archive dar. Hier werden die gepackten Dateien ebenfalls nicht über ein externes Dekompressionsprogramm auf den Datenträger entpackt, sondern intern durch die vorangestellte Entpackroutine. Ziel der Komprimierung ist meist eine kompakte Zusammenstellung eines aus mehreren, nicht notwendigerweise ausführbaren Dateien bestehenden Installationspakets. Oftmals ist der Entpackvorgang und die Übertragung der Kontrolle an ein Einrichtungsprogramm aus dem Installationspaket für den Benutzer erkennbar.

Eine weitere Sonderstellung nehmen Binder (Wrapper-Programme) ein. Hierbei handelt es sich um Anwendungsprogramme, die mehrere ausführbare Programmdateien komprimieren und zu einer ausführbaren Datei miteinander verbinden. Beim Start dieser Datei können dann mehrere Programmdateien, die in der Datei enthalten sind und zur Laufzeit entpackt werden, gleichzeitig zur Ausführung gebracht werden. Binder-Programme werden oft verwendet, um Nutzprogramme mit Schadprogrammen zu verbinden, so dass beim Start des Nutzprogrammes unbemerkt auch das Schadprogramm gestartet wird.

Extrembeispiele selbstentpackender Programmdateien findet man in der Demoszene. Manche Kompressoren wie MuCruncher, kkrunchy und 624 wurden für Demos mit einer Größenbegrenzung (in der Größenordnung weniger Kilobytes) entworfen. Die Spezialisierung dieser Kompressoren geht so weit, dass diese aufgrund der Kompressionszeit und des Speicherverbrauches für sehr viel größere Dateien unbrauchbar sind.

Siehe auch