// 红队渗透 · 2025-05-30

基于 UPX 与 exe2hex 的可执行文件压缩、转换与传输技巧

在渗透测试、红队演练以及恶意软件分析等诸多关键领域,文件的高效传输与精准执行堪称是贯穿始终的核心操作。然而,在实际场景中,网络防火墙以及各类复杂的安全防护措施往往会对文件的正常传输与执行构成严峻阻碍。为了突破这些限制,渗透测试者与攻击者们精心钻研并掌握了一系列高超的技巧,其中文件压缩、加密以及格式转换等方法更是被广泛应用。本文将深入剖析如何巧妙运用 UPX 和 exe2hex 这两款强大工具来压缩、转换可执行文件,并借助脚本实现文件的稳定传输,最终在目标机器上精准恢复并顺利执行。


一、UPX:可执行文件压缩的利器

(一)UPX 简介

UPX(Ultimate Packer for eXecutables)作为一款备受瞩目的可执行文件压缩工具,凭借其卓越的压缩性能在众多同类工具中脱颖而出。它采用前沿的高效算法,能够针对各类可执行文件,尤其是 Windows 平台下广泛使用的 PE(Portable Executable)格式文件,实现深度压缩。在压缩过程中,UPX 会在不损害文件原有功能的基础上,显著缩减文件体积,使其在传输环节更为便捷,同时在目标机器执行时又能迅速完成解压缩,无缝恢复文件的完整功能。正因如此,UPX 在渗透测试与攻击领域备受青睐,成为众多专业人士减小文件体积、突破防火墙及其他防护屏障的首选工具之一。

(二)UPX 的使用指南

1. 安装 UPX

在 Kali Linux 这一渗透测试专用操作系统中,UPX 已经被默认预装,为用户提供了极大的便利。但若在其他场景下使用,或者出于某些特殊需求需要重新安装,可以通过以下简洁高效的命令完成安装:

sudo apt-get install upx

执行该命令后,系统会自动从软件源下载并安装 UPX 及其相关依赖组件,确保工具能够正常运行。

2. 使用 UPX 压缩 EXE 文件

假设你手中有一个名为 example.exe 的 Windows 可执行文件,准备将其压缩以便后续操作。此时,只需运用以下命令即可轻松实现压缩:

upx -9 example.exe

在这里,-9 参数代表着启用 UPX 提供的最高压缩级别,力求将文件体积压缩到极致。经过这一操作,example.exe 文件的大小将得到显著减小,这不仅极大地降低了文件在传输过程中的带宽占用,还使其在面对各类安全检测设备时,更有可能凭借较小的体积和独特的压缩特征巧妙绕过检测,从而为后续的渗透测试工作铺平道路。

(三)UPX 的独特价值

  • 显著压缩文件体积:借助 UPX 的高效压缩算法,可执行文件的大小往往能够被压缩至原始大小的 30% 甚至更小。这一特性在面对网络带宽受限、传输速度缓慢的场景时,优势尤为明显,能够有效缩短文件传输时间,提升工作效率。
  • 增强隐蔽性以绕过防护:在网络安全防护体系日益严密的当下,许多防病毒软件和入侵检测系统主要针对未压缩的可执行文件进行特征检测。而经过 UPX 压缩后的文件,其内部结构和特征码会发生显著变化,这使得部分防病毒软件难以直接识别其恶意属性,从而为文件的传输和执行创造了有利条件,大大提高了渗透测试的成功率。

二、exe2hex:巧妙转换文件格式以突破传输限制

尽管 UPX 压缩可执行文件在一定程度上能够减小文件体积并提升隐蔽性,但在某些特定的网络安全防护环境中,即使是经过压缩的 .exe 文件也可能会被网络防火墙或高级检测系统拦截。针对这一棘手问题,exe2hex 工具应运而生,它能够将 .exe 文件转换为十六进制字符串(Hex),进而通过文本方式进行传输,从根本上改变文件的传输形态,从而有效规避诸多网络传输限制。

(一)exe2hex 的安装与使用

1. 安装 exe2hex

在 Kali Linux 系统环境下,exe2hex 的安装同样便捷高效。通过执行以下命令,即可快速完成安装:

sudo apt-get install exe2hex

系统会自动处理安装过程中的各项细节,确保工具能够顺利投入使用。

2. 将 EXE 文件转换为 Hex 格式

借助 exe2hex 命令,可以轻松将 .exe 文件转换为十六进制格式,并将其保存为 .cmd 脚本文件,便于后续的传输操作。例如,若要将 example.exe 转换为 example.cmd,只需运行以下命令:

exe2hex -x example.exe -p example.cmd

执行该命令后,exe2hex 会读取 example.exe 文件的内容,将其逐字节转换为对应的十六进制字符串,并将这些字符串按照特定的格式组织到 example.cmd 文件中。此时,example.cmd 文件本质上是一个包含原始 .exe 文件十六进制表示的文本文件,其内容完全符合文本传输协议的要求,能够轻松绕过大多数网络防火墙和基于文件格式检测的安全系统,从而实现安全、高效的文件传输。

(二)在目标 Windows 系统中恢复 EXE 文件

当 example.cmd 脚本文件成功传输到目标 Windows 系统后,关键的一步便是将其中的十六进制内容精准恢复为原始的 .exe 文件,并确保其能够正常执行。这一过程可以通过编写并运行 PowerShell 脚本来高效完成。以下是实现该功能的 PowerShell 脚本示例:

$p = Get-Content -readcount 0 -path './example.hex'
$l = $p[0].length
$b = New-Object byte[] ($l / 2)
$x = 0
for ($i = 0; $i -le $l - 1; $i += 2) {
    $b[$x] = [byte]::Parse($p[0].Substring($i, 2), [System.Globalization.NumberStyles]::HexNumber)
    $x += 1
}
set-content -encoding byte 'example.exe' -value $b
Remove-Item -force example.hex

为了便于在实际操作中快速复制和使用,该脚本还提供了一个简洁的单行版本:

powershell -Command "$h=Get-Content -readcount 0 -path './xx.hex';$l=$h[0].length;$b=New-Object byte[] ($l/2);$x=0;for ($i=0;$i -le $l-1;$i+=2){$b[$x]=[byte]::Parse($h[0].Substring($i,2),[System.Globalization.NumberStyles]::HexNumber);$x+=1};set-content -encoding byte 'xx.exe' -value $b;Remove-Item -force xx.hex;"

(三)脚本解析与执行逻辑

  1. 读取十六进制文件内容:Get-Content -readcount 0 -path './example.hex' 命令负责从指定路径下的 .hex 文件中读取所有内容,将其存储到变量 $p 中,为后续的处理操作提供数据基础。
  2. 创建字节数组:New-Object byte[] ($l / 2) 根据十六进制字符串的长度动态创建一个字节数组 $b,其大小恰好能够容纳转换后的字节数据,确保数据存储的高效性。
  3. 循环转换十六进制字符串为字节数组:通过 for 循环,脚本逐个处理十六进制字符串中的字符。每次循环提取两个字符(一个字节的十六进制表示),利用 [byte]::Parse 方法将其转换为对应的字节值,并将其存储到字节数组 $b 中。变量 $x 作为数组索引,随着循环的推进不断递增,确保字节数据能够正确、有序地存入数组。
  4. 将字节数组写入新的 EXE 文件:set-content -encoding byte 'example.exe' -value $b 命令将存储在字节数组 $b 中的数据以二进制格式写入到新的 .exe 文件中,从而完成从十六进制字符串到原始可执行文件的完美恢复。
  5. 清理临时文件:Remove-Item -force example.hex 命令负责删除临时的 .hex 文件,消除痕迹,避免在目标系统中留下不必要的文件,降低被发现的风险。

(四)恢复过程的最终成果

经过上述脚本的精准操作,目标 Windows 系统上将成功生成一个名为 example.exe 的文件,其内容与原始的 .exe 文件完全一致,没有任何差异。

原文 https://blog.csdn.net/2301_79518550/article/details/145812727