Flipper Zero BadUSB Win_Debloater 实战:基于 UNC0V3R3D GoodUSB 集合的 Windows 一键去臃肿脚本解析
2026/9/14 14:36:57 网站建设 项目流程

Flipper Zero BadUSB Win_Debloater 实战:基于 UNC0V3R3D GoodUSB 集合的 Windows 一键去臃肿脚本解析

【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper

本文围绕 Flipper Zero 的 BadUSB 应用场景,深入剖析 UNC0V3R3D BadUSB 集合中 GoodUSB 分类下的 Win_Debloater 脚本:从 readme.md 声明的功能定位出发,逐行解析其 win_debloat.txt 载荷,揭示"提权 → 放行 Defender → 远程拉取脚本并执行"的完整链路,并给出安装部署、同类脚本对比与安全边界。读完本文,你将掌握这类"即插即用"去臃肿脚本的编写套路与运行原理,能够安全、合规地在授权环境中复现与二次开发。

一、脚本定位:卸载"不必要且潜在无用"的应用

Win_Debloater 是整个 GoodUSB 目录(Windows_Badusb/GoodUSB)下的一个成员。根据其自带的 readme.md,作者给出的定位非常明确:

This script will uninstall unnecessary and potentially useless apps.

即:卸载 Windows 系统中不必要、潜在无用的预装应用,也就是俗称的"系统去臃肿 / Debloat"。在 OOBE(开箱即用体验)阶段的 OEM 预装 Windows 上,这类应用往往以 UWP 应用包(Appx)的形式存在,占据磁盘空间并在后台运行,本脚本的目标正是清理这一类软件。

readme 中同时声明了脚本的使用方式与功能清单:

条目内容
使用方式(How to use)Plug and Play(即插即用,无需手动配置)
功能 1打开 PowerShell
功能 2下载 ps1 脚本
功能 3删除无用应用

"即插即用"是 GoodUSB 分类的核心设计哲学:把 Flipper Zero 通过 USB 插入目标 Windows 电脑,在 BadUSB 应用中选中脚本并运行,脚本会自主完成全部操作,用户无需在目标机器上做任何手工干预。要实现这一点,真正的工作全部沉淀在同目录的载荷文件 win_debloat.txt 中——它是标准的 DuckyScript 1.0 脚本,本仓库已完整收录,下文将对其进行逐行拆解。

二、三阶段工作流:从 readme 功能清单到载荷实现

readme 的三条功能清单实际上勾勒了脚本的完整工作流,而载荷文件将它们落实为可执行命令。结合两者,Win_Debloater 的运行过程可分为三个阶段:

  1. 提权阶段(打开 PowerShell):通过GUI r唤起运行对话框,输入命令启动一个以管理员权限运行的 PowerShell 控制台,并自动确认 UAC 提权提示;
  2. 放行阶段:向 Microsoft Defender 添加C:\Windows\system32目录的排除项,为后续下载与执行远程脚本扫清实时防护拦截;
  3. 下载执行阶段(下载 ps1 脚本 → 删除无用应用):使用 .NETWebClient从作者维护的资源仓库下载debloat_windows.ps1到本地,再以管理员权限启动该脚本完成真正的应用卸载,随后退出当前会话。

值得强调的是:本仓库只收录了"下载器/加载器"这一层(即win_debloat.txt),真正执行"删除无用应用"逻辑的debloat_windows.ps1远程脚本内容并不在本仓库中。这意味着从仓库证据可以确认的是"脚本如何被加载和执行",而"具体卸载了哪些应用包"取决于远程脚本的运行结果,读者在复现时应留意这一事实边界。

三、逐行解析 DuckyScript 载荷

以下为 win_debloat.txt 的完整内容(下载地址按规范做了脱敏,原载荷中指向作者维护的 ressources 仓库):

REM Author: UNC0V3R3D REM Description: Debloat windows. REM Version: 1.0 REM Category: GoodUSB DELAY 500 GUI r DELAY 500 STRING powershell Start-Process powershell -Verb runAs CTRL-SHIFT ENTER DELAY 1500 SHIFT TAB DELAY 500 ENTER DELAY 1500 STRING Add-MpPreference -ExclusionPath C:\Windows\system32 ENTER DELAY 500 STRING New-Object System.Net.WebClient | %{$_.DownloadFile('<作者资源仓库中的 debloat_windows.ps1 地址>', 'script.ps1'); Start-Process powershell.exe -Verb runAs -ArgumentList "-File script.ps1"}, exit ENTER

下面按执行顺序逐段说明其作用。

3.1 元信息注释块

前四行以REM开头,属于 DuckyScript 的注释(相当于 Bash 的#)。集合主 README.md 特别强调:REM注释贯穿整个集合的绝大多数脚本,用于解释整段流程,是新手阅读载荷的最佳入口。这里的四个字段分别标注了作者(Author: UNC0V3R3D)、用途描述(Debloat windows)、版本(Version: 1.0)与分类(Category: GoodUSB),Category: GoodUSB也解释了它被归入"对系统有益"一类而非攻击性分类的原因。

3.2 唤醒运行对话框并输入提权命令

DELAY 500 GUI r DELAY 500 STRING powershell Start-Process powershell -Verb runAs
  • DELAY 500:Flipper 插入后等待 500ms(单位毫秒),给系统枚举 USB 键盘设备留出时间;
  • GUI r:模拟Win + R,打开"运行"对话框;
  • 随后通过STRING输入命令powershell Start-Process powershell -Verb runAs

这条命令的含义是:先启动一个普通 PowerShell,再由它通过Start-Process -Verb runAs拉起一个**提升权限(管理员)**的 PowerShell 实例。-Verb runAs是 Windows 中请求 UAC 提权的标准方式。

3.3 处理 UAC 提权确认

CTRL-SHIFT ENTER DELAY 1500 SHIFT TAB DELAY 500 ENTER DELAY 1500
  • CTRL-SHIFT ENTER:在"运行"对话框中按下Ctrl+Shift+Enter,等效于"以管理员身份运行",此时系统弹出 UAC 用户账户控制提示;
  • DELAY 1500:等待 1.5 秒让 UAC 提示完全渲染;
  • SHIFT TAB+ENTER:在 UAC 提示窗口内移动焦点并回车确认。从脚本意图看,这是为了确保焦点落在确认按钮上并完成提权(不同 Windows 版本上 UAC 提示的默认焦点行为存在差异,SHIFT TAB是对焦点漂移的兜底处理)。

需要说明的是,UAC 提示在安全桌面上渲染时键盘事件的处理因系统版本而异,因此这组按键的精确行为存在版本差异,但从"后面紧接管理员 PowerShell 命令"的结果来看,脚本的意图是明确完成提权确认。

3.4 向 Defender 添加目录排除

STRING Add-MpPreference -ExclusionPath C:\Windows\system32 ENTER DELAY 500

Add-MpPreference -ExclusionPath C:\Windows\system32是 PowerShell 的 Microsoft Defender 配置指令,作用是把C:\Windows\system32加入 Defender 的实时防护排除路径。

这一步是后续下载与执行得以顺利进行的"前置放行":远程下载的脚本、script.ps1以及它执行的卸载操作都发生在高权限上下文中,添加系统目录排除项可以显著降低脚本被实时防护(尤其是行为监控)拦截的概率。从安全角度看,这是整条链路中最值得警惕的一步——它在目标机器上主动弱化了系统自身的防护配置,任何在授权环境之外运行本脚本的行为都带有明显风险。

3.5 下载远程脚本并执行

STRING New-Object System.Net.WebClient | %{$_.DownloadFile('<作者资源仓库中的 debloat_windows.ps1 地址>', 'script.ps1'); Start-Process powershell.exe -Verb runAs -ArgumentList "-File script.ps1"}, exit ENTER

这是整条链路的收尾,也是一条复合 PowerShell 表达式,可拆解如下:

片段作用
New-Object System.Net.WebClient创建 .NETWebClient对象,用于发起 HTTP 下载
\| %{ ... }%ForEach-Object的简写,$_即管道中的WebClient实例
$_.DownloadFile('<远程地址>', 'script.ps1')把作者资源仓库中的debloat_windows.ps1下载到当前工作目录并另存为script.ps1
Start-Process powershell.exe -Verb runAs -ArgumentList "-File script.ps1"以管理员权限启动一个新的 PowerShell 进程,执行本地script.ps1,真正的应用卸载逻辑在这里发生
, exit表达式收尾处的exit意图是在任务完成后退出当前 PowerShell 会话

一个值得注意的细节是:这里复用了与第 3.3 步相同的-Verb runAs提权手法——即使外层会话权限被系统策略限制,Start-Process -Verb runAs依然会再次触发一次 UAC 提权,从而保证script.ps1以最高权限运行。这与集合中绝大多数"下载-执行"型脚本使用的是同一套模板(详见下文第六节横向对比)。

四、从载荷结构看脚本的通用设计套路

结合 win_debloat.txt 本身,可以提炼出这类 GoodUSB"即插即用"脚本的固定结构,这也是阅读和理解本集合其他脚本的通用钥匙:

  1. 固定头部节奏DELAY 500 → GUI r → DELAY 500 → STRING powershell ...的延迟与按键节奏高度统一,目的是在所有 Windows 版本上保证按键时序的确定性;
  2. 双重提权:先在运行对话框用Ctrl+Shift+Enter触发 UAC,再用-Verb runAs递归提权,形成"双层保障";
  3. 防护放行前置:任何下载/执行动作之前,先执行Add-MpPreference -ExclusionPath C:\Windows\system32
  4. 下载器模式:载荷本体只做"下载 + 拉起",把重量级逻辑全部放在外部 ps1 中。这种设计的直接好处是:Flipper 端载荷可以保持极短、极稳定,后续调整卸载清单只需更新远程脚本而无需重新刷写 Flipper。

集合主 README.md 在"理解 DuckyScript"一节中补充了背景:所有脚本均以 DuckyScript 1.0 编写,PowerShell 及其脚本被用于约 97% 的载荷——因为 PowerShell 赋予了脚本对目标机器的完整控制能力。Win_Debloater 正是这一论断的典型样本。

五、安装部署与使用方法

5.1 将载荷放入 Flipper Zero

按照集合 README.md 的安装指引,只需把 win_debloat.txt 拷贝到 Flipper 的 SD 卡上即可:

  1. 克隆/下载本仓库,或直接取出win_debloat.txt文件;
  2. 电脑端使用 qFlipper 通过 USB 连接 Flipper,手机端使用 Flipper 官方 App 通过蓝牙连接;
  3. 将文件放入SD Card → badusb目录(qFlipper 的文件管理器可以直接拖入)。

5.2 运行流程

  1. 将 Flipper Zero 通过 USB 数据线插入目标 Windows 电脑;
  2. 在 Flipper 上进入BadUSB应用,选择win_debloat.txt
  3. 按中间键启动脚本。Flipper 会以 HID 键盘设备身份自动完成"打开运行框 → 提权 → 下载 → 执行"全流程,期间无需任何手工操作——这就是 readme 中 "Plug and Play" 的含义。

5.3 预期结果与验证

脚本运行后,目标机器上会出现两个阶段的 PowerShell 窗口:先是执行Add-MpPreference的管理员窗口,随后是执行script.ps1的窗口(完成卸载后按脚本意图自动退出)。验证方式包括:观察已安装应用列表(Get-AppxPackage)中预装应用是否减少、检查 Defender 排除项(Get-MpPreference | Select -ExpandProperty ExclusionPath)是否包含C:\Windows\system32。作者在 readme 中仅承诺"卸载不必要和潜在无用的应用",具体卸载清单以远程debloat_windows.ps1的实际内容为准。

六、与 GoodUSB 同族脚本的横向对比

Win_Debloater 并非孤立存在,它所属的 GoodUSB 目录下共有 7 个"对系统有益"的脚本,几乎全部复用同一套"提权 + Defender 放行 + 下载执行"模板。从本仓库实际收录的载荷文件可以确认:

脚本目录载荷文件用途(以载荷 REM 描述为准)差异点
Win_Debloaterwin_debloat.txtDebloat windows,卸载无用应用下载debloat_windows.ps1
Bloatware_removalbloatware_remover.txt移除无用软件下载remove_bloatware_regkeys.ps1,侧重注册表层面清理
Disable_Cortanadisable_cortana.txt禁用烦人的 Cortana 助手下载disable_cortana.ps1
OneDrive_Removaluninstall_onedrive.txt卸载 OneDrive下载uninstall_onedrive.ps1
Privacy_Windowsprivacy.txt提升 Windows 隐私性下载privacy.ps1
Activate_Windowsactivate_windows.txt使用 MAS 永久激活 Windows(作者 0xlunar,v1.1)不走下载器模板,改用irm ... | iex在线执行,再以111完成 MAS 菜单选择

其中前 5 个脚本的载荷与 Win_Debloater 高度同构——从GUI rAdd-MpPreference再到New-Object System.Net.WebClient的序列几乎逐字符一致,唯一区别是下载的远程 ps1 文件名。这一对照强烈印证了"下载器模板"在本集合中的复用程度:理解了 Win_Debloater 的载荷,就等于理解了 GoodUSB 大半脚本的执行机制。Activate_Windows 则展示了一种更精简的变体:直接用irm ... | iex实现在线执行,省略了先落盘再启动的两步过程。

七、安全边界与合规使用

该脚本的运行会带来如下不可忽视的事实影响,使用前必须充分知悉:

  • 修改系统防护配置:脚本会向 Defender 添加C:\Windows\system32排除路径,属于主动降低系统安全性的操作;
  • 执行远程下载的脚本:真正的卸载动作由网络下载的debloat_windows.ps1驱动,该脚本不在本仓库内,其行为随作者更新而变化,运行前无法从本地代码审计其完整内容;
  • 卸载动作不可逆:被卸载的预装应用通常无法通过常规界面恢复,且整个过程以最高权限执行;
  • 合规前提:集合 README.md 明确声明该项目仅用于教育目的,必须在获得授权的前提下使用;作者同时建议在个人电脑上测试前优先使用虚拟机,以避免对日常环境造成不可逆影响。本文及仓库不构成任何未经授权使用的鼓励。

八、常见问题排查

集合 README.md 的 Troubleshooting 一节给出了两类典型故障的处置建议,同样适用于 Win_Debloater:

  1. 脚本在错误的位置打开了奇怪的东西或把文本敲到了别处:通常是命令之间的DELAY过短。将DELAY 500调整为更大的数值(例如DELAY 700)即可;延迟单位是毫秒,数值代表按键间等待时长;
  2. Flipper 报错ERROR: line 5之类的随机错误:优先检查载荷文本本身——最常见的诱因是命令之间混入了随机空行;其次确认文件中不存在LOCALE ..指令(该指令在 Flipper 上兼容性不佳);最后检查报错行行首是否存在多余空格。

Win_Debloater 本身对时序较为敏感(涉及 UAC 提示、下载耗时等异步环节),若在较慢的机器上执行失败,优先按上述第 1 条放大各DELAY数值重试。

结语

Win_Debloater 是 Flipper Zero BadUSB 生态中"自动化系统维护"路线的典型样本:readme 以极简的三条功能清单定义了"打开 PowerShell → 下载 ps1 → 删除无用应用"的即插即用体验,载荷文件则用不到 20 行 DuckyScript 实现了"运行框唤起 → UAC 提权 → Defender 放行 → 远程脚本下载执行"的完整自动化链路。理解它的关键是把握两点:一是其"下载器"架构——真正的去臃肿逻辑外置于远程 ps1,本仓库仅提供加载层;二是它与 GoodUSB 同族脚本共享的模板化设计——掌握了它,即可快速读懂集合中其余大部分脚本。在复现或二次开发时,请始终将其限定在获得授权、隔离验证的环境内。

【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询