یو پی ایکس
یو پی ایکس (انگلیسی: UPX مخفف Ultimate Packer for Executables) یک ابزار متن باز و آزاد برای بستهبندی (انگلیسی: Packing) فایلهای اجرایی است که از فرمتهای مختلف در سیستم عاملهای مختلف پشتیبانی مینماید.[2][3]
انتشار ابتدایی | ۲۶ مه ۱۹۹۸ |
---|---|
انتشار پایدار | 3.94
۱۲ مه ۲۰۱۷ |
مخزن | |
نوشتهشده با | C++, Assembly |
سیستمعامل | Microsoft Windows, Linux, macOS, DOS, Atari TOS |
بنسازه رایانش | i386, MIPS, AMD64, ARM, PowerPC, m68k |
در دسترس به | انگلیسی |
گونه | فشرده سازی فایل اجرایی |
پروانه | GPL with exception for compressed executables[1] |
وبگاه |
فشردهسازی
UPX با استفاده از الگوریتم فشرده سازی داده به نام UCL[4] که یک پیادهسازی متن باز از الگوریتم تجاریNRV (مخفف:Not Really Vanished[5]) است، استفاده میکند.[6]
UCL به نحوی طراحی شدهاست که عمل decompression بتواند به سادگی در چند صد بایت پیادهسازی شود. UCL به هیچ حافظه اضافه ای برای decompression نیاز ندارد.
UPX (پس از ۲٫۹۰ بتا) از الگوریتم فشرده سازی LZMA روی بیشتر سیستم عاملها پشتیبانی میکند.
از نسخه ۳٫۹۱، UPX از فایلهای اجرایی ۶۴ بیتی (x64) برای سیستم عامل ویندوز پشتیبانی میکند.[7] البته این ویژگی فعلاً به صورت آزمایشی است.
وافشرده سازی
UPX برای وافشرده سازی (انگلیسی: decompression) از دو شیوه استفاده میکند: روش در-محل (انگلیسی: in-place) و استخراج در یک فایل موقت.
روش در محل، که فایل اجرایی را در حافظه رم وافشرده میکند، روی همه سکوها پشتیبانی نمیشود. سایر سکوها از استخراج در فایل موقت استفاده میکنند. این روش سربار اضافی دارد و معایب دیگری نیز داد، هرچند، امکان بستهبندی (انگلیسی: packing) همه فرمتهای اجرایی را دارد.
روش استخراج در فایل موقت معایب زیر را دارد:
- مجوزهای خاص نادیده گرفته میشوند مانند suid.
argv[0]
معنی دار نخواهد بود.- چندین نمونه در حال اجرا از فایل اجرایی قادر به به اشتراک گذاری سگمنتهای مشترک حافظه نیستند.
بستهبندی اصلاح نشده UPX، معمولاً بوسیله آنتیویروسها باز شده و بررسی میشوند. UPX همچنین قابلیت بازکردن بستههای شامل فایلهای اجرایی اصلاح نشده را دارد.
فرمتهای پشتیبانی شده
- ARM/PE
- Atari/TOS
- *BSD/i386
- DJGPP2/COFF
- DOS/COM (از جمله برخی از تصاویر دودویی)
- DOS/EXE
- DOS/SYS
- لینوکس/i386 a.out
- لینوکس/ELF در i386 ،x86-64، ARM, PowrPC
- Linux/kernel در i386, x86-64
- Mach-O/ppc32 Mach-O/i386 (حتی تولید شده توسط Google Go و پس از ۳٫۰۹)
- rtm32/PE (تولید شده توسط Borland C/Pascal Compilers[8])
- tmt/adam (تولید شده توسط کامپایلر TMT Pascal[9])
- Playstation1/EXE
- Watcom/LE ،DOS4G) PMODE/W)
- Windows/PE EXE files containint native x86 (32-bit) code
- Windows/PE EXE files containint native x64 (64-bit) code - در مرحله آزمایشی
UPX در حال حاضر از فایلهای PE که حاوی کدهای CIL (برای اجرا روی Net Framework) است، پشتیبانی نمیکند.
- The facility to compress DOS .COM-style files can be utilized also to compress other binary executable files. Some FreeDOS and EDR-DOS kernel files are known to be UPX-compressible this way.
- The facility to compress DOS .COM-style files can be utilized also to compress non-executable binary data files, if the driver/application using these files has been enhanced to detect UPX-compressed files and jump to the decompressor embedded in the file. FreeDOS is known to utilize this for .CPX files, UPX-compressed .CPI font files.
- For the DOS targets, UPX supports a special option -8086 in order to force the embedded decompressor to become compatible with 8088/8086 processors, so that the compressed files can be executed and decompressed even on the earliest PCs running DOS.
منابع
- https://upx.github.io/upx-license.html
- Marak, Victor (2015). Windows Malware Analysis Essentials. Packt Publishing. p. 188. ISBN 978-1-78528-151-8. Retrieved November 22, 2015.
Packers such as Ultimate Packer for Executables (UPX) are more of executable compressors as size reduction is the primary goal, not obfuscation, which can be a byproduct ...
- Blunden, Bill (2013). The Rootkit Arsenal (Second ed.). Jones & Bartlett Learning. pp. 353–355. ISBN 978-1-4496-2636-5. Retrieved November 22, 2015.
One of the most prolific executable packers is UPX (the Ultimate Packer for executables). Not only does it handle dozens of different executable formats, but also its source code is available online.
- http://www.oberhumer.com/opensource/ucl/
- http://www.oberhumer.com/products/nrv/
- https://github.com/upx/upx/blob/master/README.SRC
- https://upx.github.io/upx-news.txt
- http://www.vogons.org/viewtopic.php?t=25997
- https://linux.die.net/man/1/upx