Bad Keyboard蓝牙模式原理:Xtreme Firmware设备伪装技术

Bad Keyboard蓝牙模式原理:Xtreme Firmware设备伪装技术

【免费下载链接】Xtreme-Firmware The Dom amongst the Flipper Zero Firmware. Give your Flipper the power and freedom it is really craving. Let it show you its true form. Dont delay, switch to the one and only true Master today! 【免费下载链接】Xtreme-Firmware 项目地址: https://gitcode.com/gh_mirrors/xt/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计数器跟踪多键状态

安全防护绕过策略

防检测技术

  1. 设备指纹变异:每次连接随机生成设备序列号
  2. 输入行为模拟:加入人类输入特征(如随机微小延迟)
  3. 协议合规性:严格遵循USB HID规范,通过主机枚举检测

实战应用场景

该技术在安全测试中可用于:

  • 社会工程学攻击模拟
  • 物理访问审计
  • 嵌入式设备渗透测试
  • 工业控制系统安全评估

代码架构解析

模块组织

Bad Keyboard功能采用分层架构设计:

js_badusb.c
├── 设备配置层(setup_parse_params)
├── HID协议层(furi_hal_hid_*接口)
├── 脚本解析层(MJS引擎绑定)
└── 输入执行层(press/hold/release实现)

关键函数调用流程

mermaid

使用与防御建议

合法使用场景

该功能设计用于授权安全测试,使用时需遵守:

  • 仅在授权系统上测试
  • 事先获得书面许可
  • 测试后恢复原始配置

防御措施

针对此类攻击的防护建议:

  1. 禁用未授权USB设备自动挂载
  2. 启用主机端口访问控制
  3. 部署端点防护系统(EPP)
  4. 定期审计USB设备连接日志

总结

Xtreme Firmware的Bad Keyboard技术展示了嵌入式设备通过HID模拟实现系统控制的强大能力。其精巧的设备伪装机制和灵活的脚本系统,既为安全研究提供了有力工具,也对现有USB设备信任模型提出挑战。开发者可通过applications/system/js_app/modules/js_badusb.c深入研究实现细节,进一步探索HID协议在嵌入式安全领域的应用。

注意:该技术仅用于教育和授权测试,未经许可使用可能违反法律法规。

【免费下载链接】Xtreme-Firmware The Dom amongst the Flipper Zero Firmware. Give your Flipper the power and freedom it is really craving. Let it show you its true form. Dont delay, switch to the one and only true Master today! 【免费下载链接】Xtreme-Firmware 项目地址: https://gitcode.com/gh_mirrors/xt/Xtreme-Firmware

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

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值