IsMyPhonePwned/webadb-rs
GitHub: IsMyPhonePwned/webadb-rs
纯 Rust + WebAssembly 实现的浏览器端 ADB 客户端,通过 WebUSB 无需安装任何本地工具即可直接管理 Android 设备。
Stars: 9 | Forks: 2

WEBADB RUST
# Rust WebADB

一个纯 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, 可视化界面, 后端开发, 安卓设备调试, 开发工具, 数据可视化, 网络流量审计, 运维工具