首页 > 其他分享 >UPX 可执行文件压缩工具的介绍与使用

UPX 可执行文件压缩工具的介绍与使用

时间:2023-12-28 14:55:32浏览次数:32  
标签:可执行文件 压缩工具 -- 压缩 加壳 UPX 使用

UPX 是什么

UPX 全称是 "Ultimate Packer for eXecutables",是一个免费、开源、编写、可扩展、高性能的可执行程序打包程序。换句话说一个可执行文件的压缩工具。主要的功能是将可执行的二进制程序、动态链接库和其他的二进制文件压缩为更小的体积,UPX 通常可以将文件大小减少 50% - 70%。从而减少磁盘空间占用、降低网络传输所需带宽、以及分发成本(UPX 创建于 1996年,那时大家都在使用软盘,所以存储空间十分宝贵,也凸显了可执行程序压缩的必要性)。

同时 UPX 还有以下优势:

  • 可靠性: UPX 内部维护了一套校验逻辑,对压缩前和解压后的文件进行校验,以保证程序的完整性。
  • 安全性: 由于UPX 多年来一直是开源项目,因此任何开发者、防病毒软件厂商都能看到 UPX 压缩程序内部逻辑并验证安全性。
  • 解压速度: 在任何现代机器上,解压速度都超过 500 MB/秒。
  • 无内存开销: 解压运行压缩后的程序无需额外的内存开销。
  • 出色的压缩比: UPX 通常比传统的 Zip 压缩算法压缩效果更好。使用 UPX 可以减小分发文件的大小,从而在网络传输和存储方面节省资源。
  • 通用性: 可以打包多种可执行格式,包括 Windows 应用程序和 DLL、macOS 应用程序和 Linux 可执行文件。
  • 可扩展: UPX 良好的代码设计,很容易添加新的可执行文件格式支持和新的压缩算法。

UPX 的争议

UPX 除了上面提到的压缩功能之外,还有另一个主要作用就是加壳。既字面意思,将可执行程序的外部再包一层外壳程序,并在运行时使用外壳程序将实际的程序来解压运行。

通过 UPX 加壳有以下优势:

  • 安全性:加壳可以提高可执行文件的安全性,因为攻击者很难直接分析或修改外壳程序中的代码。这样可以防止恶意修改和病毒注入。
  • 反调试和反分析:一些外壳程序可以包含反调试和反分析的技术,使得分析者难以逆向工程和分析程序的逻辑。
  • 授权保护:加壳可以用于保护软件的授权,使其只能在经过授权的环境中运行,从而防止盗版。
  • 代码混淆:加壳可以将原始可执行文件的代码混淆到外壳程序中,增加分析的复杂性,从而提高了对抗逆向工程的能力。

在过去的一段时间里,一些黑客或者恶意软件作者使用 UPX 等加壳工具来隐藏恶意软件和病毒,以逃避杀毒软件和分析者的检测。主要有以下几个要点:

  • 病毒和恶意软件的加壳:黑客和恶意软件作者使用UPX等加壳工具来包装他们的恶意代码。这使得分析者和杀毒软件难以识别和分析这些恶意软件,因为它们需要解压缩才能揭示其真实的目的和功能。
  • 病毒分发:加壳也可用于将恶意软件嵌入到合法的可执行文件中,然后通过社会工程或其他手段欺骗用户执行。用户可能认为他们正在运行一个合法的程序,但实际上却是运行了一个加壳的恶意软件。
  • 反病毒工具的适应性:随着黑客使用加壳技术来隐藏其活动,安全软件公司也不得不不断提高其产品的适应性,以识别和处理加壳的可执行文件。这导致了反病毒工具的不断演进,以更好地应对这种挑战。
  • 法律和道德问题:加壳技术的滥用引发了一系列法律和道德问题。黑客使用加壳来隐藏其犯罪活动,这导致了对加壳工具的合法性和使用的争议。

正因为上面提到的一些争议,导致大部分情况下,杀毒软件会对加壳的可执行文件产生警报或误报病毒。这是因为加壳技术会改变可执行文件的结构和行为,使杀毒软件难以确定文件的真实性质。不过随着杀毒软件公司对检测引擎的改进,这些误报也在逐渐减少。

为什么使用 UPX

我使用 UPX 的目的是因为自己在公司内部做了一个运维工具,这个运维工具对部署的便捷程度要求比较高。运维工具使用 Go 语言开发,在项目编译的同时将依赖的资源文件,借助 Go 语言的 embed 功能打包到二进制文件内部,使其运行只依赖主程序一个文件。

编译的 Linux 可执行文件有 22 MB 左右,为了进一步方便运维同时部署此工具,决定使用 UPX 进一步压缩体积。

下载安装

访问官方下载地址:github.com/upx/upx/rel…

根据开发环境选择不同的 upx 版本,我的开发环境是 Windows,所以选择的也是 Windows 版本,需要注意的是,upx 可以跨平台压缩,也就是说可以在Windows 的开发平台上压缩 Linux 平台的可执行程序。

下载完成后可以选择直接解压 upx 主程序使用,或者配置环境变量来使用。

使用说明

UPX 的基本使用格式为:upx [选项] 待压缩的文件

压缩级别参数

  • 默认级别: 通常是一个压缩比和消耗时间的中间选项,如果不指定压缩级别参数,UPX 会使用此级别。
  • -1 ~ -9: UPX 提供了 -1-9 的压缩级别参数。其中 -1 表示最低级别的压缩,而 -9 表示最高级别的压缩,通常级别越高,压缩比越高(压缩后体积越小),但压缩所需时间也会更长。
  • --brute: 高级别的压缩选项,类似于 -9,但压缩的过程中会使用更多的压缩技巧,可能会导致更长的压缩时间。
  • --ultra-brute: UPX 中最高级别的压缩,使用最激进的压缩算法,尽可能的减小文件大小。需要更长的压缩时间,并且运行时所需的解压时间也会增加。
  • --best: 使用最佳压缩结果的选项,通常效果等于 -9 或者 --ultra-brute
  • --fast: 使用最快压缩速度的选项,通常效果等于 -1 或者 -2
  • --lzma: 使用 LZMA 算法进行压缩,可以获得比较高的压缩比,但不会有 --ultra-brute 那么激进,且通常比 -9 更快。
  • --overlay: 选项将压缩文件附加到可执行文件的末尾,而不是创建新文件。这可以用于一些特殊用途。
  • --force: 用于强制压缩,即使 UPX 认为此文件不适合压缩。
  • --all-filters: 尝试所有可用的压缩算法,以尝试找到最佳的压缩组合(个人感觉和默认差不多)。

其他参数

  • -o: 指定压缩后文件输出的名称,如果不指定则默认覆盖原始文件。
  • --list: 列出压缩过的文件信息,例如压缩比例、文件大小等。
  • --quiet:-q 选项,使用安静模式,减少输出信息,在批处理或自动化的过程中使用。
  • --verbose:-v 选项,启用详细输出,嫌疑有关压缩进程的详细信息。
  • --test: 用于测试压缩程序是否能正常的解压缩或运行,不会进行实际的压缩操作。
  • --keep: 保留原始文件,默认情况下如果不指定输出文件名,则会在压缩结束后删掉原始文件。
  • --threads: 指定用于压缩的线程数,默认情况下与 CPU 核心数量相等。
  • --decompress: 用于解压还原已经被 UPX 压缩的文件。

压缩效果展示

我这里使用一个体积为 23007232 字节(21.9MB),使用 Go 语言编译后的二进制程序进行压缩测试,演示在不同压缩机别下的压缩比、耗时、压缩后的体积等信息,提供压缩算法的选择参考。

压缩级别/算法 压缩率 体积(字节) 体积(MB) 所需耗时
-1 49.43 % 11372704 10.8 1 秒
-3 46.84 % 10776640 10.2 2 秒
-5 38.34 % 8820112 8.41 5 秒
-7 36.13 % 8312776 7.92 11 秒
-9 35.23 % 8104520 7.72 18 秒
默认级别 36.13 % 8312776 7.92 10 秒
--brute 29.87 % 6871344 6.55 107 秒
--ultra-brute 29.74 % 6843300 6.52 128 秒
--lzma 29.97 % 6896080 6.57 11 秒
--best 35.21 % 8100232 7.72 10 秒
--fast 49.43 % 11372704 10.8 1 秒

Snipaste_2023-09-02_02-04-04.png

博客地址:www.dbkuaizi.com 参考来源: upx.github.io


作者:两双筷子
链接:https://juejin.cn/post/7273803674789593127
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:可执行文件,压缩工具,--,压缩,加壳,UPX,使用
From: https://www.cnblogs.com/jiftle/p/17932723.html

相关文章

  • JS压缩谁最强?对比5款JS代码压缩工具
    JS压缩谁最强?对比5款JS代码压缩工具JS压缩,似乎是很简单的一个事情,通常在线就可以完成。但不同网站或工具提供的JS压缩,效果差异不小。本文,测试国内外5个JS在线压缩工具,看看谁的效果最好。测试用JS代码(注:这段代码来下面要测试的JShaman网站,以压缩这段代码为例,看不同的工具压缩后......
  • python远程关闭liunx计算机并转化成可执行文件exe
    1.安装Python首先,确保您已经安装了Python。访问https://www.python.org/downloads/,下载并安装适合您操作系统的Python发行版。2.安装JupyterNotebook接下来,我们需要在计算机上安装JupyterNotebook。在命令提示符(Windows)或终端(Mac和Linux)中运行以下命令:pipinstalljupyter......
  • python+playwright 学习-43 Pyinstaller打包生成独立的可执行文件
    前言playwright与Pyinstaller结合使用来创建独立的可执行文件。本地化安装有同学提到说想打成一个exe的独立包,但是执行playwrightinstall会默认把chromium,firefox和webkit三个浏览器安装到系统目录。这样打包的时候就找不到启动的浏览器文件。于是就想到把浏览器文件下......
  • 可执行文件任意位置执行
    原文地址:https://www.cnblogs.com/liqinglucky/p/bin.html通常我们自己编译的可执行文件都是./执行。如果想做成系统任意目录可见,就可以将可执行文件拷贝到系统目录/usr/local/bin/。将自己的bin文件拷贝到系统目录。#cptest-bin-1.0.2/usr/local/bin/#ls/usr/local/bi......
  • python编译成可执行文件
    安装pipinstallpyinstaller执行pyinstaller--onefilexxxxx.py会在当前文件的同级目录生成dist文件夹,可执行文件就在里面......
  • Qt打包成文件夹包含可执行文件.exe
    这里使用Qt自带命令打包1.以release方式编译源代码。 2.编译成功后项目文件夹下会有一个Release后缀的构建项目,进入该目录,将其中的.exe可执行文件复制到一个单独的文件夹下。 3.选择安装Qt时自带的终端,进入刚才复制的文件夹路径下,这里我使用命令cd/dD:/Qttest才能成......
  • 将Java项目打包成exe可执行文件
    将Java项目打包成exe可执行文件这里将以idea中项目打包成exe可执行文件为例‍所选工具IDEA,JDK,exe4j‍IDEA官网JDK安装教程exe4j下载地址准备工作首先确保该程序能够正常运行​​‍打包流程简述把java项目打包成exe可执行文件简单来说只要两个步......
  • exe可执行文件如何逆向?有那些逆向工具
    逆向工程是对已编译的可执行文件进行分析的过程,以理解其内部结构、功能和逻辑。逆向工程可执行文件通常用于安全研究、漏洞分析、软件破解等领域。下面是一些常用的逆向工具和技术,以及一般的逆向流程。逆向工具:IDAPro: IDAPro是一款强大的反汇编工具,用于分析和逆向各种可执......
  • Rust 在可执行文件中嵌入代码版本信息
    缘起我想要最终编译出的可执行文件中包含代码仓库的版本信息fnmain(){println!("HelloRustHub");//gitrev-parse--shortHEAD letcommit_hash="6c1b45f";println!("commit_hash:{}",commit_hash);}为了自动获取这个"6c1b45f"很自然的我们可以......
  • mousocoreworker.exe 是 Windows 操作系统中的一个可执行文件。它是 Microsoft OneDri
    mousocoreworker.exe是Windows操作系统中的一个可执行文件。它是MicrosoftOneDrive的一部分,用于处理OneDrive文件同步和管理操作。Mousocoreworker.exe的主要功能如下:文件同步:它负责将本地计算机上的文件与OneDrive云存储进行同步,确保文件的实时更新和备份。文件管......