本文将介绍upx相关知识。

What

upx(The Ultimate Packer for eXecutables)的基本原理:

  1. 将可执行文件压缩
  2. 将压缩完的程序作为新程序的一部分
  3. 在新程序的开头加上解压和执行代码

压缩完的新程序是可执行的。

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%,关键是,可执行程序压缩完还是可以执行的。


参考资料:

  1. 单个程序 Size 优化之压缩后自解压执行
  2. upx(1) - Linux man page