iodn/tap-ducky

GitHub: iodn/tap-ducky

利用 Root 权限将 Android 设备转化为 USB Rubber Ducky,支持完整的 DuckyScript 语法、HID 设备模拟及任务调度功能。

Stars: 31 | Forks: 5

# TapDucky - Android USB HID 击键注入器 TapDucky icon

TapDucky - Android USB HID Keystroke Injector

Open-source DuckyScript runner for rooted Android with USB Gadget (ConfigFS) support
TapDucky lets you create, customize, schedule, and run DuckyScript on Android by emulating a USB keyboard, mouse, or composite HID device for authorized testing and automation. It includes payload parameterization, multiple scheduler triggers, execution logs, and a GitHub-backed payload library with automatic DuckyScript validation and optional Digispark .ino conversion.

[![GitHub 许可证](https://img.shields.io/github/license/iodn/tap-ducky)](LICENSE) [![问题](https://img.shields.io/github/issues/iodn/tap-ducky.svg)](https://github.com/iodn/tap-ducky/issues) [![合并请求](https://img.shields.io/github/issues-pr/iodn/tap-ducky.svg)](https://github.com/iodn/tap-ducky/pulls) [![Android 版本](https://img.shields.io/badge/Android-11.0%2B-green.svg)](https://www.android.com) [![需要 Root](https://img.shields.io/badge/Root-Required-red.svg)](#)
## 概述 - USB HID gadget 配置文件(在受支持/已 root 的设备上无需外部 USB dongle): - Keyboard(键盘)、Mouse(鼠标)和 Composite(复合)配置文件,支持可配置的 VID/PID、制造商/产品字符串以及功耗。 - DuckyScript 管道: - 实时验证,包含人性化的错误/警告提示、占位符参数、延迟倍增器,以及可选的用于模拟人类输入节奏的抖动(jitter)。 - Payload(载荷)管理: - 创建/编辑 Payload,包含名称/描述/标签/参数,快速分享/导出,以及内置模板/向导。 - GitHub Payload Store: - 添加源,浏览仓库,预览文件并验证,导入支持的脚本;自动检测 DuckyScript 并在可能的情况下转换 Digispark `.ino` 草图。 - Scheduler(调度器): - 支持一次性(指定日期/时间)、App 冷启动、App 前台运行,或 HID session 激活(device_connected)时触发,并可选每日时间窗口。 - Execution & Logs(执行与日志): - 分页式执行视图,参数提示,运行/取消,执行历史,以及支持导出/清除和级别过滤的结构化日志。 - Device diagnostics(设备诊断): - 设备快照、内核/gadget 状态、UDC 信息、键盘布局;复制到剪贴板;模拟器检测提示。 注意:需要具有 Linux USB gadget (ConfigFS) 支持的已 root 设备。请使用真机,因为模拟器无法验证 HID 行为。 ## 功能特性 - Payload 编辑器与参数 - 创建包含名称/描述/标签的 Payload。 - 添加带类型的参数,支持默认值、必填标志和每次执行时的覆盖。 - 内置 DuckyScript 验证器,包含行号/问题映射和命令计数。 - 分享单个 Payload 或导出为包。 - GitHub Payload Store - 管理多个 GitHub 源(user/repo/branch/path)。 - 浏览目录并预览文件,支持格式检测(DuckyScript、TapDucky JSON、转换后的 Digispark 脚本 (.ino))。 - 将验证通过的脚本直接导入到你的库中;验证失败的文件会显示原因预览。 - Execute & Test(执行与测试) - 运行前验证;提示输入参数值;运行或取消(带执行 ID)。 - 快速 HID 测试:键盘按键、鼠标移动和 Ctrl+Alt+Del。 - 基于引擎的运行时间估算(与实际计时模型匹配)。 - Wakelock 控制,在执行期间保持 session 活跃。 - Scheduler & Triggers(调度器与触发器) - 触发器:one_time(一次性)、app_cold_start(冷启动)、app_foreground(前台)、device_connected(session armed/连接)。 - 可选的每日时间窗口(HH:MM → HH:MM),支持跨午夜循环。 - 启用/禁用、编辑和删除计划;跟踪上次运行时间。 - 通过密钥(secret codes)绑定拨号快捷方式(自动 arm + 后台执行)。 - 支持的代码:`*#*#38250#*#*`, `*#*#38251#*#*`, `*#*#38252#*#*`, `*#*#38253#*#*` - 每个代码的绑定键:enabled(启用)、mode(模式:上次执行 | 选定 payload)、payload(当 mode = 选定 payload 时) - Device & HID Profiles(设备与 HID 配置) - 激活 Keyboard、Mouse 或 Composite 配置文件,包含可配置的 ID/字符串/功率。 - 键盘布局选择和代码/ID 解析。 - 状态流显示 ACTIVE/IDLE、writer 就绪状态以及主机配置请求。 - Logs & History(日志与历史) - 日志标签页,支持级别过滤(all/info/debug/warn/error),导出分享,清除所有。 - 执行历史详情,包含元数据和分享功能。 ### 用户界面 - 仪表板,包含快速状态卡片、Payload/库统计和调度摘要。 - 清晰的空状态和分步向导,用于首次设置/导入。 - Material 3 主题,动态浅色/深色配色方案。 ### 技术/架构 - Platform channels (Android): - Method Channel:`org.kaijinlab.tap_ducky/gadget` - `checkRoot`、`checkSupport`、`listUdcs`、`getStatus`、`getDiagnostics` - `getKeyboardLayouts`、`setKeyboardLayout`、`resolveKeyboardLayoutId`、`setKeyboardLayoutByCode` - `activateProfile`、`deactivate`、`panicStop`、`retryOpenHidWriters` - `executeDuckyScript(script, delayMultiplier, executionId?)`、`cancelExecution(executionId)` - 测试辅助:`testKeyboardKey(label)`、`testMouseMove(dx,dy,wheel,buttons)`、`testCtrlAltDel()` - Event Channels: - `org.kaijinlab.tap_ducky/gadget_logs` - `org.kaijinlab.tap_ducky/gadget_status` - `org.kaijinlab.tap_ducky/gadget_exec` - HID Profiles 模型:keyboard/mouse/composite,包含 VID/PID、strings、serial、power。 - DuckyScript: - 解析为步骤;支持 DELAY/STRING/keys/raw 命令;占位符解析;基础按键延迟;jitter(抖动)。 - 验证器返回带有严重程度和行映射的问题;用于编辑器/Store/执行流程。 - TRY/CATCH/END_TRY、WAIT_FOR、SLEEP_UNTIL、FUNCTION 参数和作用域变量。 - Unicode 回退模式(warn+skip / skip / ASCII transliteration)。 - 执行流中的结构化错误代码。 - Scheduling engine(调度引擎): - 触发器(冷启动、前台、armed、一次性),每日时间窗口规则,持久化于 SharedPreferences。 - 状态管理:Riverpod 3,go_router 导航,清晰的 repository/services/controllers 分离。 ## DuckyScript / Keystroke 引擎 TapDucky 包含一个在 Android (Kotlin) 上原生实现的完整 DuckyScript 风格引擎,支持表达式求值和结构化控制流。它支持键盘、鼠标/指针、计时、变量/定义、函数和简单的随机工具。 支持的命令系列(高级): - 文本与计时:STRING, STRINGLN, STRING_DELAY, DELAY, DEFAULTDELAY/DEFAULT_DELAY, REM (以及 REM_BLOCK) - 按键与组合:ENTER, TAB, ESC, SPACE, BACKSPACE, 方向键, 导航键 (HOME/END/PGUP/PGDN/INS/DEL), F1–F24, 媒体键, 小键盘键 - 修饰键组合:GUI/WIN/COMMAND, CTRL/CONTROL, ALT/OPTION, SHIFT 配合额外的按键标记(例如 GUI r, CTRL ALT DEL) - 按住/释放与注入修饰键:HOLD, RELEASE, INJECT_MOD (设置/清除跨后续按键持续的修饰键掩码) - 指针/鼠标:MOUSE/POINTER CLICK, HOLD, DRAG, MOVE, SCROLL,支持 LEFT/RIGHT/MIDDLE 按键以及相对 dx/dy 和重复次数 - 控制流:IF / ELSE IF / ELSE / END_IF, WHILE / END_WHILE - 函数与调用:FUNCTION / END_FUNCTION, CALL_FUNCTION, RETURN - 变量与常量:VAR $name = expr, DEFINE NAME value; $?(exit code) 保持为无符号 16 位 - 随机生成器:RANDOM_LOWERCASE_LETTER, RANDOM_UPPERCASE_LETTER, RANDOM_LETTER, RANDOM_NUMBER, RANDOM_SPECIAL, RANDOM_CHAR - 攻击模式透传:ATTACKMODE(在适用时代理到 gadget 管理层) 行为说明: - 默认延迟:DEFAULTDELAY/DEFAULT_DELAY 设置一个基础延迟,在每个可执行命令后应用(按运行时延迟倍增器缩放)。 - 表达式求值器:在 IF/WHILE 和 VAR 赋值中支持算术、比较和逻辑表达式;非零为真。 - 重复:REPEAT N 在预处理期间将前一个命令复制 N 次。 - 键盘映射:完整的 HID usage 映射,支持布局选择;支持常见别名(ESC/ESCAPE, BKSP/BACKSPACE 等)。 - 执行流:发出 step/start/done/error 事件并附带进度,用于实时 UI 更新和日志。 Mouse/Pointer 语法快速参考: - MOUSE CLICK [LEFT|RIGHT|MIDDLE] [num] - MOUSE HOLD [LEFT|RIGHT|MIDDLE] [dx] [dy] [num] - MOUSE DRAG [LEFT|RIGHT|MIDDLE] [dx] [dy] [num] - MOUSE MOVE [dx] [dy] [num] - MOUSE SCROLL [UP|DOWN] [num] 能力矩阵(精选): | Feature group | Sub-feature | Supported | Notes | |---|---|:---:|---| | Text/timing | STRING / STRINGLN / STRING_DELAY | ✅ | STRING_DELAY 的每字符计时;通过 DEFAULTDELAY 设置全局延迟 | | Text blocks | STRING/STRINGLN blocks | ✅ | 以 END_STRING / END_STRINGLN 结尾的多行块 | | Timing | DELAY, DEFAULTDELAY/DEFAULT_DELAY | ✅ | DEFAULT 在每个可执行步骤后应用 | | Repeat | REPEAT N | ✅ | 将前一个命令复制 N 次 | | Comments | REM, REM_BLOCK/END_REM | ✅ | 不可执行 | | Modifiers | GUI/WIN, CTRL, ALT, SHIFT combos | ✅ | 解析为单个组合步骤 | | Key commands | Explicit key names | ✅ | “Explicit key and alias support”中列出的所有按键/别名 | | Hold/release | HOLD, RELEASE | ✅ | 跟踪按住的按键集;与 INJECT_MOD 配对 | | Explicit key state | KEYDOWN, KEYUP | ✅ | 直接控制按键按下/弹起,用于组合键和按住键 | | Injected modifiers | INJECT_MOD | ✅ | 持续保持修饰键掩码直到清除 | | Mouse/pointer | MOUSE/POINTER CLICK/HOLD/DRAG/MOVE/SCROLL | ✅ | 带重复计数的相对运动 | | Control flow | IF/ELSE IF/ELSE/END_IF | ✅ | 支持嵌套链 | | Loops | WHILE/END_WHILE | ✅ | 条件由表达式引擎求值 | | Functions | FUNCTION/END_FUNCTION, CALL/CALL_FUNCTION, RETURN | ✅ | 支持参数;RETURN 设置 $? | | Variables | VAR $name = expr | ✅ | 整数,存储范围 0..65535;$? 为 exit code;作用域局部变量 | | Defines | DEFINE NAME value | ✅ | 解析前的简单文本替换 | | Error handling | TRY/CATCH/END_TRY | ✅ | 可恢复的失败,不中止脚本 | | Waits | WAIT_FOR, SLEEP_UNTIL | ✅ | 主机/UDC/键盘就绪 + 定时等待 | | Random | RANDOM_* generators | ✅ | lower/upper/letter/number/special/char | | Attack modes | ATTACKMODE | ⚠️ | 已解析,但尚未实现后端处理程序 | 注意:验证器会在执行前显示语法问题、未知命令和结构错误。请参阅 Payload Editor 以获取带有行号的 UI 内验证结果。 执行计时要点: - 独立的执行延迟倍增器和打字速度因子(可选的高风险快速模式)。 - 在长时间 STRING 运行期间定期刷新,以减少主机键缓冲区溢出。 - 主机感知退避和针对瞬时 HID 断开的宽限窗口。 - 当微睡眠不可用时的硬件感知估算校准。 ### 显式 Key 和 Alias 支持 注意:除了列出的别名外,TapDucky 还接受 snake_case 形式,如 down_arrow, up_arrow, left_arrow, right_arrow, page_up, page_down, print_screen, scroll_lock, num_lock, caps_lock, string_delay, default_delay 等。这些在内部会进行规范化。 - 修饰键(在注明处支持左/右变体): - 左:CTRL/CONTROL, SHIFT, ALT/OPTION, GUI/WINDOWS/COMMAND/WIN - 右:RCTRL/RCONTROL, RSHIFT, RALT, RGUI/RWINDOWS/RCOMMAND - 系统/导航键(包含别名): - ENTER - ESC/ESCAPE - BACKSPACE/BKSP - TAB - SPACE - DELETE/DEL - INSERT/INS - HOME, END- PAGEUP, PAGEDOWN - 方向键:UP/UPARROW, DOWN/DOWNARROW, LEFT/LEFTARROW, RIGHT/RIGHTARROW - 锁定键:CAPSLOCK, NUMLOCK, SCROLLLOCK - PRINTSCREEN/PRINTSCRN/PRTSCN - PAUSE/BREAK - MENU/APP - 功能键: - F1–F24 - 小键盘键(包含别名): - NUMPAD_0/KP0, NUMPAD_1/KP1, NUMPAD_2/KP2, NUMPAD_3/KP3, NUMPAD_4/KP4, NUMPAD_5/KP5, NUMPAD_6/KP6, NUMPAD_7/KP7, NUMPAD_8/KP8, NUMPAD_9/KP9 - NUMPAD_PLUS/KPPLUS, NUMPAD_MINUS/KPMINUS, NUMPAD_MULTIPLY/KPASTERISK, NUMPAD_DIVIDE/KPSLASH, NUMPAD_ENTER/KPENTER, NUMPAD_PERIOD/KPDOT - 媒体键(包含别名): - MEDIA_PLAYPAUSE/PLAYPAUSE - MEDIA_STOP/STOPCD - MEDIA_PREV/PREVIOUSSONG - MEDIA_NEXT/NEXTSONG - MEDIA_VOLUMEUP/VOLUMEUP - MEDIA_VOLUMEDOWN/VOLUMEDOWN - MEDIA_MUTE/MUTE - 字母数字快捷键: - 单个字符 A–Z 和数字 0–9 映射到相应的 HID usage codes。 ### 示例 - CTRL ALT DEL - GUI r - SHIFT TAB - STRING_DELAY 15 Hello world - MOUSE CLICK LEFT 2 - MOUSE MOVE 40 0 3 ## Scheduler 触发器(详情) - One‑time(一次性) - 在指定的日期/时间运行一次,如果在可选的时间窗口内。 - App Start (Cold Start)(App 冷启动) - 当 App 从真正的冷启动启动时运行一次(不是从后台恢复时)。 - App Open (Foreground)(App 前台打开) - 每次 App 进入前台时运行;可以运行多次。 - Session Armed(Session 激活) - 当 HID session 被激活(USB gadget 绑定到 UDC)时运行 —— 通常在你点击 "Arm Session" 时。 ## Payloads 管理 - 创建/编辑带参数和默认值的 Payload。 - 实时验证脚本;打开 DuckyScript 语法参考。 - 分享单个 Payload 或导出为包;从 GitHub Store 导入。 ## 设备诊断 - 查看内核/UDC 列表、HID writers 就绪状态、活动配置文件状态、主机配置请求计数等。 - 复制值到剪贴板并独立刷新快照/诊断。 ## 开发者笔记 - 所有特权 HID 操作都需要 root 和支持 ConfigFS gadget 的内核。 - 在 Android 8+ 上,通知使用专用通道;前台服务保持 HID session 活跃。 - App 避免将运行时 UI 字符串与 Service 层中的 Android 资源耦合,以减少资源合并风险。 ## Requirements - 具有 Linux USB Gadget (ConfigFS) 支持的已 root Android 设备 - Android 11+ - 物理设备(模拟器无法验证 USB gadget 行为) ## Installation 1. 从 Releases 下载最新的 APK: GitHub Releases 2. 安装应用程序: - 如有需要,启用从未知来源安装。 - 当 root 管理器提示时,授予 root 权限。 3. 启动并配置: - 打开 TapDucky。 - 在 Advanced Settings 中,选择/调整 HID 配置(Keyboard/Mouse/Composite)、VID/PID 和键盘布局。 - 激活(Arm)一个 session 并从 Execute 运行测试命令。 ## Usage ### 运行 Payload 1. 创建或导入一个 Payload(Payloads 标签页)。 2. 验证它并根据需要添加参数。 3. 进入 Execute,选择 Payload,填写参数,然后 Run。 4. 检查 Logs 和 Execution History 以查看结果。 ### 调度 Payload 1. 打开 Scheduler。 2. 创建一个计划,选择触发器(一次性、冷启动、前台、armed)。 3. 可选地设置每日时间窗口和参数覆盖。 4. 保存并确保计划已启用。 ### 从 GitHub Store 导入 1. 打开 Payloads Store。 2. 管理源(添加 `owner/repo` 或带有 branch/path 的完整 URL)。 3. 预览文件;TapDucky 验证 DuckyScript 并可以转换 Digispark sketches。 4. 将支持的文件直接导入到你的 Payloads。 ## 截图 TapDucky app screenshot 1 TapDucky app screenshot 2 TapDucky app screenshot 3 TapDucky app screenshot 4 TapDucky app screenshot 5 TapDucky app screenshot 6 TapDucky app screenshot 7 TapDucky app screenshot 8


TapDucky Banner App ## License 本项目采用 GNU GPLv3 许可证授权。详见 [LICENSE](LICENSE)。 ## Support 如果你遇到任何问题或有疑问,请在 GitHub 仓库提交 issue 或联系维护者。 ## KaijinLab 的更多应用! | App | What it does | | ----------------------------------------------------------------- | ---------------------------------------------------------------------------- | | **[IR Blaster](https://github.com/iodn/android-ir-blaster)** | Control and test infrared functionality for compatible devices. | | **[USBDevInfo](https://github.com/iodn/android-usb-device-info)** | Inspect USB device details and behavior to understand what's connected. | | **[GadgetFS](https://github.com/iodn/gadgetfs)** | Experiment with USB gadget functionality (hardware‑adjacent, low‑level). | | **[TapDucky](https://github.com/iodn/tap-ducky)** | A security/testing tool for controlled keystroke injection workflows. | | **[HIDWiggle](https://github.com/iodn/hid-wiggle)** | A mouse jiggler built with USB gadget functionalities. | | **[AKTune](https://github.com/iodn/android-kernel-tweaker)** | Adaptive Android kernel auto‑tuner for CPU/GPU/scheduler/memory/I/O. |
标签:Android安全, BadUSB, ConfigFS, CTF工具, DNS 反向解析, DuckyScript, Gadget驱动, HID模拟, Root工具, USB HID攻击, USB Rubber Ducky, 安全测试, 安卓攻防, 按键注入, 攻击性安全, 数字取证, 模拟键盘, 漏洞搜索, 物理层攻击, 目录枚举, 移动安全, 自动化脚本, 鼠标模拟