Squiblydoo/debloat
GitHub: Squiblydoo/debloat
Debloat 是一个用于从可执行文件中自动移除规避沙箱检测所添加的臃肿垃圾数据的 GUI 和 CLI 安全分析工具。
Stars: 451 | Forks: 37

# Debloat
Debloat 是一个 GUI 和 CLI 工具,用于从臃肿的可执行文件中移除多余的垃圾数据。
这里所说的多余垃圾数据,是指为了让二进制文件逃避沙箱检测而添加进去的 100 到 800 MB 的无效字节。这种添加无效字节的方法被称为二进制文件的“充气”或“注水”。目前,Debloat 能够处理 10 种最常见的充气手段。
由于该程序是使用 Python 构建的,因此可以轻松地整合到其他工作流中。目前,debloat 已被 [CCCS 的 AssemblyLine](https://www.cyber.gc.ca/en/tools-services/assemblyline) 和 [CERT Polska 的 MWDB](https://github.com/CERT-Polska/karton-archive-extractor) 所使用。
该程序可以针对 Windows、MacOS 和 Linux 进行编译。其 GUI 和 CLI 的配置选项非常少:它的目标就是尽可能简单,程序内部的逻辑会自动处理各种不同的使用场景。
编译好的二进制文件已经包含在[发布页面](https://github.com/Squiblydoo/debloat/releases/)中。
可以使用 `pip install debloat` 安装 debloat。使用 `debloat` 命令启动 CLI,使用 `debloat-gui` 启动 GUI。
对于高级用户,Debloat 还可以导入到其他脚本中,并单独调用其中的处理函数。
## 如何使用 GUI?
Debloat 的 GUI 旨在尽可能直观。
启动后,你可以将臃肿的文件拖放到文本框中,然后按下“Process file”按钮。
一些技术信息将会打印在滚动文本框中,而去除臃肿数据后的文件将被写入到提取该文件的原始目录中。
听起来很简单吧?确实如此!
处理文件只需要几秒钟时间。
 ## 如何使用 CLI? 使用 `pip install debloat` 安装完成后,即可使用 `debloat` 命令。
`debloat` 可以接受两个参数。第一个参数是必需的:即需要进行瘦身的文件。第二个参数是可选的:即输出位置。如果没有提供输出位置,处理后的文件将被写入到原始文件所在的目录中。 也可以在 CLI 中使用 `debloat-gui` 命令来启动 GUI。 ## 它总能生效吗? 目前还不能。 根据我最近的分析,debloat 能够在 [97.8% 的情况下成功移除臃肿文件中的垃圾数据](https://x.com/SquiblydooBlog/status/1795419380991291424)。 在之前的版本中,`debloat` 可能会意外地删除过多二进制文件的内容。除非你使用 "--last-ditch" 开关,否则现在不会再出现这种情况了。如果你确实需要使用这个开关,请考虑分享样本以便进行进一步分析。目前此选项也已添加到 GUI 中。在功能上,该选项的作用是移除整个 overlay(如果存在的话)。在某些情况下这是必要的,因为没有找到垃圾数据的特征模式——这通常出现在压缩效果不佳的样本中。 ## 使用场景(图片来自 [Malcat](https://malcat.fr/)) ### 完全支持 - [x] 附加在已签名 PE 文件末尾的臃肿数据。
在下图中,臃肿数据被附加到了可执行文件的末尾。
 - [X] 已签名或未签名的压缩可执行文件。
在下图中,臃肿数据在可执行文件被加壳后追加到了其中。
 - [X] 包含臃肿数据的已签名可执行文件位于 PE 的 .rsrc 节区中。
在下图中,臃肿数据被识别为位于 .rsrc 节区中,并已从 PE 文件中被移除。
 - [X] 臃肿数据被添加到 PE 节区内部的情况。
在下图中,臃肿数据被包含在名为 [0] 的 PE 节区中。
 - [X] 可执行文件是 Nullsoft Scriptable Installer System 可执行文件(即 NSIS 或称 Nullsoft)的情况 这类 exe 文件是安装程序,可能包含一个或多个文件。所包含的文件可能是恶意的,也可能是非恶意的。(有时攻击者添加文件仅仅是为了增加文件大小。)安装程序内的所有文件都将被解压到一个新目录中。该目录还包含安装程序的脚本,可以通过查阅脚本来确定哪些文件可能是恶意的。 在下图中,Malcat 已识别出该可执行文件是一个 NSIS 安装程序。  # 部分支持 - [X] 垃圾数据过于随机且熵值过高的情况。在这些情况下,可以使用名为 "--last-ditch" 的开关/选项 ### 其他使用场景 确实存在该工具无法处理的使用场景。不过,我计划在过多公开这些情况之前将它们一一解决。 ## 为什么要开发这个工具? 目前看来,能够轻松处理臃肿可执行文件的工具寥寥无几。我见得最多的两个工具是 “foremost”(旨在从磁盘镜像中恢复二进制文件)和 “pecheck”。 [Foremost](https://www.kali.org/tools/foremost/) 在垃圾字节为空字节 (0x00) 的情况下效果最好,但当二进制文件带有伪造或真实的签名时就会显得捉襟见肘。使用它来移除文件中的臃肿数据并非其最初的设计目的。 [Pecheck](https://github.com/DidierStevens/DidierStevensSuite/blob/master/pecheck.py) 经过了 14 多年的开发,包含一些令人费解的命令行选项。移除臃肿内容并不是该脚本的主要功能。Pecheck 必须与另一个工具([disitool](https://blog.didierstevens.com/programs/disitool/))结合使用才能处理已签名的可执行文件。根据我的经验,在其他一些情况下,pecheck 也会出现混乱,返回的可执行文件大小甚至是原始臃肿文件的两倍。如果你只是处理少量的二进制文件,所有这些因素似乎都可以接受,但随着二进制文件数量和处理方法的增加,就需要一个专门用于移除臃肿数据的工具了。 [Binary Refinery](https://github.com/binref/refinery) 是一款非常出色的工具。它的编写初衷是成为命令行版的 [CyberChef](https://github.com/gchq/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](discord.gg/dvGXKaY5qr)。 ## 这个项目接下来的规划? 批处理:处理目录中的所有文件并生成报告。 更好地支持在 debloat 之外使用处理方法。 支持在不解压的情况下进行瘦身。
 ## 如何使用 CLI? 使用 `pip install debloat` 安装完成后,即可使用 `debloat` 命令。
`debloat` 可以接受两个参数。第一个参数是必需的:即需要进行瘦身的文件。第二个参数是可选的:即输出位置。如果没有提供输出位置,处理后的文件将被写入到原始文件所在的目录中。 也可以在 CLI 中使用 `debloat-gui` 命令来启动 GUI。 ## 它总能生效吗? 目前还不能。 根据我最近的分析,debloat 能够在 [97.8% 的情况下成功移除臃肿文件中的垃圾数据](https://x.com/SquiblydooBlog/status/1795419380991291424)。 在之前的版本中,`debloat` 可能会意外地删除过多二进制文件的内容。除非你使用 "--last-ditch" 开关,否则现在不会再出现这种情况了。如果你确实需要使用这个开关,请考虑分享样本以便进行进一步分析。目前此选项也已添加到 GUI 中。在功能上,该选项的作用是移除整个 overlay(如果存在的话)。在某些情况下这是必要的,因为没有找到垃圾数据的特征模式——这通常出现在压缩效果不佳的样本中。 ## 使用场景(图片来自 [Malcat](https://malcat.fr/)) ### 完全支持 - [x] 附加在已签名 PE 文件末尾的臃肿数据。
在下图中,臃肿数据被附加到了可执行文件的末尾。
 - [X] 已签名或未签名的压缩可执行文件。
在下图中,臃肿数据在可执行文件被加壳后追加到了其中。
 - [X] 包含臃肿数据的已签名可执行文件位于 PE 的 .rsrc 节区中。
在下图中,臃肿数据被识别为位于 .rsrc 节区中,并已从 PE 文件中被移除。
 - [X] 臃肿数据被添加到 PE 节区内部的情况。
在下图中,臃肿数据被包含在名为 [0] 的 PE 节区中。
 - [X] 可执行文件是 Nullsoft Scriptable Installer System 可执行文件(即 NSIS 或称 Nullsoft)的情况 这类 exe 文件是安装程序,可能包含一个或多个文件。所包含的文件可能是恶意的,也可能是非恶意的。(有时攻击者添加文件仅仅是为了增加文件大小。)安装程序内的所有文件都将被解压到一个新目录中。该目录还包含安装程序的脚本,可以通过查阅脚本来确定哪些文件可能是恶意的。 在下图中,Malcat 已识别出该可执行文件是一个 NSIS 安装程序。  # 部分支持 - [X] 垃圾数据过于随机且熵值过高的情况。在这些情况下,可以使用名为 "--last-ditch" 的开关/选项 ### 其他使用场景 确实存在该工具无法处理的使用场景。不过,我计划在过多公开这些情况之前将它们一一解决。 ## 为什么要开发这个工具? 目前看来,能够轻松处理臃肿可执行文件的工具寥寥无几。我见得最多的两个工具是 “foremost”(旨在从磁盘镜像中恢复二进制文件)和 “pecheck”。 [Foremost](https://www.kali.org/tools/foremost/) 在垃圾字节为空字节 (0x00) 的情况下效果最好,但当二进制文件带有伪造或真实的签名时就会显得捉襟见肘。使用它来移除文件中的臃肿数据并非其最初的设计目的。 [Pecheck](https://github.com/DidierStevens/DidierStevensSuite/blob/master/pecheck.py) 经过了 14 多年的开发,包含一些令人费解的命令行选项。移除臃肿内容并不是该脚本的主要功能。Pecheck 必须与另一个工具([disitool](https://blog.didierstevens.com/programs/disitool/))结合使用才能处理已签名的可执行文件。根据我的经验,在其他一些情况下,pecheck 也会出现混乱,返回的可执行文件大小甚至是原始臃肿文件的两倍。如果你只是处理少量的二进制文件,所有这些因素似乎都可以接受,但随着二进制文件数量和处理方法的增加,就需要一个专门用于移除臃肿数据的工具了。 [Binary Refinery](https://github.com/binref/refinery) 是一款非常出色的工具。它的编写初衷是成为命令行版的 [CyberChef](https://github.com/gchq/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](discord.gg/dvGXKaY5qr)。 ## 这个项目接下来的规划? 批处理:处理目录中的所有文件并生成报告。 更好地支持在 debloat 之外使用处理方法。 支持在不解压的情况下进行瘦身。
标签:DAST, DNS 反向解析, Python, 二进制处理, 恶意软件分析, 无后门, 漏洞挖掘, 逆向分析, 逆向工具