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 ) | Proprietære | Ingen |
| ANDpakk2 | |||
| Armadillo | 9,62 (7. juni 2013 ) | Proprietære | Ja |
| ASPack | 2.40 (7. december 2018 ) | Proprietære | Ja |
| ASPR (ASProtect) | 2,78 (7. december 2018 ) | Proprietære | Ja |
| BeRoEXEPacker | |||
| BIN-krypter | |||
| BoxedApp Packer | 3.3 (26. juli 2015 ) | Proprietære | Ja |
| CExe | 1.0b (20. juli 2001 ) | GPL | Ingen |
| Crinkler | 2.2 (15. juni 2019 ) | Freeware | Ja |
| dotBundle | 1.3 (4. april 2013 ) | Proprietære | Ja |
| Enigma Protector | 6.60 (21. august 2019 ) | Proprietære | Ja |
| Enigma Virtual Box | 9.40 (10. oktober 2019 ) | Proprietære | Ja |
| exe32pack | |||
| EXE Bundle | 3.11 (7. januar 2011 ) | Proprietære | ? |
| EXECryptor | |||
| EXE Stealth | 4.14 (29. juni 2011 ) | Proprietære | ? |
| eXPressor | 1.8.0.1 (14. januar 2010 ) | Proprietære | ? |
| FSG | 2.0 (24. maj 2004 ) | Freeware | Ingen |
| kkrunchy src | 0.23a4 (Ukendt) | Public domain | Ingen |
| MEW | 1.1 (Ukendt) | Freeware | Ingen |
| MPRESS | 2.19 (2. januar 2012 ) | Freeware | Ja |
| MuCruncher | |||
| NeoLite | |||
| .netshrink | 2.7 (2. juli 2016 ) | Proprietære | Ja |
| NsPack | |||
| Obsidium | 1.6 (11. april 2017 ) | Proprietære | Ja |
| PECompact | |||
| PELock | 2.06 (15. august 2016 ) | Proprietære | Ingen |
| PEPack | |||
| PESpin | 1,33 (3. maj 2011 ) | Freeware | Ja |
| Lille | 2.4 (22. september 2016 ) | Freeware | Ingen |
| PKLite32 | |||
| RLPack Basic | 1.21 (31. oktober 2008 ) | GPL | Ingen |
| Shrinker32 | |||
| Smart Packer Pro X | 2.0.0.1 (3. juni 2019 ) | Proprietære | Ja |
| Themida/WinLicense | 3.0 (24. oktober 2019 ) | Proprietære | Ja |
| Upack | |||
| UPX | 3,96 (23. januar 2020 ) | GPL | eksperimentel |
| VMProtect | 3.4 (3. august 2019 ) | Proprietære | Ja |
| WWPack32 | |||
| XComp/XPack | 0,98 (18. februar 2007 ) | 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:
- HASP -konvolut
- pakke 200
- ProGuard
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å
- Datakomprimering
- Diskkomprimering
- RAM -komprimering
- Eksekverbar
- Kolmogorov kompleksitet
- Selvudtrækkende arkiv