Bad Keyboard蓝牙模式原理:Xtreme Firmware设备伪装技术
技术原理概述
Xtreme Firmware中的Bad Keyboard功能通过HID(Human Interface Device,人机接口设备)协议模拟合法输入设备,实现对目标系统的隐蔽控制。该技术核心在于构建虚拟USB设备描述符,使主机系统识别为标准键盘或鼠标,同时通过可编程脚本引擎执行预定义输入序列。其实现代码位于applications/system/js_app/modules/js_badusb.c,主要依赖FuriHal硬件抽象层提供的USB/HID控制接口。
设备伪装核心机制
USB设备描述符伪造
系统通过动态修改USB配置描述符实现设备身份伪装,关键参数包括:
- 厂商ID(VID) 与 产品ID(PID):模拟主流品牌设备,如Logitech或Dell的硬件标识符
- 设备描述符:包含制造商信息(manuf)和产品名称(product)字段
- HID报告描述符:定义输入事件格式,兼容USB HID 1.11规范
// 设备配置解析示例 [applications/system/js_app/modules/js_badusb.c#L91-L125]
static bool setup_parse_params(struct mjs* mjs, mjs_val_t arg, FuriHalUsbHidConfig* hid_cfg) {
if(!mjs_is_object(arg)) return false;
mjs_val_t vid_obj = mjs_get(mjs, arg, "vid", ~0);
mjs_val_t pid_obj = mjs_get(mjs, arg, "pid", ~0);
if(mjs_is_number(vid_obj) && mjs_is_number(pid_obj)) {
hid_cfg->vid = mjs_get_int32(mjs, vid_obj); // 厂商ID设置
hid_cfg->pid = mjs_get_int32(mjs, pid_obj); // 产品ID设置
}
// 制造商与产品名称设置...
return true;
}
动态协议切换
固件通过furi_hal_usb_set_config接口实现USB模式切换,在标准通信模式与HID伪装模式间无缝切换:
// USB配置切换代码 [applications/system/js_app/modules/js_badusb.c#L155-L158]
badusb->usb_if_prev = furi_hal_usb_get_config();
furi_hal_usb_unlock();
furi_hal_usb_set_config(&usb_hid, badusb->hid_cfg); // 切换至HID模式
输入模拟执行流程
脚本驱动的输入自动化
系统采用MJS(Micro JavaScript)引擎解析执行输入脚本,支持以下核心操作:
press():单次按键模拟(如press("ENTER"))hold()/release():组合键控制(如hold("CTRL")+press("C"))print()/println():文本输入(支持ASCII及特殊字符)altPrint():通过ALT+数字键组合输入特殊字符
按键代码映射机制
键位映射表定义了常用按键与HID扫描码的对应关系,包含100+种输入事件:
// 部分按键映射 [applications/system/js_app/modules/js_badusb.c#L11-L78]
static const struct {
char* name;
uint16_t code;
} key_codes[] = {
{"CTRL", KEY_MOD_LEFT_CTRL},
{"SHIFT", KEY_MOD_LEFT_SHIFT},
{"ENTER", HID_KEYBOARD_RETURN},
{"ESC", HID_KEYBOARD_ESCAPE},
{"F1", HID_KEYBOARD_F1},
// ... 更多键位定义
};
执行时序控制
为绕过系统输入频率检测,实现了精细化时序控制:
- 按键按下/释放间隔:默认10ms,可通过脚本动态调整
- 文本输入延迟:支持字符间延迟配置(0-60000ms)
- 组合键保持时间:通过
key_hold_cnt计数器跟踪多键状态
安全防护绕过策略
防检测技术
- 设备指纹变异:每次连接随机生成设备序列号
- 输入行为模拟:加入人类输入特征(如随机微小延迟)
- 协议合规性:严格遵循USB HID规范,通过主机枚举检测
实战应用场景
该技术在安全测试中可用于:
- 社会工程学攻击模拟
- 物理访问审计
- 嵌入式设备渗透测试
- 工业控制系统安全评估
代码架构解析
模块组织
Bad Keyboard功能采用分层架构设计:
js_badusb.c
├── 设备配置层(setup_parse_params)
├── HID协议层(furi_hal_hid_*接口)
├── 脚本解析层(MJS引擎绑定)
└── 输入执行层(press/hold/release实现)
关键函数调用流程
使用与防御建议
合法使用场景
该功能设计用于授权安全测试,使用时需遵守:
- 仅在授权系统上测试
- 事先获得书面许可
- 测试后恢复原始配置
防御措施
针对此类攻击的防护建议:
- 禁用未授权USB设备自动挂载
- 启用主机端口访问控制
- 部署端点防护系统(EPP)
- 定期审计USB设备连接日志
总结
Xtreme Firmware的Bad Keyboard技术展示了嵌入式设备通过HID模拟实现系统控制的强大能力。其精巧的设备伪装机制和灵活的脚本系统,既为安全研究提供了有力工具,也对现有USB设备信任模型提出挑战。开发者可通过applications/system/js_app/modules/js_badusb.c深入研究实现细节,进一步探索HID协议在嵌入式安全领域的应用。
注意:该技术仅用于教育和授权测试,未经许可使用可能违反法律法规。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



