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 )  ( 2020-08-17 ) Proprietär Nein
ANDpakk2
Gürteltier 9,62 (7. Juni 2013 )  ( 2013-06-07 ) Proprietär Jawohl
ASPack 2,40 (7. Dezember 2018 )  ( 2018-12-07 ) Proprietär Jawohl
ASPR (ASProtect) 2,78 (7. Dezember 2018 )  ( 2018-12-07 ) Proprietär Jawohl
BeRoEXEPacker
BIN-Krypter
BoxedApp Packer 3.3 (26. Juli 2015 )  ( 2015-07-26 ) Proprietär Jawohl
CExe 1.0b (20. Juli 2001 )  ( 2001-07-20 ) GPL Nein
Crinkler 2.2 (15. Juni 2019 )  ( 2019-06-15 ) Freeware Jawohl
Punktbündel 1.3 (4. April 2013 )  ( 2013-04-04 ) Proprietär Jawohl
Enigma-Beschützer 6,60 (21.08.2019 )  ( 2019-08-21 ) Proprietär Jawohl
Virtuelle Enigma-Box 9.40 (10. Oktober 2019 )  ( 2019-10-10 ) Proprietär Jawohl
exe32pack
EXE-Paket 3.11 (7. Januar 2011 )  ( 2011-01-07 ) Proprietär ?
EXECryptor
EXE-Stealth 4.14 (29. Juni 2011 )  ( 2011-06-29 ) Proprietär ?
eXPressor 1.8.0.1 (14. Januar 2010 )  ( 2010-01-14 ) Proprietär ?
FSG 2.0 (24. Mai 2004 )  ( 2004-05-24 ) Freeware Nein
krunchy src 0.23a4 (Unbekannt) Gemeinfrei Nein
MIAUEN 1.1 (Unbekannt) Freeware Nein
MPRESS 2.19 (2. Januar 2012 )  ( 2012-01-02 ) Freeware Jawohl
MuCruncher
NeoLite
.netshrink 2.7 (2. Juli 2016 )  ( 2016-07-02 ) Proprietär Jawohl
NsPack
Obsidium 1.6 (11. April 2017 )  ( 2017-04-11 ) Proprietär Jawohl
PECompact
PELock 2.06 (15. August 2016 )  ( 2016-08-15 ) Proprietär Nein
PEPack
PESpin 1.33 (3. Mai 2011 )  ( 2011-05-03 ) Freeware Jawohl
Zierlich 2.4 (22.09.2016 )  ( 2016-09-22 ) Freeware Nein
PKLite32
RLPack Basic 1.21 (31. Oktober 2008 )  ( 2008-10-31 ) GPL Nein
Shrinker32
Smart Packer Pro X 2.0.0.1 (3. Juni 2019 )  ( 2019-06-03 ) Proprietär Jawohl
Themida/WinLicense 3.0 (24. Oktober 2019 )  ( 24.10.2019 ) Proprietär Jawohl
Umpacken
UPX 3,96 (23. Januar 2020 )  ( 2020-01-23 ) GPL Experimental-
VMProtect 3.4 (3. August 2019 )  ( 2019-08-03 ) Proprietär Jawohl
WWPack32
XComp/XPack 0,98 (18. Februar 2007 )  ( 2007-02-18 ) 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:

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

Verweise