远程软件
真机暴露出 IME/按键通道的缺口,一并补上并证明: 1. RemoteInputConnection.sendKeyEvent 与 Activity.onKeyDown 都先处理**可打印** unicodeChar(走 v3 Text 通道),再退到扫描码查表。原先只查表:软键盘发的是 keyCode=UNKNOWN + unicodeChar,查不到表就被当未映射键吞掉,字整个丢了。 门槛排除控制值(Enter/Tab)——远端应用要的是按键事件而非 WM_CHAR。 2. onKeyDown/onKeyUp 补齐硬键与物理键盘路径(阶段 2 验收里的软键盘按键), repeatCount>0 只发一次 down,避免长按把远端消息队列刷爆。 isAutorepeat() 是 @hide,改用公开的 getRepeatCount()(javap 核实)。 3. getUnicodeChar() 返回的是单个 UTF-16 code unit 而非码点,注释按此改正: BMP 外字符由 IME commitText 成对送达,不经这条路。 tools/phone_chain_proof.ps1:手机按键 -> v3 Text -> agent SendInput -> 自有 Windows 靶窗自报内容,全链路一次跑通(真机 vivo S6 实测 abc 到位、ENTER 走 scan 28、BACK 断开回表单、表单 UI 重连成功)。要点: - 靶窗必须自报窗口句柄(pid+hwnd 两行),Get-Process 取 MainWindowHandle 有竞态; - 不能用 keybd_event(VK_MENU) 破前台锁:ALT 之后的首个字符被当菜单助记键吞掉, 实测三个字符只剩 b;改用 AttachThreadInput + SetForegroundWindow,不合成按键; - 退役遗留靶窗只能 touch 已存在的 stop.flag:新建会命中即将启动那次的停止路径, 靶窗刚起就自杀(实测 pid 报了又消失); - adb 进度信息走 stderr,PS 5.1 + ErrorActionPreference=Stop 会当终止错误, 按 build-android.ps1 同款办法临时放宽并只看退出码。 - 表单填字用 keyevent 而非 adb input text:设备只有第三方中文 IME,text 注入会被 组词(ASCII 句点变 U+3002)。跑前记录并禁用原 IME,finally 精确还原。 |
||
|---|---|---|
| .cargo | ||
| agent | ||
| agent-core | ||
| android-ffi | ||
| apps/android-viewer | ||
| common | ||
| linux-agent | ||
| scripts | ||
| tools | ||
| vendor/nvenc | ||
| viewer | ||
| viewer-core | ||
| .gitattributes | ||
| .gitignore | ||
| B侧设计文档.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| Git协作规范.md | ||
| README.md | ||
| 借鉴映射与落地规范.md | ||
| 多平台架构设计.md | ||
| 打洞与信令设计.md | ||
| 打洞验证记录.md | ||
| 构建运行手册.md | ||
mvp-remote
自研远程桌面控制软件(办公场景),技术路线参考网易 UU 远程逆向分析结论。
架构
| Crate | 角色 | 说明 |
|---|---|---|
common |
协议库 | 控制消息 / 视频帧线格式,三端共享契约 |
agent |
被控端 | DXGI 屏幕采集 + openh264(H.264) 编码 + QUIC 服务 + SendInput 键鼠注入 |
viewer |
主控端 | QUIC 客户端 + openh264 解码 + minifb 渲染 + 键鼠采集 + 延迟 HUD |
构建
cargo build --release
产物:target/release/agent.exe(被控端)、viewer.exe(主控端),需附带 3 个 mingw 运行库 DLL(libstdc++-6 / libgcc_s_seh-1 / libwinpthread-1)。
运行
# 被控机
agent.exe --port 47800 --code 123456
# 主控机
viewer.exe --addr <被控机IP> --port 47800 --code 123456
详见《构建运行手册.md》、《Git协作规范.md》与《打洞与信令设计.md》。