UPX: Zmenšete programy na polovinu

Co takhle zkusit zmenšit spustitelné soubory a dynamické knihovny? Že to nejde? Ale jde! Dnes vám představíme program UPX (Ultimate Packer for eXecutables), který dokáže zmenšit soubory až na polovinu, aniž by jakýmkoli způsobem ovlivnil jejich funkci.
Podíváte-li se podrobněji na obsah pevného disku průměrného počítače, zjistíte, že největší část obvykle zabírají adresáře Windows a Program Files. Není se čemu divit – oba obsahují celou řadu programů, přičemž právě programy patří k největším polykačům volného místa. Chcete-li ušetřit nějaký ten megabajt, můžete například začít odinstalací nepoužívaných aplikací. Po chvilce ale zjistíte, že i když jste z počítače odstranili všechny programy, které již nechcete, stále to ještě není pravé ořechové. Co takhle zkusit zmenšit spustitelné soubory a dynamické knihovny? Že to nejde? Ale jde! Dnes vám představíme program UPX (Ultimate Packer for eXecutables), který dokáže zmenšit soubory až na polovinu, aniž by jakýmkoli způsobem ovlivnil jejich funkci. Jde vlastně o program komprimující spustitelné soubory, který umí zredukovat jejich velikost o 50 až 70 %, čímž lze v konečném efektu ušetřit poměrně výrazné množství místa a v případě, že spouštíte programy ze síťového serveru, můžete tímto krokem dosáhnout i snížení zatížení sítě.

Aplikace existuje ve třech verzích – pro příkazovou řádku Windows, pro 32bitový DOS a pro Linux. Programátory jistě potěší možnost stáhnout si i zdrojový kód.

My jsme podrobili testu první variantu ovládanou z příkazové řádky Windows. O tom, že se nejedná o nějaký horký produkt, svědčí fakt, že program byl ve verzi 1.00 uvolněn až po dvouletém testování, což by mělo být dostatečnou zárukou stability a bezpečnosti.

UPX podporuje celou řadu formátů nejrůznějších vykonatelných souborů, jako jsou aplikace pro Windows 95, 98, 2000 a NT, dynamické knihovny (DLL), DOSové programy a spustitelné soubory operačního systému Linux. Princip fungování takto zkomprimovaného programu je kompresí pouze mírně pozměněn: zatímco nezkomprimovaný soubor se nahraje do paměti, kde se následně spustí, zkomprimovaný se nahraje do paměti, vyvolá se rutina k dekompresi a teprve po rozbalení je program spuštěn. Na současných počítačích nepoznáte prakticky žádný rozdíl mezi spuštěním programu zkomprimovaného pomocí UPX a jeho původní verzí, nicméně na starších strojích bude přece jen citelné zpoždění, během kterého je program rozbalován do paměti. Máte-li ale na stole alespoň Celerona na 300 MHz, můžete si své spustitelné soubory bez obav zkomprimovat.

Z dalších vlastností jmenujme:

  • vynikající kompresní poměr, který dosahuje ve většině případů lepších výsledků než například ZIP či GZIP.
  • vysoká rychlost rozbalování zkomprimovaných souborů (podle autora na starém Pentiu 133 dosahuje hodnoty kolem 10 MB za sekundu)
  • v případě, že byste nebyli s funkcí zkomprimovaného souboru spokojeni, není problém jej uvést do původního stavu. UPX si ukládá do souboru kontrolní součty před kompresí a po ní, takže máte jistotu, že původní soubor lze kdykoli bezpečně obnovit.

    Ovládání programu

    Komprimace Pro základní komprimaci vystačíte s velmi jednoduchou syntaxí:

    Příklad: upx program.exe

    Kromě toho lze určit i stupeň komprese, který je přímo úměrný času, jenž budete ke zkomprimování souboru potřebovat:

  • 1, 2 a 3 nabízejí velmi rychlou kompresi za cenu horšího kompresního poměru
  • 4, 5 a 6 mají optimální poměr komprese a potřebného času
  • 7 je implicitní stupeň
  • 8 a 9 nabízí nejlepší stupeň, ovšem vyžaduje poměrně značné množství času
Příklad: upx -8 program.exe

Je nutné upozornit na skutečnost, že volba kompresního poměru je velice důležitá. Autor sám provedl pokus, během něhož se snažil zkomprimovat jeden a tentýž soubor velký 5 MB, přičemž při použití atributu -7 dosáhl pouze o 65 KB větší výsledné velikosti než při použití atributu -9.

Dekomprimace K dekomprimaci souborů použijte přepínač -d

Příklad: upx -d program.exe

Test Testuje se integrita zkomprimovaného nebo dekomprimovaného souboru, čímž můžete například zjistit, zda je možné ten který soubor bezpečně dekomprimovat. Není testován celý soubor, ale pouze část, která bude dekomprimována během spuštění programu.

Příklad: upx -t program.exe

Výpis Díky tomuto přepínači se můžete dozvědět informace o zkomprimovaném souboru, jako je například původní a současná velikost a kompresní poměr.

Příklad: upx -l program.exe

K dispozici je celá řada dalších přepínačů, které jsou ale pro funkci programu méně důležité. Jejich kompletní výpis získáte příkazem upx --help.

Test

Pro test komprese jsme použili celkem pět různých programů, přičemž jsme sledovali původní velikost, velikost po zkomprimování a dobu nutnou pro provedení komprese. Ve všech případech jsme použili základní nastavení programu, tedy implicitní stupeň 7.
Popis Název souboru Původní velikost Velikost po kompresi Kompresní poměr Čas
Dynamická knihovna MS Office 97 Mso97.dll 3'780'608 2'027'448 0,54 87 sekund
MS Word 97 winword.exe 5'328'896 2'830'336 0,53 156 sekund
Kalkulačka calc.exe 94'208 31'232 0,33 méně než 1 sekunda
Příkazová řádka command.com 94'696 34'855 0,37 méně než 1 sekunda
Adobe PhotoShop 5.0 CZ Photoshp.exe 5'730'816 2'136'064 0,37 133 sekund
U velkých souborů je tedy průměrná rychlost komprese zhruba kolem 40 KB/s, přičemž průměrný kompresní poměr v našem minitestu činil 0,43, výsledné soubory tedy byly o téměř 60 % menší než jejich původní verze. Problém nastal pouze v případě zkomprimovaného souboru command.com, který se odmítal spustit, ostatní programy (ve zbývajících případech se jednalo o standardní Win32 PE EXE soubory) fungovaly zcela bez chyby.

Velice potěšující je skutečnost, že UPX je šířen úplně zadarmo, což je výrazný rozdíl od jiných podobných produktů nabízejících stejné funkce.

Zajímavé jsou rovněž plány do budoucna: autoři chtějí podporovat komprimaci programů pod operačními systémy přenosných zařízení, jako jsou PalmPiloty, kde je důležitý každý ušetřený kilobajt. Stejně tak se plánují i varianty pro další unixové klony a operační systémy, jako je FreeBSD, OpenBSD, NetBSD, Solaris, BeOS a další.

Licence: Freeware Webová stránka: http://upx.tsx.org/ Download, velikost: 113 KB

Diskuze (14) Další článek: Seznam a Atlas se hádají, kdo z nich je větší

Témata článku: Windows, Celá knihovna, Důležitý soubor, Největší rozdíl, Původní funkce, Spustitelný soubor


Určitě si přečtěte

Na čem běží Seznam.cz: Běžný standard už nestačí, přechází na vlastní cloud i servery

Na čem běží Seznam.cz: Běžný standard už nestačí, přechází na vlastní cloud i servery

** Seznam nám prozradil detaily k jeho nové platformě SCIF ** V rámci jednoho privátního cloudu sjednocuje většinu služeb ** Vedle softwaru vyvíjí i vlastní hardware

Karel Javůrek | 14

Apple ukázal novinky: iPad Pro má překonat notebooky a vrací se Mac mini!

Apple ukázal novinky: iPad Pro má překonat notebooky a vrací se Mac mini!

** Apple v New Yorku představoval počítačové novinky ** iPad Pro prý zatočí s notebooky ** Dočkali jsme se také návratu Mac mini

Jakub Čížek | 81

Blíží se HTTP/3: Web bude rychlejší a bude používat úplně jinou technologii

Blíží se HTTP/3: Web bude rychlejší a bude používat úplně jinou technologii

** Příští verze klíčového protokolu HTTP nebude postavená na TCP ** Namísto toho použije „vylepšené UDP“ ** HTTP/3 bude postavené na QUIC

Jakub Čížek | 60

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 32

Vybrali jsme 16 programovatelných hraček a stavebnic pro děti. A vlastně i pro vás

Vybrali jsme 16 programovatelných hraček a stavebnic pro děti. A vlastně i pro vás

** Získejte děti pro matematiku a základy techniky ** Kupte jim hračku nebo stavebnici, které vdechnou vlastní život ** Vybrali jsme 16 stavebnic pro nejmenší caparty i vás samotné

Jakub Čížek | 16