news 2026/9/14 13:26:54

Flipper Zero BadUSB:用 Ducky 脚本全自动安装 Windows 10 Pro 22H2 的完整实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flipper Zero BadUSB:用 Ducky 脚本全自动安装 Windows 10 Pro 22H2 的完整实战

Flipper Zero BadUSB:用 Ducky 脚本全自动安装 Windows 10 Pro 22H2 的完整实战

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

本文基于 Flipper Zero 资源仓库中 emptythevoid 的win10_install方案展开:讲解如何用两枚 Ducky 脚本通过 BadUSB 接口自动操作 Windows 10 安装器的 GUI,完成从分区、装机到 OOBE 用户配置的无人值守流程,并逐一剖析脚本中的按键时序、网络分支与必须人工修改的配置项。读完后,你将理解 Ducky 脚本驱动 GUI 自动化的完整方法论,以及这类"重自动化、轻效率"脚本的时序设计与风险点。

方案概览:两段式无人值守安装

该方案的目标系统为Windows 10 Pro 22H2,核心设计哲学在 README 中写得很明确:"强调自动化程度,而非效率"(Emphasis is on automation, not efficiency)——脚本里大量使用远超必要的长延迟,用时间冗余换取按键落点的确定性。整套流程被拆成两枚脚本,分别覆盖安装器的两个阶段:

阶段脚本文件覆盖范围
Part 1win10_part1.txt初始安装:语言选择、许可协议、自定义安装、删除所有现有分区、让 Windows 创建全新分区方案
Part 2win10_part2.txt安装完成后的 OOBE 设置:区域/键盘、网络选择、创建初始本地账户、安全问题和隐私选项

使用时的基本操作:把 Flipper 作为 USB 设备插入从安装介质启动的计算机,Part 1 从"选择语言"界面开始执行;系统安装完成后重启,进入 OOBE 的"Let's start with the region"界面时执行 Part 2。整个过程无需人工介入(前提是你已按下面所述改好 Part 2 中的配置项)。

Part 1 逐段解析:抹掉磁盘,交给 Windows 重建分区方案

Part 1 脚本的完整逻辑如下,按界面状态逐步推进:

REM Target: Windows 10 Pro 22H2 REM Start at the Language selection screen REM Enter language and click Next. Assume defaults. TAB TAB TAB ENTER DELAY 100 REM Click Install Now ENTER DELAY 20000 REM Windows license SPACE TAB ENTER DELAY 100 REM Type of install = Custom TAB ENTER DELAY 500

对应 win10_part1.txt:

  • 语言界面:三个TAB配合ENTER直接采用默认语言并进入下一步;
  • "Install Now":点击后给了DELAY 20000(20 秒)——这是典型的重冗余设计,保证安装器完成内部初始化;
  • 许可协议SPACE勾选"我接受许可条款",再进入下一步;
  • 安装类型TABCustom(仅安装 Windows(高级))ENTER,即脚本注释所说的Type of install = Custom

核心手法:逐个删除所有分区

这是 Part 1 的关键部分(win10_part1.txt):

REM Remove all partitions and start fresh REM Note: If default partitions are absent, it still creates the partitions and completes REM Defaults to "Primary" TAB TAB ENTER DELAY 100 LEFT ENTER DELAY 500 REM Now at System TAB TAB ENTER DELAY 100 LEFT ENTER DELAY 500 REM Now at "unallocated" DOWN REM now at "MSR" TAB TAB ENTER DELAY 100 LEFT ENTER DELAY 500 REM back at "unallocated" DOWN REM now at "recovery" TAB TAB ENTER DELAY 100 LEFT ENTER DELAY 15000

从脚本结构看,其操作模式是固定的"选中分区 →TAB TAB ENTER打开 Delete 下拉 →LEFT ENTER确认删除"的循环,依次处理了 Windows 默认磁盘布局中的Primary(主分区)→ System(系统分区)→ MSR(微软保留分区)→ Recovery(恢复分区)四个分区。注释特别说明:即使某些默认分区不存在,脚本依然会按此路径走完,流程仍能正确结束——这种"面向最坏情况枚举"的写法正是"重自动化"思路的体现。最后一个删除操作后给了DELAY 15000(15 秒),等待磁盘上空间回收、列表刷新为 100% unallocated。

创建全新分区并继续安装

剩余步骤(win10_part1.txt):

REM now at 100% unallocated. Click New TAB TAB ENTER DELAY 100 REM use all space (default) TAB ENTER DELAY 100 REM notice about additional partitions ENTER DELAY 5000 REM press Next TAB TAB TAB TAB TAB ENTER

即:在 unallocated 状态点New,采用默认的"使用全部可用空间",确认 Windows 弹出的"会额外创建一些分区"提示,最后连续TABNext开始写入系统。至此 Part 1 结束,安装器进入漫长的复制与驱动阶段,机器会自行重启。

Part 2 逐段解析:OOBE 阶段的全自动设置

Part 2 从 OOBE 的"Let's start with the region"界面开始(win10_part2.txt)。开头先做三件默认操作:

REM Defaults to United States ENTER DELAY 5000 REM Defaults to US keyboard layout ENTER DELAY 5000 REM Add second keyboard layout. Defaults to Skip ENTER DELAY 5000

区域默认 United States,键盘布局默认 US,第二个键盘布局选择 Skip。每步之间统一DELAY 5000,保证界面切换完成。

网络分支:始终选择"我没有 Internet"

这是 README 中特别强调的设计决策。作者指出:Ducky 脚本从动态列表中精确选中某个 Wi-Fi SSID 是不可靠的,因此脚本配置为始终点击 "I don't have internet"。脚本内同时保留了两套分支,需要你根据目标机器的实际网络情况二选一启用(win10_part2.txt):

REM No internet available, but assume wifi works and detects at least one access point REM Need to insert a long delay in case it enumerates Wifi networks DELAY 15000 TAB DELAY 100 TAB DELAY 100 TAB DELAY 100 REM Should be on "I don't have internet" ENTER DELAY 5000 REM No Internet Available, no wifi at all REM TAB REM ENTER REM DELAY 5000

两个变体的区别:

  • 有 Wi-Fi 硬件(扫描时会列出至少一个接入点):需要DELAY 15000等待系统枚举完 Wi-Fi 网络,然后三次TAB落在"I don't have internet"上回车;
  • 完全没有 Wi-Fi:界面更简单,TAB ENTER即可,脚本中已将其注释掉,启用时需手动取消注释并去掉上面分支。

接着在"继续有限的体验"界面再五次TABContinue with limited setup,跳过强制联网。这一整套设计的直接后果是:安装过程不触网,也就不会强制你使用 Microsoft 账户——这正是"本地账户"路线成立的前提。

必须人工配置的部分:STRING 占位符

README 明确要求"Make sure to fill in the STRINGs"。Part 2 中连续三段STRING分别对应用户名、密码、密码确认,之后三段是安全问题的答案(win10_part2.txt):

REM Who's going to use this PC? STRING ENTER DELAY 5000 REM Create a super memorable password STRING ENTER DELAY 5000 REM Confirm password STRING ENTER DELAY 5000 REM Security question 1 DOWN TAB STRING ENTER DELAY 5000

注意脚本头部被注释掉的变量块(win10_part2.txt):

REM FLIPPER DOESN'T SUPPORT VARIABLES?? REM VAR $USER = REM VAR $PASSWORD = REM VAR $RANDOM1 = REM VAR $RANDOM2 = REM VAR $RANDOM3 =

从这一注释结构可以看出,作者当时认为 Flipper 的 Ducky 方言不支持VAR变量,因此采用"直接在字符串字面量里填值"的方案。你需要把这五个空STRING行改为STRING your_usernameSTRING your_password等形式。安全问题一律采用下拉框的第一项(每个问题先DOWNTAB即选中默认首项),README 说明脚本假设这些问题"不重要",如需自定义请自行调整。

隐私开关与 Cortana 的收尾处理

OOBE 最后两个界面用纯TAB/SPACE组合完成(win10_part2.txt):

  • 跳过人脸识别登录:三次TABENTER
  • "Let's make this PC yours" 隐私页:五次TAB后用SPACE连续关闭六个隐私开关(诊断数据、广告 ID、个性化建议等),脚本的意图是disable all privacy defaults
  • Cortana 页:四次TAB落在 "Let's skip it for now",ENTER结束 OOBE。

脚本到此结束,机器进入桌面,一个只有本地账户、无联网痕迹、隐私开关全关的 Windows 10 即完成部署。

时序设计与时序失配的后果

README 专门用一节讲 timing,这是本方案最实用的部分:

  1. 隐含的硬件假设:脚本假设目标机器"比较快",配有SSD/NVMe。所有DELAY 500 / 5000 / 15000 / 20000的取值都以此为基准。
  2. 偏慢的后果:如果机器比预期慢(界面尚未切到预期状态时按键已经送达),按键会落到意料之外的控件上——README 指出最常见的事故是误触发系统的语音助手(Windows 的激活短语)。
  3. 偏快的特殊风险:账户创建阶段如果执行得过快,存在密码被误填进"用户名"输入框的可能性——这是比"功能失效"更隐蔽的失误,装完才发现密码已经变成了账户名。

由此可总结出一类 Ducky GUI 脚本的通用教训:Ducky 没有"等待某个控件出现"的原语,只能用固定时延做"盲等";时延宁长勿短,且必须与目标机器的实际速度匹配。README 的 TODO 一节也印证了这一点:作者计划为 Part 2 设定"一个标准更长的时延",因为脚本中Delay 100用得太密集(README)。

适用前提与已知限制

汇总 README 与脚本中的约束,使用前应确认:

  • 目标系统为Windows 10 Pro 22H2,从安装介质启动后执行;
  • Part 1 会删除目标磁盘上的所有分区,务必确认盘上没有需要保留的数据;
  • 执行 Part 2 前必须替换五处STRING配置(用户名、密码、密码确认、三个安全问题答案);
  • 必须根据目标机有无 Wi-Fi 硬件选择对应的"无 Internet"分支;
  • 若目标机插着以太网,脚本会尝试联网,README 的 TODO 表明"有 Ethernet/Wifi 时的可选代码块"当时尚未加入,脚本整体是按"无网络可用"的假设运行的;
  • 按键时序按 SSD/NVMe 的速度调校,机械硬盘或性能较差的机器需要自行加大时延。

延伸阅读:仓库中的同族脚本

同目录下还有几组可以直接对照参考的脚本,均位于 emptythevoid-BadUSB 集合中:

  • win11_install:面向 Windows 11 ISO 安装介质的两段式脚本,同样要求修改用户名/密码/三个安全问题;其 README 还额外说明了插以太网时 Part 2 会先释放 DHCP 地址、结束后PAUSE等待按键恢复网络的做法;
  • windows_helpers:若干 Windows 小工具脚本(检查更新、时区设置、关机命令行等);
  • badusb-js:从 Flipper 串口读取数据的 Node.js 侧配合脚本,展示了 Flipper 脚本与上位机程序联动的另一种玩法。

小结

这套win10_install脚本是 Ducky 驱动 GUI 自动化的一次完整示范:用界面状态机(每个 TAB/ENTER 都对应明确的界面位置)+ 保守的固定时延 + 面向缺失元素的枚举式处理,把 Windows 10 安装器中最繁琐的分区操作和 OOBE 设置变成了两段"插入即跑"的无人值守流程。理解它,也就掌握了 BadUSB 脚本操作任意桌面 GUI 的通用方法:先离线走一遍目标界面记录按键路径,再为每个不确定点预留冗余时延,最后把需要变化的信息(账户、密码)显式暴露为必须人工填写的占位符。

参考文件

  • 方案说明 README
  • Part 1 安装脚本
  • Part 2 OOBE 脚本
  • emptythevoid-BadUSB 集合说明
  • Windows 11 安装脚本(对照)

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 13:25:25

相声与脱口秀融合:高晓攀《说点别的》的创新实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 13:25:23

工业级定制线缆设计核心逻辑与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 13:24:42

VPSO向量化粒子群优化MATLAB例程:参数调优与收敛诊断

简介:这是一份基于Matlab实现的粒子群优化算法(VPSO)完整例程,面向需要快速上手群体智能优化算法的工科学生、科研人员及算法爱好者。资源聚焦VPSO核心流程,涵盖粒子群初始化、速度与位置更新、适应度计算、边界处理及…

作者头像 李华
网站建设 2026/9/14 13:22:33

AVL Cruise与MATLAB联合仿真在整车性能开发中的应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华