本文出自:http://www.hudong.com/wiki/upx
UPX
UPX (the Ultimate Packer for eXecutables)是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。 通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,对于支持的大多数格式没有运行时间或内存的不利后果。
编辑摘要UPX 支持许多不同的可执行文件格式 包含 Windows 95/98/ME/NT/2000/XP/CE 程序和动态链接库、DOS 程序、 Linux
可执行文件和核心。
对于可执行程序资源压缩,是保护文件的常用手段. 俗称加壳,加壳过的程序可以直接运行,但是不能查看源代码.要经过脱壳才可以查看源代码.
加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。
1.压缩文件
用UPX压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。 通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,对于支持的大多数格式没有运行时间或内存的不利后果。
2.加壳脱壳
程序为了防止反跟踪,防止程序被人跟踪调试,防止算法程序不想被别人静态分析就需要加壳。加密代码和数据,保护你的程序数据的完整性。不被修改或者窥视你程序的内幕。
FileDescriptionupx302w.zip | Win32 控制台版本 |
upx-3.02-i386_linux.tar.bz2 | i386预编译- Linux版 |
upx-3.02-amd64_linux.tar.bz2 | amd64预编译-linux版 |
upx-3.02-armeb_linux.tar.bz2 | armeb预编译-linux版 |
upx-3.02-mipsel_linux.tar.bz2 | mipsel预编译-linux版 |
upx-3.02-powerpc_linux.tar.bz2 | powerpc预编译-linux版 |
upx302d.zip | 32位DOS 版 |
upx302a.zip | Atari TOS/MiNT 版 |
upx-3.02-src.tar.bz2 | 源代码 |
Netscape 4.06 | win32/pe | netscape.exe | 2,934,336 | 1,124,352 | 0.383 |
Descent 2 | watcom/le | descent2.exe | 1,448,873 | 652,832 | 0.451 |
MAME 0.36 | djgpp2/coff | mame.exe | 8,214,016 | 1,810,056 | 0.220 |
OneOhOne | dos/exe | 101.exe | 438,144 | 179,566 | 0.410 |
Emacs 20.2 | linux/386 | emacs-20.2 | 2,772,657 | 925,543 | 0.334 |
g++ 2.8.1 | atari/tos | cc1plus.ttp | 1,595,049 | 655,508 | 0.411 |
以下是支持可执行文件格式列表
Format full namePackUnpackDescriptionLinksamd64-linux.elf amd64-linux.kernel.vmlinux arm-linux.elf arm-linux.kernel.vmlinux arm-wince.pe armeb-linux.elf armeb-linux.kernel.vmlinux fat-darwin.macho i086-dos16.com i086-dos16.exe i086-dos16.sys i386-bsd.elf.execve i386-darwin.macho i386-dos32.djgpp2.coff i386-dos32.tmt.adam i386-dos32.watcom.le i386-freebsd.elf i386-linux.elf i386-linux.elf.execve i386-linux.elf.shell i386-linux.kernel.bvmlinuz i386-linux.kernel.vmlinux i386-linux.kernel.vmlinuz i386-netbsd.elf i386-openbsd.elf i386-win32.pe m68k-atari.tos mips-linux.elf mipsel-linux.elf mipsel.r3000-ps1 powerpc-darwin.macho powerpc-linux.elf powerpc-linux.kernel.vmlinuxX | X | Linux ELF | Linux, AMD64 |
X | X | Linux kernel | |
X | X | Linux ELF | Linux, ARM |
X | X | Linux kernel | |
X | X | Windows CE executable or DLL | Windows CE, ARM |
X | X | Linux ELF | Linux, ARM |
X | X | Linux kernel | |
X | X | Mac OS X executable | |
X | X | DOS 16-bit .com file | |
X | X | DOS 16-bit executable | FreeDOS homepage |
X | X | DOS 16-bit .sys file | |
X | X | BSD generic | |
X | X | Mac OS X executable | Darwin, i386 |
X | X | DOS 32-bit COFF | djgpp homepage |
X | X | DOS 32-bit executable | TMT Pascal |
X | X | DOS 32-bit linear executable | Open Watcom C/C++ |
X | X | FreeBSD ELF | FreeBSD |
X | X | Linux ELF | Linux, i386 |
X | X | Linux generic | |
X | X | Linux shell script | |
X | - | Linux kernel | |
X | X | Linux kernel | |
X | - | Linux kernel | |
X | X | NetBSD ELF | NetBSD |
X | X | OpenBSD ELF | OpenBSD |
X | X | Windows 32-bit executable or DLL | |
X | X | Atari TOS/MiNT executable | FreeMiNT portal, m68k |
X | X | Linux ELF | Linux, MIPS |
X | X | Linux ELF | Linux, MIPS |
X | X | PlayStation 1 | PlayStation, MIPS |
X | X | Mac OS X executable | Darwin, PowerPC |
X | X | Linux ELF | Linux, PowerPC |
X | X | Linux kernel |