Eksekverbar komprimering - Executable compression

Eksekverbar komprimering er ethvert middel til at komprimere en eksekverbar fil og kombinere de komprimerede data med dekomprimeringskode til en enkelt eksekverbar fil. Når denne komprimerede eksekverbare fil udføres, genskaber dekomprimeringskoden den originale kode fra den komprimerede kode, før den udføres. I de fleste tilfælde sker dette transparent, så den komprimerede eksekverbare fil kan bruges på nøjagtig samme måde som originalen. Eksekverbare kompressorer omtales ofte som "runtime packers", "software packers", "software protectors" (eller endda " polymorfe packers " og " obfuscating tools ").

En komprimeret eksekverbar fil kan betragtes som et selvudpakkende arkiv , hvor en komprimeret eksekverbar pakke sammen med den relevante dekomprimeringskode i en eksekverbar fil. Nogle komprimerede eksekverbare filer kan dekomprimeres for at rekonstruere den originale programfil uden at blive eksekveret direkte. To programmer, der kan bruges til at gøre dette, er CUP386 og UNP.

De fleste komprimerede eksekverbare filer dekomprimerer den originale kode i hukommelsen, og de fleste kræver lidt mere hukommelse for at køre (fordi de skal gemme dekomprimeringskoden, de komprimerede data og den dekomprimerede kode). Desuden har nogle komprimerede eksekverbare filer yderligere krav, f.eks. Dem, der skriver den dekomprimerede eksekverbare fil til filsystemet, før de udføres.

Eksekverbar komprimering er ikke begrænset til binære eksekverbare filer, men kan også anvendes på scripts, f.eks. JavaScript . Fordi de fleste scriptsprog er designet til at arbejde på mennesker, der kan læses af kode , som har en høj redundans , kan komprimering være meget effektiv og lige så simpel som at erstatte lange navne, der bruges til at identificere variabler og funktioner med kortere versioner og/eller fjerne white-space .

Fordele og ulemper

Software -distributører bruger eksekverbar komprimering af forskellige årsager, primært for at reducere de sekundære lagerkrav til deres software; da eksekverbare kompressorer er specielt designet til at komprimere eksekverbar kode, opnår de ofte et bedre komprimeringsforhold end standard datakomprimeringsfaciliteter såsom gzip , zip eller bzip2 . Dette gør det muligt for softwaredistributører at forblive inden for begrænsningerne for deres valgte distributionsmedier (f.eks. Cd-rom , dvd-rom eller diskette ) eller reducere den tid og båndbredde, som kunderne kræver for at få adgang til software, der distribueres via internettet .

Eksekverbar komprimering bruges også ofte til at afskrække reverse engineering eller til at skjule indholdet i den eksekverbare (f.eks. For at skjule tilstedeværelsen af malware fra antivirusscannere ) ved hjælp af proprietære metoder til komprimering og/eller tilføjet kryptering . Eksekverbar komprimering kan bruges til at forhindre direkte adskillelse , maskere strenglitteraler og ændre signaturer. Selvom dette ikke eliminerer chancen for reverse engineering, kan det gøre processen mere kostbar.

En komprimeret eksekverbar fil kræver mindre lagerplads i filsystemet, og dermed mindre tid til at overføre data fra filsystemet til hukommelsen. På den anden side kræver det noget tid at dekomprimere dataene, før udførelsen begynder. Hastigheden på forskellige lagermedier har dog ikke fulgt med de gennemsnitlige processorhastigheder, så opbevaringen er meget ofte flaskehalsen. Således indlæses den komprimerede eksekverbare hurtigere på de fleste almindelige systemer. På moderne stationære computere er dette sjældent mærkbart, medmindre eksekverbarheden er usædvanligt stor, så indlæsningshastighed er ikke en primær årsag til eller imod komprimering af en eksekverbar.

På operativsystemer, der læser eksekverbare billeder på forespørgsel fra disken (se virtuel hukommelse ), gør komprimerede eksekverbare filer denne proces mindre effektiv. Dekompressorstubben tildeler en hukommelsesblok til at holde dekomprimerede data, der forbliver allokeret, så længe den eksekverbare forbliver indlæst, uanset om den bruges eller ej, og konkurrerer om hukommelsesressourcer med andre applikationer hele tiden. Hvis operativsystemet bruger en swap -fil, skal dekomprimerede data skrives til den for at frigøre hukommelsen i stedet for blot at kassere ubrugte datablokke og genindlæse dem fra det eksekverbare billede, hvis det er nødvendigt igen. Dette er normalt ikke mærkbart, men det bliver et problem, når en eksekverbar indlæses mere end én gang på samme tid - operativsystemet kan ikke genbruge datablokke, det allerede har indlæst, dataene skal dekomprimeres til en ny hukommelsesblok og vil udskiftes uafhængigt, hvis det ikke bruges. De ekstra krav til opbevaring og tid betyder, at det skal vejes omhyggeligt, om eksekverbare filer, der typisk køres mere end én gang på samme tid, skal komprimeres.

En anden ulempe er, at nogle hjælpeprogrammer ikke længere kan identificere bibliotekafhængigheder i løbetid , da kun den statisk linkede ekstraktionsstub er synlig.

Nogle ældre virusscannere rapporterer også simpelthen alle komprimerede eksekverbare filer som vira, fordi dekompressorstubberne deler nogle karakteristika med dem. De fleste moderne virusscannere kan pakke flere forskellige eksekverbare komprimeringslag ud for at kontrollere den faktiske eksekverbare inderside, men nogle populære antivirus- og anti-malware-scannere har haft problemer med falske positive alarmer på komprimerede eksekverbare filer. I et forsøg på at løse problemet med malware tilsløret ved hjælp af runtime -pakker har IEEE Industry Connections Security Group introduceret et software taggant -system.

Eksekverbar komprimering plejede at være mere populær, når computere var begrænset til lagerkapaciteten på disketter , som både var langsomme og lavkapacitetsmedier og små harddiske ; det gav computeren mulighed for at gemme mere software i den samme mængde plads, uden ulejligheden ved manuelt at skulle pakke en arkivfil ud hver gang brugeren ønskede at bruge softwaren. Imidlertid er eksekverbar komprimering blevet mindre populær på grund af øget lagerkapacitet på computere. Det har sin anvendelse i demoscenen, hvor demoer skal holde sig inden for en størrelsesgrænse som 64 kilobytes for at deltage i nogle konkurrencer. Kun meget sofistikerede kompressionsformater, der øger belastningstiden, holder en eksekverbar lille nok til at deltage i disse konkurrencer.

Liste over eksekverbare pakkere

CP/M og MSX-DOS eksekverbar

Kendte eksekverbare kompressorer til CP / M / MSX-DOS .COM-filer :

  • PMexe (siden 1990, skrevet af Yoshihiko Mino, PMARC.COM+PMEXE.CPM)

DOS eksekverbar

Kendte eksekverbare kompressorer til DOS -eksekverbare filer ( .COM eller .EXE ):

  • Realia Spacemaker (siden 1982, skrevet af Robert BK Dewar , SM.COM, underskrift "MEMORY $")
  • Microsoft EXEPACK (siden 1985, skrevet af Reuben Borman , EXEPACK.EXE, LINK.EXE /E [XEPACK], signatur "RB")
  • LZEXE (siden 1989, skrevet af Fabrice Bellard , LZEXE.EXE)
  • PKWare PKLite (siden 1990, skrevet af Phil Katz , PKLITE.EXE)
  • DIET (siden 1991, skrevet af Teddy Matsumoto , DIET.EXE)
  • TINYPROG (TINYPROG.EXE)
  • RJS Software RJCRUSH (siden 1994, skrevet af Roland Skinner, RJCRUSH.EXE)
  • XPA (siden 1995, skrevet af JauMing Tseng, XPA.EXE)
  • Ibsen Software aPACK (siden 1997, skrevet af Jørgen Ibsen, APACK.EXE)
  • UPX (siden 1998, skrevet af Markus FXJ Oberhumer og László Molnár)
  • 32LiTE (siden 1998, skrevet af Oleg Prokhorov, 32LITE.EXE)
  • Knowledge Dynamics LZW Compressor
  • WWpack (skrevet af Piotr Warezak og Rafal Wierzbicki, WWPACK.EXE)
  • 624 (kun for .COM -filer mindre end 25 KB, bruger LZW )
  • AINEXE
  • AvPack
  • KOMPAK
  • HASP -konvolut
  • LGLZ
  • PMWLITE
  • ProPack
  • UCEXE
  • WDOSX
  • XE
  • XPack

OS/2 eksekverbar

Kendte eksekverbare kompressorer under OS/2 :

  • NeLite
  • LxLite

Ny eksekverbar

Kendte eksekverbare kompressorer til New Executables :

  • PackWin
  • PKWare PKLite (fra version 2.01)
  • WinLite

Bærbar eksekverbar

Kendte eksekverbare kompressorer til bærbare eksekverbare :

Bemærk: Klienter i lilla er ikke længere under udvikling.

Navn Seneste stabil Softwarelicens x86-64 support
32Lite
Alienyze 1.4 (17. august 2020 )  ( 2020-08-17 ) Proprietære Ingen
ANDpakk2
Armadillo 9,62 (7. juni 2013 )  ( 2013-06-07 ) Proprietære Ja
ASPack 2.40 (7. december 2018 )  ( 2018-12-07 ) Proprietære Ja
ASPR (ASProtect) 2,78 (7. december 2018 )  ( 2018-12-07 ) Proprietære Ja
BeRoEXEPacker
BIN-krypter
BoxedApp Packer 3.3 (26. juli 2015 )  ( 2015-07-26 ) Proprietære Ja
CExe 1.0b (20. juli 2001 )  ( 2001-07-20 ) GPL Ingen
Crinkler 2.2 (15. juni 2019 )  ( 2019-06-15 ) Freeware Ja
dotBundle 1.3 (4. april 2013 )  ( 2013-04-04 ) Proprietære Ja
Enigma Protector 6.60 (21. august 2019 )  ( 2019-08-21 ) Proprietære Ja
Enigma Virtual Box 9.40 (10. oktober 2019 )  ( 2019-10-10 ) Proprietære Ja
exe32pack
EXE Bundle 3.11 (7. januar 2011 )  ( 2011-01-07 ) Proprietære ?
EXECryptor
EXE Stealth 4.14 (29. juni 2011 )  ( 2011-06-29 ) Proprietære ?
eXPressor 1.8.0.1 (14. januar 2010 )  ( 2010-01-14 ) Proprietære ?
FSG 2.0 (24. maj 2004 )  ( 2004-05-24 ) Freeware Ingen
kkrunchy src 0.23a4 (Ukendt) Public domain Ingen
MEW 1.1 (Ukendt) Freeware Ingen
MPRESS 2.19 (2. januar 2012 )  ( 2012-01-02 ) Freeware Ja
MuCruncher
NeoLite
.netshrink 2.7 (2. juli 2016 )  ( 2016-07-02 ) Proprietære Ja
NsPack
Obsidium 1.6 (11. april 2017 )  ( 2017-04-11 ) Proprietære Ja
PECompact
PELock 2.06 (15. august 2016 )  ( 2016-08-15 ) Proprietære Ingen
PEPack
PESpin 1,33 (3. maj 2011 )  ( 2011-05-03 ) Freeware Ja
Lille 2.4 (22. september 2016 )  ( 2016-09-22 ) Freeware Ingen
PKLite32
RLPack Basic 1.21 (31. oktober 2008 )  ( 2008-10-31 ) GPL Ingen
Shrinker32
Smart Packer Pro X 2.0.0.1 (3. juni 2019 )  ( 2019-06-03 ) Proprietære Ja
Themida/WinLicense 3.0 (24. oktober 2019 )  ( 2019-10-24 ) Proprietære Ja
Upack
UPX 3,96 (23. januar 2020 )  ( 2020-01-23 ) GPL eksperimentel
VMProtect 3.4 (3. august 2019 )  ( 2019-08-03 ) Proprietære Ja
WWPack32
XComp/XPack 0,98 (18. februar 2007 )  ( 2007-02-18 ) Freeware Ingen
Yodas Crypte
YZPack

ELF filer

Kendte eksekverbare kompressorer til ELF -filer:

  • gzexe (bruger en shell script stub og gzip , fungerer på de fleste Unix-lignende systemer)
  • HASP -konvolut
  • UPX
  • 624 (til Linux/386)

CLI -samlingsfiler

Kendte eksekverbare kompressorer til CLI -samlingsfiler :

  • .NETZ
  • NsPack
  • Mpress
  • HASP -konvolut
  • .netshrink
  • dotBundle
  • Exepack.NET
  • DotProtect: Kommerciel beskytter/pakker til .net og mono. Funktioner online-verifikationer og "branchestandardkryptering".

Mac OS Classic -applikationsfiler

Kendte eksekverbare kompressorer til Mac OS Classic -applikationsfiler:

  • Ansøgning VISE
  • StuffIt InstallerMaker

Mach-O (Apple Mac OS X) filer

Kendte eksekverbare kompressorer til Mach-O (Apple Mac OS X) filer:

  • HASP -konvolut
  • UPX
  • VMProtect

Commodore 64 og VIC 20

Kendte eksekverbare kompressorer til eksekverbare filer på Commodore 64 og VIC 20 :

  • PuCrunch
  • Exomizer
  • ByteBoozer

Commodore Amiga

Kendte eksekverbare kompressorer til eksekverbare filer i Commodore Amiga -serien:

  • powerpacker
  • Titanics cruncher
  • imploder
  • TNM cruncher
  • Skrumper
  • PackFire

Java

Kendte eksekverbare kompressorer til Java :

JAR filer:

WAR -filer:

  • HASP -konvolut

JavaScript -scripts

Der er to typer komprimering, der kan anvendes på JavaScript -scripts:

  • Reducer redundansen i scriptet (ved at fjerne kommentarer, hvidt mellemrum og forkorte variabel- og funktionsnavne). Dette ændrer ikke scriptets adfærd.
  • Komprimer det originale script og opret et nyt script, der indeholder dekomprimeringskode og komprimerede data. Dette ligner binær eksekverbar komprimering.

Selvkomprimerende kompressorer

Disse komprimerer det originale script og udsender et nyt script, der har en dekompressor og komprimerede data.

  • JsSfx
  • Packify

Redundansreducerende kompressorer

Disse fjerner hvidt mellemrum, fjerner kommentarer og forkorter variabel- og funktionsnavne, men ændrer ikke scriptets adfærd.

  • Pakker
  • YUI kompressor
  • Shrinksafe
  • JSMin

Se også

Referencer