UPX - UPX
Pierwsze wydanie | 26 maja 1998 |
---|---|
Wersja stabilna | 3.96 / 23 stycznia 2020
|
Magazyn | |
Napisane w | C ++ , zestaw |
System operacyjny | Microsoft Windows , Linux , macOS , DOS , Atari TOS |
Platforma | i386 , MIPS , AMD64 , ARM , PowerPC , m68k |
Dostępne w | język angielski |
Rodzaj | Kompresja plików wykonywalnych |
Licencja | GPL z wyjątkiem skompresowanych plików wykonywalnych, zastrzeżony dla algorytmu kompresji w dystrybucjach binarnych |
Stronie internetowej | upx |
UPX ( Ultimate Packer for Executables ) to program pakujący o otwartym kodzie źródłowym, obsługujący wiele formatów plików z różnych systemów operacyjnych.
Kompresja
UPX korzysta z algorytmu kompresji danych o nazwie UCL, który jest implementacją fragmentów zastrzeżonego algorytmu NRV ( Not Really Vanished ) typu open source .
UCL został zaprojektowany tak, aby był na tyle prosty, że dekompresor można zaimplementować w zaledwie kilkuset bajtach kodu. UCL nie wymaga przydzielania dodatkowej pamięci do dekompresji, co jest istotną zaletą, która oznacza, że plik wykonywalny spakowany w formacie UPX zwykle nie wymaga dodatkowej pamięci.
UPX (od wersji 2.90 beta) może używać LZMA na większości platform; jednakże jest to domyślnie wyłączone dla wersji 16-bitowej ze względu na niską prędkość dekompresji na starszych komputerach (użyj, --lzma
aby ją wymusić).
Począwszy od wersji 3.91, UPX obsługuje również 64-bitowe (x64) pliki wykonywalne na platformie Windows . Ta funkcja jest obecnie deklarowana jako eksperymentalna .
Dekompresja
UPX obsługuje dwa mechanizmy dekompresji: technikę w miejscu i rozpakowywanie do pliku tymczasowego .
Technika lokalna, 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 wykorzystuje wyodrębnienie do pliku tymczasowego. Ta procedura wiąże się z dodatkowymi kosztami i innymi wadami; umożliwia jednak spakowanie dowolnego formatu pliku wykonywalnego. Metoda wyodrębniania do pliku tymczasowego ma kilka wad:
- Uprawnienia specjalne, takie jak suid, są ignorowane .
-
argv[0]
nie będzie miało znaczenia. - Wiele uruchomionych instancji pliku wykonywalnego nie może współużytkować 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 w sobie.
Obsługiwane formaty
UPX obsługuje następujące formaty:
- Przenośne pliki wykonywalne ( pliki PE, EXE i DLL ):
- Pliki wykonywalne COFF , używane przez DJGPP2
- a.out format, BSD i386 (usunięty)
- Surowe pliki 8086 / DOS:
- Watcom / LE (używany przez DOS4G , PMODE / W , DOS32A i CauseWay )
- TMT / adam (wygenerowany przez kompilator TMT Pascal)
- Atari / TOS
- Jądro Linux , i386, x86-64 i ARM
- Plik wykonywalny i możliwy do połączenia w systemie Linux , 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 działania w systemie .NET Framework .