- Exe-Packer
-
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.
Ziel 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 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 soweit, dass diese aufgrund der Kompressionszeit und des Speicherverbrauches für sehr viel größere Dateien unbrauchbar sind.
Inhaltsverzeichnis
Liste von Packprogrammen
PE-Format (32-bit), für Microsoft Windows-Programmdateien (Win9x, WinNT, WinXP)
- ANDpakk2 v0.18
- ASPack v2.12 - Proprietär
- BeRoEXEPacker
- CExe v1.0
- Crinkler v1.1
- exe32pack v1.42
- EXECryptor - Packer und Obfuscator
- eXPressor v1.3
- FSG v2.0
- kkrunchy v0.23
- MEW v1.1 SE
- NeoLite v2.0
- PECompact v2.98.4 - Proprietär
- PESpin v1.3
- PEtite v2.2
- PKLite32 v1.1
- Upack v0.399f - Freeware
- UPX v3.03 - Freie Software
- WWPack32 v1.12
- 32Lite v0.3
- NsPack v3.xx - .NET fähig
- .netshrink - nur für Dateien mit .NET Erweiterung gedacht
COM/EXE/SYS-Format, für DOS-Programm- oder Treiberdateien (MsDos v5.0)
- 624 v1.01 (für COM-Dateien < 25KB, nutzt den LZW-Algorithmus)
- LZEXE v1.00 und Pklite v2.01 (die Urväter)
- ComPAck v5.1
- Diet v1.45f
- AvPack v1.22
- ProPack v2.19
- WWPack v3.05b5
- XPack v1.67r
- aPack v0.99 (keines ist besser)
- 32LiTE v0.2 (ähnlich UPX, unterstützt verschiedene DOS-Extender, basiert aber auf aplib)
- UPX
Formate anderer ausführbarer Programmdateien
- 624 - für Executable and Linking Format-Binärdateien unter Linux/i386
- gzexe - benutzt ein Shell-Skript in Kombination mit gzip und läuft auf den meisten Unix-Derivaten
- PuCrunch - für Commodore 64, 16 und VIC 20.
- UPX - unterstützt auch Linux/i386 binaries wie auch einige weniger bekannte Plattformen
Liste von Entpackern und Identifiern
- PEiD
- CUP386 (generischer Entpacker/Debugger, Freeware)
- UNP (spezifischer/generischer Entpacker, Cardware)
- IUP (generischer Entpacker, public domain mit .ASM-Quelle)
- RL!Unpackers (spezifische Entpacker, u.a. fuer upack)
Siehe auch
Wikimedia Foundation.