
Debloat 是一款 GUI 和 CLI 工具,用于从膨胀的可执行文件中移除多余的垃圾数据。
这里所说的多余垃圾数据,是指添加到二进制文件中、以防止其被送入沙箱的 100 - 800 MB 垃圾字节。这种添加垃圾数据的方法被称为对二进制文件进行“膨胀”(inflating)或“注水”(pumping)。Debloat 目前可处理 10 种最常见的膨胀手法。
由于采用 Python 构建,该应用程序可以轻松集成到其他工作流程中。目前,debloat 已被 CCCS 的 AssemblyLine 和 CERT Polska 的 MWDB 使用。
该程序可针对 Windows、MacOS、Linux 进行编译。GUI 和 CLI 的选项极少:其设计意图是尽可能简单,程序内部的逻辑会自动处理不同的使用场景。
预编译的二进制文件已包含在 Releases 中。
可以使用 pip install debloat 安装 debloat。使用 debloat 启动 CLI,使用 debloat-gui 启动 GUI。
对于高级用户,Debloat 还可以导入到其他脚本中,并单独调用其处理函数。
Debloat 的 GUI 旨在做到尽可能直观。 启动后,你可以将膨胀文件拖放到文本栏上,然后点击“处理文件”按钮。 一些技术信息会输出到滚动的文本框中,去除膨胀后的文件会写入文件来源的目录中。 听起来很简单?确实如此!
处理文件需要几秒钟。

使用 pip install debloat 安装后,运行命令 debloat。
debloat 可接受两个参数。第一个参数是必需的:要去除膨胀的文件。第二个参数是可选的:输出位置。如果未提供输出位置,文件将写入原始文件所在目录。
也可以使用命令 debloat-gui 从 CLI 启动 GUI。
目前还不能。 根据我最近的分析,debloat 能够在 97.8% 的情况下从膨胀文件中移除垃圾数据。
在之前的版本中,debloat 可能会意外移除过多的二进制内容。除非你使用 "--last-ditch" 开关,否则这种情况不会再发生。如果你需要用到这个开关,请考虑共享该样本以进行进一步分析。该选项现已添加到 GUI 中。从功能上讲,这个函数会移除整个覆盖层(如果存在的话)。在某些情况下这是必要的,因为找不到垃圾数据的模式---这最常见于压缩效果不佳的样本中。
膨胀数据被附加到已签名 PE 的末尾。
在下图中,膨胀数据被附加到了可执行文件的末尾。

已签名或未签名的加壳可执行文件。
在下图中,膨胀数据在加壳后被附加到了可执行文件上。

已签名可执行文件的膨胀数据位于 PE 的 .rsrc 节中。
在下图中,膨胀数据被识别为位于 .rsrc 节中,并将其从 PE 中移除。

膨胀数据被添加到 PE 节内部的情况。
在下图中,膨胀数据被包含在一个名为 [0] 的 PE 节中。

可执行文件为 Nullsoft Scriptable Installer System 可执行文件(NSIS,又称 Nullsoft)的情况。
这些 exe 是可能包含一个或多个文件的安装程序。其中包含的文件可能是恶意的,也可能不是。(有时攻击者添加文件仅仅是为了增大文件体积。)安装程序中的所有文件都会被提取到一个新目录中。该目录还包含安装程序的脚本,可以查阅该脚本来确定哪些文件可能是恶意的。
在下图中,Malcat 已将该可执行文件识别为 NSIS 安装程序。

有些使用场景下该工具无法生效。不过,我计划在公布太多细节之前先解决这些问题。
能够轻松处理膨胀可执行文件的工具似乎为数不多。我见到最多的两个工具是“foremost”(用于从磁盘镜像中恢复二进制文件)和“pecheck”。
Foremost 在垃圾字节为空字节 (0x00) 的情况下效果最佳,而当二进制文件带有伪造或真实签名时,它就显得力不从心。用它来移除文件中的膨胀数据并非其原本的用途。
Pecheck 已开发了 14 年以上,其命令行选项有些令人困惑。移除膨胀内容并非该脚本的主要功能。为了处理已签名的可执行文件,Pecheck 必须与另一个工具(disitool)配合使用。根据我的经验,pecheck 有时还会出错,返回一个体积是原始膨胀可执行文件两倍的可执行文件。如果你处理的二进制文件数量不多,这些因素似乎还可以接受,但随着二进制文件数量和处理方法的增加,就需要一个专门用于移除膨胀数据的工具。
Binary Refinery 是一款了不起的工具。它的开发初衷是成为命令行版的 CyberChef。虽然这两款工具都很出色,但它们都有一个共同的缺点:需要用户知道应该应用哪些配方。
有一些可靠的手动方法可以从二进制文件中移除膨胀数据,但这些方法可能非常繁琐,而且并非所有分析师都具备这样做的技能。这款工具免去了你需要了解如何手动移除膨胀数据的负担。此外,它还支持更好的规模化扩展。脚本中使用的原理也使得在需要自动化时能够更好地扩展。
请遵循适合你平台的构建命令。构建命令之间的主要区别在于图标的格式。
MacOS
pyinstaller --onefile --noconsole --additional-hooks-dir=./hook --icon=debloat.icns gui.py
Windows
pyinstaller --onefile --noconsole --additional-hooks-dir=./hook --icon=debloat.ico gui.py
Linux
pyinstaller --onefile --noconsole --icon=debloat.ico --collect-all tkinterdnd2 gui.py
可以考虑加入 debloat Discord。
特别感谢 Binary Refinery 的创建者 Jesko Hüttenhain。NSIS 提取功能基于他对 NSIS 文件格式的逆向工程。如果你还没用过 Binary Refinery,不妨去看看。
批量处理:处理一个目录中的所有文件并生成报告。
更好地支持在 debloat 之外使用这些处理方法。
支持无需解压即可去除膨胀。