No description
- Swift 52.6%
- C++ 41.7%
- C 5.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| app | ||
| arduino/passpwd_esp32 | ||
| .gitignore | ||
| README.md | ||
PassPwd
在手机上填好用户名 / 密码 / 2FA(可用系统或第三方密码管理器自动填充),点一下按钮, 由 M5StickC Plus 当作蓝牙键盘把它们敲进目标电脑——适合那些不让粘贴、或者根本没法用 密码管理器的登录界面(BIOS、虚拟机控制台、远程桌面、别人的电脑等)。
iPhone ──Wi-Fi AP + HTTP(HMAC-SHA256 签名)──> M5StickC Plus ──BLE HID──> 目标电脑
| 目录 | 内容 |
|---|---|
arduino/passpwd_esp32/ |
ESP32 固件(Arduino)。详见 固件 README |
app/ |
iOS App(SwiftUI),用 XcodeGen 生成工程 |
为什么是 BLE HID 而不是 USB HID
M5StickC Plus 用的是 ESP32-PICO-D4,没有原生 USB 外设(USB 口后面是 CH9102 串口芯片), 硬件上无法枚举成 USB 键盘。只有 ESP32-S2/S3 系列才能做 USB HID。因此键盘那一侧用 BLE HID, 手机那一侧用 Wi-Fi AP,两者互不干扰。
快速开始
1. 烧录固件
arduino-cli compile --fqbn m5stack:esp32:m5stack_stickc_plus arduino/passpwd_esp32
arduino-cli board list # 找到串口
arduino-cli upload -p /dev/cu.usbserial-XXXX --fqbn m5stack:esp32:m5stack_stickc_plus arduino/passpwd_esp32
2. 生成并运行 App
cd app
xcodegen generate
open PassPwd.xcodeproj
在 Xcode 里选自己的开发者账号(Signing & Capabilities)后真机运行。
3. 配对与使用
- 设备屏幕上会显示
SSID/PW(热点密码)/IP/PIN(按 BtnA 显示明文)。 - 目标电脑:蓝牙里搜索并配对
PassPwd KB,成功后设备右上角变BLE OK。 - 手机:连上
PassPwd-XXXX热点 → 打开 App → 填 PIN → 点「连接」,状态变绿。 - 填好用户名 / 密码 / 2FA,把电脑上的光标放到输入框里,点对应的发送按钮。
BtnB 长按 2 秒可重置 PIN 与热点密码。
安全模型
- 热点是 WPA2 加密的;每个
/v1/type请求还要带 PIN 派生的 HMAC-SHA256 签名和严格递增的计数器, 同一网段的其他设备既伪造不了也重放不了。 - 凭据只在 RAM 中短暂存在:App 不落盘(只有设备地址和 PIN 存 Keychain), 固件处理完立刻把缓冲逐字节抹掉,不写 NVS、不打日志、不上屏。
- 这不是端到端加密的方案——设备默认只在你自己开的、无外网的热点里工作,别把它接到公共网络。
限制
- 只支持 US 键盘布局,目标电脑用其它布局时符号会敲错。
- 非 ASCII 字符(中文等)无法通过 HID 敲出,会被跳过。