常用软件upx、unzip、tar那点事


正文

使用 UPX 压缩可执行文件

安装

sudo apt install upx -y

压缩

upx [options] yourfile

upx 对文件的默认操作即为压缩,使用上述命令会使用默认参数压缩并替换文件 yourfile。
upx 支持如下可选参数:

-1[23456789]:不同的压缩级别,数值越高压缩率越高,但耗时更长。对于小于 512 KiB 的文件默认使用 -8,其他的默认为 -7。
--best:最高压缩级别
--brute:尝试使用各种压缩方式来获取最高压缩比
--ultra-brute:尝试使用更多的参数来获取更高的压缩比
-o [file]:将压缩文件保存为 [file]

解压

upx -d [yourfile]

[scode type="share"]压缩的程序占用更少的硬盘空间,但会在打开时消耗更多的 CPU 资源,在运行时占用更多的内存(或 swap 空间、/tmp 存储等)[/scode]

优点

UPX 可以压缩各种类型的可执行文件
压缩后的文件可以直接由操作系统执行
压缩过程不会修改源文件,也就意味着解压后直接可以得到原始文件
不会产生额外的动态库调用

缺点

运行的程序不会共享数据段(汇编),所以多实例运行的程序不适合压缩
使用 lddsize 命令无法获取到程序的有效信息

原理

为什么压缩后的文件可由系统直接执行?
UPX 将程序压缩,并在头部加入解压的程序,具体的原理可以参看参考[2]。
在 Linux 系统中可以使用 strings 命令查看可执行文件的内容,通过查看 UPX 压缩后的程序可以看到,UPX 在文件中写入了自己的特征码。

gunzip 和 unzip 解压文件到指定的目录

gzip 命令:

gzip test.txt 
#它会将文件压缩为文件 `test.txt.gz`,原来的文件则没有了,解压缩也一样 
gunzip test.txt.gz 
#它会将文件解压缩为文件 test.txt,原来的文件则没有了,为了保留原有的文件,我们可以加上 -c 选项并利用 linux 的重定向 
gzip -c test.txt > /root/test.gz 
# 这样不但可以将原有的文件保留,而且可以将压缩包放到任何目录中,解压缩也一样 
gunzip -c /root/test.gz > ./test.txt 

zip 命令:

zip test.zip test.txt 
# 它会将 test.txt 文件压缩为 test.zip ,当然也可以指定压缩包的目录,例如 /root/test.zip 
unzip test.zip 
# 它会默认将文件解压到当前目录,如果要解压到指定目录,可以加上 -d 选项 
unzip test.zip -d /root/

如何解压缩 tar.xz 文件

下面的例子显示了如何将压缩包内容,解压到文件夹/home/linuxize/files

tar -xf archive.tar.xz -C /home/linuxize/files

声明:我来时天晴,你来时风止|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 常用软件upx、unzip、tar那点事


待到那一天,一手撑苍天,一眼俯人间。