Ausführbare Komprimierung - Executable compression
Ausführbare Komprimierung ist jedes Mittel zum Komprimieren einer ausführbaren Datei und Kombinieren der komprimierten Daten mit Dekomprimierungscode zu einer einzigen ausführbaren Datei. Wenn diese komprimierte ausführbare Datei ausgeführt wird, erstellt der Dekomprimierungscode den ursprünglichen Code aus dem komprimierten Code neu, bevor er ausgeführt wird. In den meisten Fällen geschieht dies transparent, sodass die komprimierte ausführbare Datei genauso wie das Original verwendet werden kann. Ausführbare Kompressoren werden oft als "Laufzeitpacker", "Softwarepacker", "Softwareprotektoren" (oder sogar " polymorphe Packer " und " Verschleierungswerkzeuge ") bezeichnet.
Eine komprimierte ausführbare Datei kann als selbstextrahierendes Archiv betrachtet werden , bei dem eine komprimierte ausführbare Datei zusammen mit dem entsprechenden Dekomprimierungscode in eine ausführbare Datei gepackt wird. Einige komprimierte ausführbare Dateien können dekomprimiert werden, um die ursprüngliche Programmdatei zu rekonstruieren, ohne direkt ausgeführt zu werden. Zwei Programme, die dazu verwendet werden können, sind CUP386 und UNP.
Die meisten komprimierten ausführbaren Dateien dekomprimieren den ursprünglichen Code im Speicher und die meisten benötigen etwas mehr Speicher zum Ausführen (da sie den Dekomprimierungscode, die komprimierten Daten und den dekomprimierten Code speichern müssen). Darüber hinaus haben einige komprimierte ausführbare Dateien zusätzliche Anforderungen, beispielsweise solche, die die dekomprimierte ausführbare Datei in das Dateisystem schreiben, bevor sie ausgeführt wird.
Ausführbare Komprimierung ist nicht auf binäre ausführbare Dateien beschränkt, sondern kann auch auf Skripte wie JavaScript angewendet werden . Da die meisten Skriptsprachen darauf ausgelegt sind, mit menschenlesbarem Code zu arbeiten , der eine hohe Redundanz aufweist , kann die Komprimierung sehr effektiv und so einfach sein wie das Ersetzen langer Namen, die zur Identifizierung von Variablen und Funktionen verwendet werden, durch kürzere Versionen und/oder das Entfernen von Leerzeichen .
Vorteile und Nachteile
Software- Distributoren verwenden ausführbare Komprimierung aus einer Vielzahl von Gründen, hauptsächlich um den Sekundärspeicherbedarf ihrer Software zu reduzieren ; Da ausführbare Komprimierer speziell für die Komprimierung von ausführbarem Code entwickelt wurden, erreichen sie oft ein besseres Komprimierungsverhältnis als Standard -Datenkomprimierungseinrichtungen wie gzip , zip oder bzip2 . Dies ermöglicht es Software-Distributoren, innerhalb der Beschränkungen ihrer gewählten Distributionsmedien (wie CD-ROM , DVD-ROM oder Diskette ) zu bleiben oder die Zeit und Bandbreite zu reduzieren, die Kunden benötigen, um auf Software zuzugreifen, die über das Internet vertrieben wird .
Ausführbare Komprimierung wird auch häufig verwendet, um Reverse Engineering zu verhindern oder den Inhalt der ausführbaren Datei durch proprietäre Methoden der Komprimierung und/oder zusätzliche Verschlüsselung zu verschleiern (z. B. um das Vorhandensein von Malware vor Antiviren-Scannern zu verbergen ) . Ausführbare Komprimierung kann verwendet werden, um eine direkte Disassemblierung zu verhindern , Zeichenfolgenliterale zu maskieren und Signaturen zu ändern. Auch wenn dies die Möglichkeit des Reverse Engineering nicht ausschließt, kann es den Prozess kostspieliger machen.
Eine komprimierte ausführbare Datei benötigt weniger Speicherplatz im Dateisystem und somit weniger Zeit, um Daten aus dem Dateisystem in den Speicher zu übertragen. Andererseits erfordert es einige Zeit, die Daten zu dekomprimieren, bevor die Ausführung beginnt. Allerdings hat die Geschwindigkeit verschiedener Speichermedien nicht mit den durchschnittlichen Prozessorgeschwindigkeiten Schritt gehalten, sodass der Speicher sehr oft der Flaschenhals ist. Daher wird die komprimierte ausführbare Datei auf den meisten gängigen Systemen schneller geladen. Auf modernen Desktop-Computern ist dies selten bemerkbar, es sei denn, die ausführbare Datei ist ungewöhnlich groß, sodass die Ladegeschwindigkeit kein Hauptgrund für oder gegen das Komprimieren einer ausführbaren Datei ist.
Auf Betriebssystemen, die ausführbare Images bei Bedarf von der Festplatte lesen (siehe virtueller Speicher ), machen komprimierte ausführbare Dateien diesen Prozess weniger effizient. Der Dekompressor-Stub weist einen Speicherblock zu, um die dekomprimierten Daten zu halten, die zugewiesen bleiben, solange die ausführbare Datei geladen bleibt, unabhängig davon, ob sie verwendet wird oder nicht, und die ganze Zeit mit anderen Anwendungen um Speicherressourcen konkurriert. Wenn das Betriebssystem eine Auslagerungsdatei verwendet, müssen die dekomprimierten Daten in diese geschrieben werden, um den Speicher freizugeben, anstatt einfach nicht verwendete Datenblöcke zu verwerfen und sie bei Bedarf erneut aus dem ausführbaren Image zu laden. Dies fällt normalerweise nicht auf, wird jedoch zum Problem, wenn eine ausführbare Datei mehr als einmal gleichzeitig geladen wird – das Betriebssystem kann bereits geladene Datenblöcke nicht wiederverwenden, die Daten müssen in einen neuen Speicherblock dekomprimiert werden und werden unabhängig voneinander ausgetauscht werden, wenn sie nicht verwendet werden. Aufgrund des zusätzlichen Speicher- und Zeitbedarfs muss sorgfältig abgewogen werden, ob ausführbare Dateien, die typischerweise mehr als einmal gleichzeitig ausgeführt werden, komprimiert werden sollen.
Ein weiterer Nachteil besteht darin, dass einige Dienstprogramme Laufzeitbibliotheksabhängigkeiten nicht mehr erkennen können , da nur der statisch verknüpfte Extraktor-Stub sichtbar ist.
Außerdem melden einige ältere Virenscanner einfach alle komprimierten ausführbaren Dateien als Viren, da die Dekompressor-Stubs einige Eigenschaften mit diesen teilen. Die meisten modernen Virenscanner können mehrere verschiedene ausführbare Komprimierungsschichten entpacken, um die tatsächliche ausführbare Datei im Inneren zu überprüfen, aber einige gängige Antiviren- und Anti-Malware-Scanner hatten Probleme mit falsch positiven Alarmen bei komprimierten ausführbaren Dateien. In einem Versuch , das Problem zu lösen , Malware mit Hilfe von verschleierten Laufzeitpackern der IEEE Industry Connections Security Group ein eingeführten Software Markierungsmittel - System.
Ausführbare Komprimierung war früher beliebter, als Computer auf die Speicherkapazität von Disketten beschränkt waren , die sowohl langsame als auch Medien mit geringer Kapazität waren, und kleine Festplatten ; Es ermöglichte dem Computer, mehr Software auf demselben Speicherplatz zu speichern, ohne jedes Mal, wenn der Benutzer die Software verwenden wollte, eine Archivdatei manuell entpacken zu müssen. Die ausführbare Komprimierung hat jedoch aufgrund der erhöhten Speicherkapazität auf Computern an Popularität verloren. Es hat seine Verwendung in der Demoszene, wo Demos innerhalb einer Größenbeschränkung von 64 Kilobyte bleiben müssen, um an einigen Wettbewerben teilzunehmen. Nur sehr ausgeklügelte Komprimierungsformate, die die Ladezeit verlängern, halten eine ausführbare Datei klein genug, um an diesen Wettbewerben teilzunehmen.
Liste der ausführbaren Packer
Ausführbare CP/M- und MSX-DOS-Datei
Bekannte ausführbare Kompressoren für CP/M / MSX-DOS .COM-Dateien :
- PMexe (seit 1990, geschrieben von Yoshihiko Mino, PMARC.COM+PMEXE.CPM)
Ausführbare DOS-Datei
Bekannte ausführbare Komprimierer für ausführbare DOS- Dateien ( .COM oder .EXE ):
- Realia Spacemaker (seit 1982, geschrieben von Robert BK Dewar , SM.COM, Signatur "MEMORY$")
- Microsoft EXEPACK (seit 1985, geschrieben von Reuben Borman , EXEPACK.EXE, LINK.EXE /E[XEPACK], Signatur "RB")
- LZEXE (seit 1989, geschrieben von Fabrice Bellard , LZEXE.EXE)
- PKWare PKLite (seit 1990, geschrieben von Phil Katz , PKLITE.EXE)
- DIET (seit 1991, geschrieben von Teddy Matsumoto , DIET.EXE)
- TINYPROG (TINYPROG.EXE)
- RJS Software RJCRUSH (seit 1994, geschrieben von Roland Skinner, RJCRUSH.EXE)
- XPA (seit 1995, geschrieben von JauMing Tseng, XPA.EXE)
- Ibsen Software aPACK (seit 1997, geschrieben von Jørgen Ibsen, APACK.EXE)
- UPX (seit 1998, geschrieben von Markus FXJ Oberhumer und László Molnár)
- 32LiTE (seit 1998, geschrieben von Oleg Prokhorov, 32LITE.EXE)
- Knowledge Dynamics LZW Kompressor
- WWpack (geschrieben von Piotr Warezak und Rafal Wierzbicki, WWPACK.EXE)
- 624 (nur für .COM-Dateien kleiner als 25 KB, verwendet LZW )
- AINEXE
- AvPack
- KomPAck
- HASP-Umschlag
- LGLZ
- PMWLITE
- ProPack
- UCEXE
- WDOSX
- XE
- XPack
Ausführbare OS/2-Datei
Bekannte ausführbare Kompressoren unter OS/2 :
- NeLite
- LxLite
Neue ausführbare Datei
Bekannte ausführbare Kompressoren für neue ausführbare Dateien :
- PackWin
- PKWare PKLite (ab Version 2.01)
- WinLite
Tragbare ausführbare Datei
Bekannte ausführbare Kompressoren für tragbare ausführbare Dateien :
Hinweis: Clients in Lila befinden sich nicht mehr in der Entwicklung.
| Name | Neuester Stall | Softwarelizenz | x86-64- Unterstützung |
|---|---|---|---|
| 32Lite | |||
| Alienyze | 1.4 (17. August 2020 ) | Proprietär | Nein |
| ANDpakk2 | |||
| Gürteltier | 9,62 (7. Juni 2013 ) | Proprietär | Jawohl |
| ASPack | 2,40 (7. Dezember 2018 ) | Proprietär | Jawohl |
| ASPR (ASProtect) | 2,78 (7. Dezember 2018 ) | Proprietär | Jawohl |
| BeRoEXEPacker | |||
| BIN-Krypter | |||
| BoxedApp Packer | 3.3 (26. Juli 2015 ) | Proprietär | Jawohl |
| CExe | 1.0b (20. Juli 2001 ) | GPL | Nein |
| Crinkler | 2.2 (15. Juni 2019 ) | Freeware | Jawohl |
| Punktbündel | 1.3 (4. April 2013 ) | Proprietär | Jawohl |
| Enigma-Beschützer | 6,60 (21.08.2019 ) | Proprietär | Jawohl |
| Virtuelle Enigma-Box | 9.40 (10. Oktober 2019 ) | Proprietär | Jawohl |
| exe32pack | |||
| EXE-Paket | 3.11 (7. Januar 2011 ) | Proprietär | ? |
| EXECryptor | |||
| EXE-Stealth | 4.14 (29. Juni 2011 ) | Proprietär | ? |
| eXPressor | 1.8.0.1 (14. Januar 2010 ) | Proprietär | ? |
| FSG | 2.0 (24. Mai 2004 ) | Freeware | Nein |
| krunchy src | 0.23a4 (Unbekannt) | Gemeinfrei | Nein |
| MIAUEN | 1.1 (Unbekannt) | Freeware | Nein |
| MPRESS | 2.19 (2. Januar 2012 ) | Freeware | Jawohl |
| MuCruncher | |||
| NeoLite | |||
| .netshrink | 2.7 (2. Juli 2016 ) | Proprietär | Jawohl |
| NsPack | |||
| Obsidium | 1.6 (11. April 2017 ) | Proprietär | Jawohl |
| PECompact | |||
| PELock | 2.06 (15. August 2016 ) | Proprietär | Nein |
| PEPack | |||
| PESpin | 1.33 (3. Mai 2011 ) | Freeware | Jawohl |
| Zierlich | 2.4 (22.09.2016 ) | Freeware | Nein |
| PKLite32 | |||
| RLPack Basic | 1.21 (31. Oktober 2008 ) | GPL | Nein |
| Shrinker32 | |||
| Smart Packer Pro X | 2.0.0.1 (3. Juni 2019 ) | Proprietär | Jawohl |
| Themida/WinLicense | 3.0 (24. Oktober 2019 ) | Proprietär | Jawohl |
| Umpacken | |||
| UPX | 3,96 (23. Januar 2020 ) | GPL | Experimental- |
| VMProtect | 3.4 (3. August 2019 ) | Proprietär | Jawohl |
| WWPack32 | |||
| XComp/XPack | 0,98 (18. Februar 2007 ) | Freeware | Nein |
| Yodas Krypta | |||
| YZPack |
ELF-Dateien
Bekannte ausführbare Kompressoren für ELF- Dateien:
- gzexe (verwendet einen Shell-Skript- Stub und gzip , funktioniert auf den meisten Unix-ähnlichen Systemen)
- HASP-Umschlag
- UPX
- 624 (für Linux/386)
CLI-Assembly-Dateien
Bekannte ausführbare Kompressoren für CLI-Assembly- Dateien:
- .NETZ
- NsPack
- Mpress
- HASP-Umschlag
- .netshrink
- Punktbündel
- Exepack.NET
- DotProtect: Kommerzieller Protektor/Packer für .net und Mono. Verfügt über Online-Überprüfungen und "Industriestandard-Verschlüsselung".
Mac OS Classic-Anwendungsdateien
Bekannte ausführbare Komprimierer für Mac OS Classic- Anwendungsdateien:
- Anwendung VISE
- StuffIt InstallerMaker
Mach-O (Apple Mac OS X)-Dateien
Bekannte ausführbare Kompressoren für Mach-O (Apple Mac OS X) Dateien:
- HASP-Umschlag
- UPX
- VMProtect
Commodore 64 und VIC 20
Bekannte ausführbare Kompressoren für ausführbare Dateien auf dem Commodore 64 und VIC 20 :
- PuCrunch
- Exomizer
- ByteBoozer
Kommodore Amiga
Bekannte ausführbare Kompressoren für ausführbare Dateien der Commodore Amiga- Serie:
- Kraftpaket
- Titanics Cruncher
- implodieren
- TNM-Cruncher
- Schrumpfer
- PackFeuer
Java
Bekannte ausführbare Kompressoren für Java :
JAR- Dateien:
- HASP-Umschlag
- pack200
- ProGuard
WAR- Dateien:
- HASP-Umschlag
JavaScript-Skripte
Es gibt zwei Arten der Komprimierung, die auf JavaScript- Skripte angewendet werden können :
- Reduzieren Sie die Redundanz im Skript (indem Sie Kommentare, Leerzeichen entfernen und Variablen- und Funktionsnamen kürzen). Dies ändert nichts am Verhalten des Skripts.
- Komprimieren Sie das ursprüngliche Skript und erstellen Sie ein neues Skript, das Dekomprimierungscode und komprimierte Daten enthält. Dies ähnelt der Komprimierung binärer ausführbarer Dateien.
Selbstdekomprimierende Kompressoren
Diese komprimieren das ursprüngliche Skript und geben ein neues Skript aus, das einen Dekomprimierer und komprimierte Daten enthält.
- JsSfx
- Packify
Redundanzreduzierende Kompressoren
Diese entfernen Leerzeichen, entfernen Kommentare und kürzen Variablen- und Funktionsnamen, ändern jedoch nicht das Verhalten des Skripts.
- Packer
- YUI-Kompressor
- Schrumpfsicher
- JSMin
Siehe auch
- Datenkompression
- Festplattenkomprimierung
- RAM-Komprimierung
- Ausführbar
- Kolmogorov-Komplexität
- Selbstextrahierendes Archiv