本文将介绍upx相关知识。
What
upx(The Ultimate Packer for eXecutables)的基本原理:
- 将可执行文件压缩
- 将压缩完的程序作为新程序的一部分
- 在新程序的开头加上解压和执行代码
压缩完的新程序是可执行的。
Why
对于可执行程序,upx是用时间换空间的做法。
需要注意的是,实际使用中,需要保证压缩率产生的收益比加上额外的解压代码要高,否则就没意义。
How
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| junmingl@junming:~/test$ cp /bin/ls ls_upx junmingl@junming:~/test$ ./ls_upx -ls total 132 132 -rwxr-xr-x 1 junmingl junmingl 133792 5月 17 05:09 ls_upx junmingl@junming:~/test$ upx ls_upx Ultimate Packer for eXecutables Copyright (C) 1996 - 2017 UPX 3.94 Markus Oberhumer, Laszlo Molnar & John Reiser May 12th 2017
File size Ratio Format Name -------------------- ------ ----------- ----------- 133792 -> 61332 45.84% linux/amd64 ls_upx
Packed 1 file. junmingl@junming:~/test$ ./ls_upx -ls total 60 60 -rwxr-xr-x 1 junmingl junmingl 61332 5月 17 05:09 ls_upx
|
压缩了有超过 50%。UPX 的压缩成绩是 50~70%,关键是,可执行程序压缩完还是可以执行的。
参考资料:
- 单个程序 Size 优化之压缩后自解压执行
- upx(1) - Linux man page