IsMyPhonePwned/webadb-rs

GitHub: IsMyPhonePwned/webadb-rs

纯 Rust + WebAssembly 实现的浏览器端 ADB 客户端,通过 WebUSB 无需安装任何本地工具即可直接管理 Android 设备。

Stars: 9 | Forks: 2

WEBADB RUST

# Rust WebADB
![技术支持: IsMyPhonePwned](https://img.shields.io/badge/androguard-green?style=for-the-badge&label=Powered%20by&link=https%3A%2F%2Fgithub.com%2Fandroguard)
一个纯 Rust 实现的 Android Debug Bridge (ADB) 协议,编译为 WebAssembly,通过 WebUSB 实现从 Web 浏览器直接与 Android 设备进行通信。 ## 🌟 功能 - **纯 WebUSB**:无需 ADB server 即可直接进行 USB 通信 - **零依赖**:无需安装原生的 ADB - **跨平台**:支持任何兼容 WebUSB 的浏览器(Chrome、Edge、Opera) - **全 WASM**:编译为 WebAssembly,在浏览器中实现原生级性能 - **全面的 ADB 协议**: - 使用 RSA 密钥对进行设备认证 - Shell 命令执行 - 文件操作(pull/push) - 目录列表 - Bugreport 生成与管理 - Logcat 查看 - 设备属性与信息 ## 🚀 快速开始 ### 前置条件 - Rust 工具链(1.70+) - wasm-pack(`cargo install wasm-pack`) - 兼容 WebUSB 的浏览器(Chrome 61+、Edge 79+、Opera 48+) - 开启了 USB 调试的 Android 设备 ### 构建 ``` # Clone 仓库 cd rust-webadb # install wasm-pack curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh # Build 代码 wasm-pack build --dev --target web --features bugreport-analysis ``` 编译生成的 WASM 模块将位于 `pkg/` 目录中。 ### 运行 1. **启动本地 Web 服务器:** python3 -m http.server 8000 2. **在浏览器中打开:** http://localhost:8000/bugreport.html 3. **连接您的 Android 设备:** - 在您的 Android 设备上启用 USB 调试 - 在 Web 界面中点击“连接设备” - 从 WebUSB 选择器中选择您的设备 - 在您的设备上接受 RSA 密钥指纹 ## 📱 支持的设备 - Android 4.2.2+(API 级别 17+) - 任何开启了 USB 调试的设备 - 已 root 和未 root 的设备均支持 ## 🔧 使用说明 ### Web 界面(bugreport.html) 内置的 Web 界面提供以下功能: - **设备连接**:WebUSB 设备选择与认证 - **设备信息**:型号、Android 版本、序列号、电池状态 - **Bug 报告**: - 生成新的 bugreport(精简版或完整版) - 列出并下载设备上已有的 bugreport - 带调试面板的实时下载进度 - **Logcat**:查看并下载设备日志 - **文件浏览器**:浏览设备文件系统并下载文件 - **Shell**:执行 shell 命令 ### 编程式使用 ``` import init, { AdbClient } from './pkg/webadb_rs.js'; // Initialize WASM module await init(); // Create client and connect const client = await AdbClient.connect_usb(); // Execute shell commands const output = await client.shell('ls -la /sdcard'); console.log(output); // Get device properties const props = await client.get_properties(); console.log('Android version:', props['ro.build.version.release']); // Pull a file const fileData = await client.pull_file('/sdcard/Download/file.txt'); // List directory const entries = await client.list_directory('/sdcard'); entries.forEach(entry => { console.log(`${entry.name} - ${entry.size} bytes`); }); // Get logcat const logs = await client.logcat(100); // Disconnect await client.disconnect(); ``` ## 🐛 已知问题 ## 💡 提示 1. **Bugreports**:始终先使用“列出可用的 Bugreports”——这比生成新的要快得多 2. **Shell 命令**:支持大多数标准 Unix 命令(ls、cat、grep、ps 等) 3. **文件路径**:使用绝对路径(例如,`/sdcard/Download/file.txt`) 4. **权限**:某些操作需要 root 权限 5. **调试面板**:下载文件时,调试面板会显示实时进度、速度和日志 ## 🔬 技术细节 ### ADB 协议实现 - **连接**:USB 批量传输 endpoint - **认证**:SHA1 签名的 RSA-2048 挑战/响应 - **流**:多路复用的双向 channel - **消息**:OPEN、OKAY、WRTE、CLSE 命令 - **Sync 协议**:用于文件操作的独立协议(LIST、RECV、SEND、STAT) ### 协议命令 | 命令 | 描述 | |---------|-------------| | CNXN | 初始连接握手 | | AUTH | 认证挑战/响应 | | OPEN | 打开新流 | | OKAY | 确认 / 流控制 | | WRTE | 向流写入数据 | | CLSE | 关闭流 | ### Sync 协议 Sync 协议用于通过 `sync:` 流进行文件操作: | 命令 | 描述 | |---------|-------------| | LIST | 列出目录内容(返回 DENT 数据包) | | RECV | 从设备接收文件(返回 DATA 数据包) | | SEND | 向设备发送文件 | | STAT | 获取文件统计信息 | | DATA | 文件数据块 | | DONE | 操作完成 | | FAIL | 操作失败 | | DENT | 目录条目 | ## 🛠️ 开发 ### 开发构建 ``` wasm-pack build --target web --dev ``` ### 调试 - 使用浏览器 DevTools 控制台查看 JavaScript 错误 - 检查 Network 标签页以监控 WebUSB 通信 - Rust panic 将在控制台中显示详细的堆栈跟踪 - 在 bugreport.html 中启用调试面板以进行文件传输诊断 ## 📄 许可证 本项目是开源的。详情请参阅 LICENSE 文件。 ## 🙏 致谢 - 灵感来源于 [webadb](https://github.com/yume-chan/ya-webadb) 项目 - [WebUSB API](https://wicg.github.io/webusb/) - Google Android 团队对 ADB 协议的逆向工程 - 由 Synacktiv 提供的参考实现 [Synacktiv ADB Client](https://github.com/synacktiv/adb_client)
标签:AI工具, Rust, SOC Prime, WebADB, WebAssembly, WebUSB, 可视化界面, 后端开发, 安卓设备调试, 开发工具, 数据可视化, 网络流量审计, 运维工具