UPX
Pierwsze wydanie | 26 maja 1998 |
---|---|
Wersja stabilna | 4.0.1 / 16 listopada 2022 r
|
Magazyn | |
Napisane w | C++ , montaż |
System operacyjny | Microsoft Windows , Linux , macOS , DOS , Atari TOS |
Platforma | i386 , MIPS , AMD64 , ARM , PowerPC , m68k |
Dostępne w | język angielski |
Typ | Kompresja wykonywalna |
Licencja | GPL z wyjątkiem skompresowanych plików wykonywalnych, zastrzeżona dla algorytmu kompresji w dystrybucjach binarnych |
Strona internetowa |
UPX ( Ultimate Packer for Executables ) to darmowy program do pakowania plików wykonywalnych o otwartym kodzie źródłowym, obsługujący wiele formatów plików z różnych systemów operacyjnych.
Kompresja
UPX używa algorytmu kompresji danych o nazwie UCL, który jest otwartą implementacją części zastrzeżonego algorytmu NRV ( Not Really Vanished ).
UCL został zaprojektowany tak, aby był na tyle prosty, że dekompresor można zaimplementować w zaledwie kilkuset bajtach kodu. UCL nie wymaga przydzielenia dodatkowej pamięci do dekompresji, co jest znaczną zaletą, która oznacza, że plik wykonywalny spakowany w UPX zwykle nie wymaga dodatkowej pamięci.
UPX (od wersji 2.90 beta) może używać LZMA na większości platform; jest to jednak domyślnie wyłączone dla wersji 16-bitowej ze względu na niską prędkość dekompresji na starszych komputerach (użyj opcji --lzma
, aby ją wymusić).
Począwszy od wersji 3.91, UPX obsługuje również 64-bitowe (x64) pliki PE na platformie Windows . Ta funkcja jest obecnie zadeklarowana jako eksperymentalna .
Dekompresja
UPX obsługuje dwa mechanizmy dekompresji: technikę in-place i ekstrakcję do pliku tymczasowego .
Technika in-place, która dekompresuje plik wykonywalny do pamięci, nie jest możliwa na wszystkich obsługiwanych platformach. Ma tę zaletę, że jest bardziej wydajny pod względem pamięci, a środowisko skonfigurowane przez system operacyjny pozostaje poprawne.
Reszta używa ekstrakcji do pliku tymczasowego. Ta procedura wiąże się z dodatkowymi kosztami i innymi wadami; umożliwia jednak spakowanie dowolnego formatu pliku wykonywalnego. Metoda ekstrakcji do pliku tymczasowego ma kilka wad:
- Specjalne uprawnienia są ignorowane, takie jak suid .
-
argv[0]
nie będzie miało znaczenia. - Wiele uruchomionych instancji pliku wykonywalnego nie może współdzielić wspólnych segmentów.
Niezmodyfikowane opakowanie UPX jest często wykrywane i rozpakowywane przez skanery oprogramowania antywirusowego . UPX ma również wbudowaną funkcję rozpakowywania niezmodyfikowanych plików wykonywalnych spakowanych razem z nim.
Obsługiwane formaty
UPX obsługuje następujące formaty:
- Przenośny plik wykonywalny (pliki PE, EXE i DLL ):
- COFF , używane przez DJGPP2
- format a.out , BSD i386 (usunięty)
- Surowe pliki 8086/DOS:
- Watcom / LE (używany przez DOS4G , PMODE/W, DOS32A i CauseWay) [ potrzebne źródło ]
- TMT/adam (wygenerowany przez kompilator TMT Pascal)
- Atari/TOS
- Jądro Linuksa , i386, x86-64 i ARM
- Linux wykonywalny i możliwy do połączenia format , i386, x86-64 , ARM , PowerPC , MIPS
- PlayStation 1 /EXE (MIPS R3000)
- Darwin Mach-O , ppc32, i386 i x86-64
UPX obecnie nie obsługuje plików PE zawierających kod CIL przeznaczony do uruchamiania w .NET Framework .