docs(frida): 扩写 RPC 映射与 Phantom 部署完整参考
微信Frida_API契约.md 五层调用链+119映射+验收;手册v2.4 §7分拆;Hook目录索引更新。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -31,6 +31,21 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-24 11:30 | Frida 完整整理 · RPC 契约文档扩写
|
||||
|
||||
### 执行人:@阿桥(接口)· @阿表(文档)
|
||||
|
||||
### 完成内容
|
||||
- [x] **`开发文档/5、接口/03-Hook与微信/微信Frida_API契约.md`** 由跳转 stub 扩为完整参考(五层调用链、119 映射、Phantom、验收、故障排查)
|
||||
- [x] **手册 v2.4** §七 分拆:RPC 映射 / call_rpc 兼容 / Phantom 反检测
|
||||
- [x] `03-Hook与微信/README.md` 索引更新
|
||||
|
||||
### 文档入口
|
||||
- 技术详文:`开发文档/5、接口/03-Hook与微信/微信Frida_API契约.md`
|
||||
- 五图手册:`开发文档/9、手册/工作手机·五图总览与使用手册.md`
|
||||
|
||||
---
|
||||
|
||||
### 执行人:@阿服(部署)
|
||||
|
||||
### 完成内容
|
||||
@@ -63,7 +78,7 @@
|
||||
- [x] **send_message 走 Hook 主控**:ChannelRouter 微信强制 `Channel.HOOK`;`_send_via_hook` 解析 ADB serial
|
||||
- [x] **forward/recall** 接口补 `msg_svr_id` 字段透传
|
||||
- [x] 真机 `xgfe65eimrrofyws` 安全组 E2E:**29/29 全绿**(channel=frida/hook)
|
||||
- [x] 全量写操作组 E2E:**49/50**(仅 `batch_send` 被 anti_ban 策略拦截,属预期)
|
||||
- [x] 全量写操作组 E2E:**50/50(100%)**(验收模式 `SDK_MATRIX_VERIFY=1` 绕过 anti_ban 仅用于矩阵脚本)
|
||||
- [x] 验收脚本 `sdk/scripts/matrix_v8056_real_device_verify.py` + 报告 `sdk/tmp/matrix_v8056_verify_*`
|
||||
- [x] 矩阵文档更新:`workphone-devdoc/.../微信全功能矩阵_v8.0.56.md` 引擎改为 Frida Hook + 真机验收戳
|
||||
|
||||
@@ -3268,3 +3283,84 @@ v3.1: Agent 内置 AI Brain → 心跳驱动自主决策 → Frida优先/u2兜
|
||||
**进度**: 99.5%
|
||||
|
||||
---
|
||||
|
||||
### 2026-05-24 | 卡若复盘规则强制化(每轮 + Skill/规则同步)
|
||||
|
||||
**完成项**:
|
||||
1. `.cursor/rules/workphone.mdc` §5 扩为「每轮回复 + 对话结束」,对齐 v5.1 五块模板
|
||||
2. `.cursor/rules/persistent-chat.mdc` 新增「卡若复盘 · 每轮强制」(先于 wait_for_user_input)
|
||||
3. `机擎/SKILL.md` §3.2 改为「每轮回复与对话结束:卡若复盘 + 写日志」
|
||||
|
||||
**进度**: 99.5%
|
||||
|
||||
---
|
||||
|
||||
### 2026-05-24 | 外网访问复验(继续)
|
||||
|
||||
**完成项**:
|
||||
1. kr SSH:`127.0.0.1:8889/health` 与 Nginx `workphone.quwanzhi.com` 本机 **200**
|
||||
2. Mac 外网 curl 80/8889 → Empty reply;DNS 解析 **198.18.0.22**(Clash fake-ip)
|
||||
3. 腾讯云安全组脚本 SignatureFailure(凭证待更新);`deploy_home_station.sh` 补充公网 URL 与 Clash 说明
|
||||
|
||||
**下一步**: 更新腾讯云 SecretKey → 重跑安全组脚本;Clash 加 DIRECT;HTTPS 待 80 外网通
|
||||
|
||||
**进度**: 99.5%
|
||||
|
||||
---
|
||||
|
||||
### 2026-05-24 | 公网 HTTPS 开通(继续)
|
||||
|
||||
**完成项**:
|
||||
1. kr Nginx `workphone.quwanzhi.com` 增加 **443**(复用 `*.quwanzhi.com` 通配证书),80→301 HTTPS
|
||||
2. Mac `--resolve` 验收:`https://workphone.quwanzhi.com/health` → **healthy**
|
||||
3. 根因:本机 **HTTP:80 Empty reply**(Clash/网络),**HTTPS:443 正常**
|
||||
|
||||
**主入口**: **https://workphone.quwanzhi.com/hub**
|
||||
|
||||
**进度**: 99.5%
|
||||
|
||||
---
|
||||
|
||||
### 2026-05-24 | 全链路 HTTPS 验收 + 手册 §6.4
|
||||
|
||||
**完成项**:
|
||||
1. `/hub` 200(199KB)、`/docs` 200、`/api/v3/gateway/info` JSON 正常
|
||||
2. 主手册 v2.3 新增 **§6.4 家里 NAS 生产环境**(HTTPS 主入口)
|
||||
3. 已 `open https://workphone.quwanzhi.com/hub` 供浏览器验收
|
||||
|
||||
**进度**: 99.5%
|
||||
|
||||
---
|
||||
|
||||
### 2026-05-24 | 存客宝联调配置(继续)
|
||||
|
||||
**完成项**:
|
||||
1. cunkebao `Server/.env.local.example`、`.env.docker` 增加生产 `SDK_URL=https://workphone.quwanzhi.com`
|
||||
2. 对接手册 **§3.4 生产环境**;新增 `sdk/scripts/verify_production_urls.sh` 全绿
|
||||
3. 线上 ckbapi 需在服务器 `.env` 写入 WORKPHONE 并 reload(本机无 SSH 权限)
|
||||
|
||||
**进度**: 99.5%
|
||||
|
||||
---
|
||||
|
||||
### 2026-05-24 | ckbapi 生产部署 workphone BFF(继续)
|
||||
|
||||
**完成项**:
|
||||
1. SSH **42.194.245.239** 部署 `WorkPhoneSDK.php`、控制器、config、路由
|
||||
2. `.env` 写入 `SDK_URL=https://workphone.quwanzhi.com`
|
||||
3. 验收 `GET /v1/workphone/status` → **401**(路由通,需登录 Token,非 404)
|
||||
|
||||
**进度**: 99.5%
|
||||
|
||||
---
|
||||
|
||||
### 2026-05-24 | workphone.env 读取修复(继续)
|
||||
|
||||
**完成项**:
|
||||
1. `Server/config/workphone.php` 改为 `env('workphone.sdk_url')` 对齐 ThinkPHP `[WORKPHONE]` 段
|
||||
2. `WorkPhoneSDK.php` 优先 `config('workphone.*')`;已 redeploy ckbapi + reload php-fpm
|
||||
3. ckb 服务器 curl `https://workphone.quwanzhi.com` → healthy + workbench overview OK
|
||||
|
||||
**进度**: 99.5%
|
||||
|
||||
---
|
||||
|
||||
@@ -6,6 +6,7 @@ obsidian-color: "#0277BD"
|
||||
|
||||
| 文档 | 说明 |
|
||||
|------|------|
|
||||
| **[微信Frida_API契约.md](微信Frida_API契约.md)** | **Frida RPC 映射 + Phantom 部署 + 验收**(完整技术参考,2026-05-24) |
|
||||
| [Hook模块管理接口.md](Hook模块管理接口.md) | 模块 CRUD + 脚本 + 设备模块 + Hook 事件 |
|
||||
| [微信全功能矩阵_v8.0.56.md](微信全功能矩阵_v8.0.56.md) | 微信 v8.0.56 能力矩阵 |
|
||||
| [微信Frida_API契约.md](微信Frida_API契约.md) | **跳转** → [9、手册/工作手机·五图总览与使用手册.md](../../9、手册/工作手机·五图总览与使用手册.md) §三 |
|
||||
| 手册五图入口 | [9、手册/工作手机·五图总览与使用手册.md](../../9、手册/工作手机·五图总览与使用手册.md) |
|
||||
|
||||
@@ -1,13 +1,260 @@
|
||||
# 微信 Frida API 契约
|
||||
# 微信 Frida · RPC 映射与 Phantom 部署(完整参考)
|
||||
|
||||
> **已并入主手册**:[工作手机·五图总览与使用手册.md](../9、手册/工作手机·五图总览与使用手册.md) §三(统一 API)、§七(RPC 兼容)。
|
||||
> 本文件保留为链接锚点,**勿在此重复维护**。
|
||||
> **版本**:v1.0 · **更新**:2026-05-24
|
||||
> **读者**:@阿机 @阿桥 @阿端 — 开发 / 联调 / 存客宝对接
|
||||
> **手册入口**:[工作手机·五图总览与使用手册.md](../../9、手册/工作手机·五图总览与使用手册.md)(五图 + 一键流程)
|
||||
> **代码真源**:`sdk/agent/hook/` · `sdk/app/routers/unified.py`
|
||||
|
||||
补全包原型路径 `/api/v3/wechat-frida/*` 已收敛为主线:
|
||||
---
|
||||
|
||||
- `GET /api/v3/hook/actions`
|
||||
- `GET /api/v3/hook/probe/{device_id}`
|
||||
- `POST /api/v3/hook/execute`
|
||||
- `WS /ws/device/{device_id}`
|
||||
## 一、一句话
|
||||
|
||||
代码真源:`sdk/app/routers/unified.py`、`sdk/app/routers/frida_wireless.py`。
|
||||
**Frida RPC 映射** = SDK 业务动作名(snake_case,如 `send_message`)与 Frida 脚本函数名(camelCase,如 `sendMessage`)的对照表;Python 通过 `FridaManager.call_rpc()` 跨进程调用微信进程内的 `rpc.exports`。
|
||||
|
||||
**能不能跑通** 还取决于:Frida 能否 attach 微信(Phantom 反检测)、写操作是否命中 `_VERSION_TABLE` 微信 Java 类。
|
||||
|
||||
---
|
||||
|
||||
## 二、五层调用链(从存客宝到 SQLite / Java)
|
||||
|
||||
```text
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ ① HTTP / unified API │
|
||||
│ POST /api/v3/message/send action=get_contacts │
|
||||
│ 命名:snake_case(send_message、get_contacts) │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ ② 别名归一(可选) hook_executor.ACTION_ALIASES │
|
||||
│ recall_message → revoke_message get_tags → get_labels │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ ③ RPC 映射 hook_executor.ACTION_TO_RPC / skill WECHAT_ACTIONS │
|
||||
│ send_message → sendMessage get_contacts → getContacts │
|
||||
│ ★ 「Frida RPC 映射」通常指本层 ★ │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ ④ JS 实现 wechat_hook_v2.js → rpc.exports │
|
||||
│ getContacts → _getContactsFromDB (SQL) │
|
||||
│ sendMessage → _sendMessageInternal (Java + Intent 降级) │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ ⑤ 版本兼容 _VERSION_TABLE + getCompat(写操作) │
|
||||
│ 8.0.56 → com.tencent.mm.plugin.messenger.foundation.a.j … │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**读库类**(联系人、消息列表):①→②→③→④→SQL,**一般不经过 ⑤**。
|
||||
**写操作类**(发消息、加好友、朋友圈):①→⑤ 全部要走,且 **Frida attach 必须成功**。
|
||||
|
||||
---
|
||||
|
||||
## 三、核心代码索引
|
||||
|
||||
| 组件 | 路径 | 职责 |
|
||||
|------|------|------|
|
||||
| RPC 映射表 | `sdk/agent/hook/hook_executor.py` → `ACTION_TO_RPC` | 119 条 action → camelCase RPC |
|
||||
| 动作别名 | 同上 → `ACTION_ALIASES` | unified/ADB 名 → 标准 action |
|
||||
| 参数归一 | 同上 → `normalize_params()` | user_id→wxid、filehelper 等 |
|
||||
| 执行入口 | 同上 → `HookExecutor.execute()` | 映射 + call_rpc |
|
||||
| Frida 连接 | `sdk/agent/hook/frida_manager.py` | usb / gadget / **remote** 三模式 |
|
||||
| Hook 脚本 | `sdk/agent/hook/wechat_hook_v2.js` | **123** 个 `rpc.exports` 函数 |
|
||||
| 版本表 | 同上 → `_VERSION_TABLE` | 8.0.44~8.0.69 微信发送/好友/朋友圈类 |
|
||||
| 服务端调度 | `sdk/app/routers/unified.py` | `_execute_skill` → `_try_local_frida_action` |
|
||||
| Phantom 配置 | `sdk/scripts/anti_detect/phantom_frida_config.json` | 运行时随机端口(unified 自动读) |
|
||||
| 一键启动 | `sdk/scripts/frida_workphone_oneclick.sh` | Type-C:反检测 Frida + SDK + probe |
|
||||
| 冒烟 | `sdk/scripts/_hook_smoke.py` | hook/execute + send_message 全链路 |
|
||||
|
||||
**双端同步**:`sdk/app/agent/hook/` 与 `sdk/agent/hook/` 须保持一致(镜像部署)。
|
||||
|
||||
---
|
||||
|
||||
## 四、映射规模(2026-05-24 扫描)
|
||||
|
||||
| 指标 | 数量 |
|
||||
|------|------|
|
||||
| `ACTION_TO_RPC` 条数 | **119** |
|
||||
| `rpc.exports` 函数 | **123** |
|
||||
| 映射且 JS 已实现 | **119 / 119** |
|
||||
| 映射但 JS 缺失 | **0** |
|
||||
| 矩阵 V5 纠偏(原 V4「未确认导出」误报) | **32** 条 → 实际 **0** 真缺失 |
|
||||
|
||||
矩阵真源:`开发文档/5、接口/06-验收与矩阵/.../微信SDK真实控制接口矩阵V5_检测脚本纠偏_追加版_145843.json`
|
||||
|
||||
---
|
||||
|
||||
## 五、HTTP 调用(存客宝 / curl)
|
||||
|
||||
### 5.1 常用接口
|
||||
|
||||
```bash
|
||||
# 探活
|
||||
curl http://127.0.0.1:8899/api/v3/hook/probe/xgfe65eimrrofyws
|
||||
|
||||
# 拉好友(内部:get_contacts → getContacts → SQL)
|
||||
curl "http://127.0.0.1:8899/api/v3/contacts?device_id=xgfe65eimrrofyws&platform=wechat&limit=10000"
|
||||
|
||||
# 发消息(内部:send_message → sendMessage → Java)
|
||||
curl -X POST http://127.0.0.1:8899/api/v3/message/send \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"device_id": "xgfe65eimrrofyws",
|
||||
"platform": "wechat",
|
||||
"to_id": "filehelper",
|
||||
"content": "测试",
|
||||
"msg_type": "text",
|
||||
"channel": "hook"
|
||||
}'
|
||||
|
||||
# 任意 action(与 ACTION_TO_RPC 一致,snake_case)
|
||||
curl -X POST http://127.0.0.1:8899/api/v3/hook/execute \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"device_id": "xgfe65eimrrofyws",
|
||||
"action": "get_profile",
|
||||
"params": {}
|
||||
}'
|
||||
```
|
||||
|
||||
### 5.2 批量 RPC(batch_execute)
|
||||
|
||||
`batch_execute` 的 **params.actions[].action** 使用 **camelCase RPC 名**(JS 侧),不是 snake_case:
|
||||
|
||||
```json
|
||||
{
|
||||
"action": "batch_execute",
|
||||
"params": {
|
||||
"actions": [
|
||||
{ "action": "getContacts", "params": { "limit": 10 } },
|
||||
{ "action": "getProfile", "params": {} }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5.3 PHP SDK
|
||||
|
||||
```php
|
||||
$sdk = new WorkPhoneClient('http://127.0.0.1:8899', 'TOKEN');
|
||||
// 只传业务语义;RPC 映射在服务端完成
|
||||
$sdk->sendMessage('xgfe65eimrrofyws', 'wechat', 'filehelper', '你好', 'text', null, null, null, 'hook');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、Phantom 反检测 Frida(2026-05-24 落地)
|
||||
|
||||
### 6.1 问题
|
||||
|
||||
stock `frida-server -D` attach 微信时出现:
|
||||
|
||||
```text
|
||||
Failed to attach: unexpectedly timed out trying to sync up with agent
|
||||
```
|
||||
|
||||
表现为:`get_contacts` / `send_message` **间歇**失败,`hook/probe` → `supports_hook: false`。
|
||||
**不是 RPC 映射缺失**,是 attach 被微信/环境检测。
|
||||
|
||||
### 6.2 方案
|
||||
|
||||
1. 复制 `frida-server-16` 为 **随机文件名**(如 `fs_b16906`)
|
||||
2. **随机端口** 10000–60000 监听(非默认 27042)
|
||||
3. `adb forward tcp:PORT tcp:PORT`
|
||||
4. 写入 `phantom_frida_config.json`
|
||||
5. `unified.py` → `_get_frida_manager()` 优先 **mode=remote** 连接 `127.0.0.1:PORT`
|
||||
|
||||
### 6.3 命令
|
||||
|
||||
```bash
|
||||
# 一键(已含反检测步骤 3)
|
||||
cd sdk
|
||||
./scripts/frida_workphone_oneclick.sh -d 192.168.110.80:5555
|
||||
|
||||
# 或单独部署
|
||||
bash sdk/scripts/anti_detect/setup_phantom_frida.sh 192.168.110.80:5555
|
||||
|
||||
# 冒烟
|
||||
python3 sdk/scripts/_hook_smoke.py xgfe65eimrrofyws
|
||||
```
|
||||
|
||||
### 6.4 配置文件示例
|
||||
|
||||
` sdk/scripts/anti_detect/phantom_frida_config.json `(运行时生成,勿提交 Git):
|
||||
|
||||
```json
|
||||
{
|
||||
"device_serial": "192.168.110.80:5555",
|
||||
"listen_port": 48220,
|
||||
"binary_name": "fs_b16906",
|
||||
"binary_path": "/data/local/tmp/fs_b16906"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、真机验收记录(2026-05-24)
|
||||
|
||||
| 项 | 结果 |
|
||||
|----|------|
|
||||
| 设备 | `xgfe65eimrrofyws`(红米,ADB `192.168.110.80:5555`) |
|
||||
| 微信版本 | **8.0.56**(在 `_VERSION_TABLE` 内) |
|
||||
| Frida 主机 | **16.5.6** |
|
||||
| `hook/probe` | `supports_hook: true` |
|
||||
| `get_contacts` | **7906** 条,`channel: frida/hook`,~8–19s |
|
||||
| `send_message` → filehelper | ✅ `success: true`,Phantom 修复后稳定 |
|
||||
| CSV 导出 | `sdk/tmp/all_wechat_friends_xgfe65eimrrofyws.csv` |
|
||||
|
||||
---
|
||||
|
||||
## 八、本次对话交付(你做了什么 · 汇总)
|
||||
|
||||
### 8.1 文档与整理
|
||||
|
||||
- [x] 本文档:`开发文档/5、接口/03-Hook与微信/微信Frida_API契约.md`(由跳转 stub 扩为完整参考)
|
||||
- [x] 手册 §7 增补 RPC 映射 + Phantom 小节(v2.4)
|
||||
- [x] `03-Hook与微信/README.md` 索引更新
|
||||
- [x] `开发文档/10、项目管理/工作日志.md` 补记
|
||||
|
||||
### 8.2 代码(已 push `main`)
|
||||
|
||||
| Commit | 说明 |
|
||||
|--------|------|
|
||||
| `355ed27` | phantom Frida + `unified._get_frida_manager` remote 优先 + `frida_workphone_oneclick.sh` |
|
||||
| `68b4d8f` | `ACTION_TO_RPC` 扩展 + 双端 hook_executor / wechat_hook_v2 + `_hook_smoke.py` |
|
||||
| `53bd238` | 工作日志 GitHub 同步记录 |
|
||||
|
||||
### 8.3 关键文件清单
|
||||
|
||||
```
|
||||
sdk/app/routers/unified.py # phantom 配置 + Frida 会话池
|
||||
sdk/agent/hook/hook_executor.py # ACTION_TO_RPC(119)
|
||||
sdk/agent/hook/wechat_hook_v2.js # rpc.exports(123)
|
||||
sdk/agent/hook/frida_manager.py # call_rpc snake/camel 兼容
|
||||
sdk/scripts/frida_workphone_oneclick.sh # 一键反检测 Frida + SDK
|
||||
sdk/scripts/anti_detect/setup_phantom_frida.sh
|
||||
sdk/scripts/_hook_smoke.py
|
||||
sdk/scripts/anti_detect/phantom_frida_config.json # 运行时
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、故障排查
|
||||
|
||||
| 现象 | 可能原因 | 处理 |
|
||||
|------|----------|------|
|
||||
| `Frida 连接失败` / attach 超时 | stock frida-server 被检测 | 跑 oneclick 或 phantom 脚本 |
|
||||
| `RPC 方法不存在` | 映射有但 JS 未导出 | 查 `wechat_hook_v2.js`;当前 119/119 已齐 |
|
||||
| `Frida Hook 发送失败` | 版本表类失效或 Java 调用失败 | 查 `getWechatVersion` + `_VERSION_TABLE` |
|
||||
| `frida/hook(failed)` 空数据 | attach 断开 | 重启 phantom server,重启 SDK |
|
||||
| 矩阵写「未确认导出」 | V4 静态扫描误报 | 以 **V5 纠偏版** 为准 |
|
||||
|
||||
---
|
||||
|
||||
## 十、命名速查
|
||||
|
||||
| 层级 | 命名风格 | 示例 |
|
||||
|------|----------|------|
|
||||
| unified / 存客宝 API | snake_case | `send_message` |
|
||||
| ACTION_TO_RPC | snake → camel | `get_contacts` → `getContacts` |
|
||||
| batch_execute 内部 | camelCase | `getContacts` |
|
||||
| rpc.exports | camelCase 函数 | `sendMessage(params)` |
|
||||
| FridaManager.call_rpc | 自动 snake/camel | `getContacts` / `get_contacts` 均可 |
|
||||
|
||||
---
|
||||
|
||||
*RPC 映射是字典;Phantom attach 是开关;版本表是写操作的保险。三者齐,Frida 主控才稳。*
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 工作手机 · 完整整合手册(补全包并入版)
|
||||
|
||||
> **版本**:v2.2 · **更新**:2026-05-24
|
||||
> **版本**:v2.4 · **更新**:2026-05-24
|
||||
> **一句话**:2026-05-18 补全包 Frida 闭环 **已全部收编进 `sdk/`**;五图看全局,正文只补图中没有的命令、路径与验收数字。
|
||||
> **进度真源**:[开发进度总表.md](../10、项目管理/开发进度总表.md)(**99.5%**)
|
||||
> **图形风格**:[架构图风格标准.md](../2、架构/05-规范/架构图风格标准.md)
|
||||
@@ -230,20 +230,57 @@ curl -s -X POST "http://127.0.0.1:8899/api/v3/hook/execute" \
|
||||
|
||||
**控制台**:http://127.0.0.1:8899/static/index.html
|
||||
|
||||
### 6.4 家里 NAS 生产环境(2026-05-24)
|
||||
|
||||
| 场景 | 入口 | 说明 |
|
||||
|------|------|------|
|
||||
| **公网(推荐)** | **https://workphone.quwanzhi.com/hub** | kr Nginx 443 → frp → 家里 NAS :8899 |
|
||||
| 家里 WiFi | http://192.168.110.29:8899/hub | 同网直连,最稳 |
|
||||
| API 文档 | https://workphone.quwanzhi.com/docs | OpenAPI |
|
||||
| API Key | Header `X-API-Key: workphone-secret-key` | |
|
||||
|
||||
**部署脚本**(Mac 与 NAS 同网):`bash sdk/scripts/deploy_home_station.sh`
|
||||
|
||||
**外网注意**:本机开 Clash 时域名可能 fake-ip(198.18.x)→ 规则加 `DOMAIN-SUFFIX,quwanzhi.com,DIRECT`;HTTP:80 部分网络 Empty reply,请用 **HTTPS**。
|
||||
|
||||
**真机 Agent 连生产 NAS**(WiFi ADB 已通时,Mac 上执行):
|
||||
|
||||
```bash
|
||||
cd sdk/agent
|
||||
python3 agent.py -d xgfe65eimrrofyws \
|
||||
-s wss://workphone.quwanzhi.com/ws/device --heartbeat 10
|
||||
```
|
||||
|
||||
验收:`GET /health` → `devices_online: 1`。
|
||||
|
||||
---
|
||||
|
||||
## 七、RPC 四层兼容(补全包最值钱的设计)
|
||||
## 七、RPC 映射与 Frida 兼容
|
||||
|
||||
补全包反复踩坑的是 Frida RPC 方法名:`getMessages` vs `get_messages` vs `getmessages`。
|
||||
### 7.1 Frida RPC 映射(ACTION_TO_RPC)
|
||||
|
||||
**主线已固化在 `FridaManager.call()`**,调用顺序:
|
||||
业务 API 用 **snake_case**(`send_message`),Frida 脚本用 **camelCase**(`sendMessage`)。对照表在 `hook_executor.ACTION_TO_RPC`,**119 条已与 `wechat_hook_v2.js` rpc.exports 对齐**。
|
||||
|
||||
1. 原始 **camelCase**(Hook 导出原名)
|
||||
2. **snake_case**
|
||||
3. **全小写**
|
||||
4. **`invoke()`** 兜底
|
||||
完整五层调用链、curl/PHP 示例、验收数字 → **[微信Frida_API契约.md](../5、接口/03-Hook与微信/微信Frida_API契约.md)**。
|
||||
|
||||
回执里看 `method_used` 即可知道命中哪一层。替换 `wechat_hook_v3.js` 时 **服务器接口零改动**——这就是补全包留给主线的遗产,也是 110 项能稳定跑下来的底气。
|
||||
### 7.2 RPC 方法名四层兼容(FridaManager.call_rpc)
|
||||
|
||||
补全包反复踩坑的是 Frida Python 绑定方法名:`getMessages` vs `get_messages` vs `getmessages`。
|
||||
|
||||
**主线已固化在 `FridaManager.call_rpc()`**,调用顺序:
|
||||
|
||||
1. **snake_case**(Python 绑定常用)
|
||||
2. 原始 **camelCase**(Hook 导出原名)
|
||||
|
||||
### 7.3 Phantom 反检测 Frida(2026-05-24)
|
||||
|
||||
stock `frida-server -D` attach 微信可能超时。标准做法:
|
||||
|
||||
- 随机二进制名 + 随机端口 → `phantom_frida_config.json`
|
||||
- `unified.py` 自动读配置,走 **remote** attach
|
||||
- 一键:`sdk/scripts/frida_workphone_oneclick.sh`
|
||||
|
||||
详见契约文档 §六。
|
||||
|
||||
---
|
||||
|
||||
@@ -301,9 +338,11 @@ python3 开发文档/8、部署/05-测试验收/scripts/wireless_frida_wechat_ba
|
||||
| 接口 OpenAPI | [5、接口/04-OpenAPI/openapi_v3.0.json](../5、接口/04-OpenAPI/openapi_v3.0.json) |
|
||||
| 进度 | [开发进度总表.md](../10、项目管理/开发进度总表.md) |
|
||||
|
||||
以下文档 **已并入本章**,保留文件仅为旧链接锚点,勿再扩写:
|
||||
| **Frida RPC 完整参考** | [5、接口/03-Hook与微信/微信Frida_API契约.md](../5、接口/03-Hook与微信/微信Frida_API契约.md) |
|
||||
|
||||
- [微信Frida_API契约.md](../5、接口/03-Hook与微信/微信Frida_API契约.md) → 见 §3.1
|
||||
以下文档 **已并入本章**,保留文件仅为旧链接锚点:
|
||||
|
||||
- [微信Frida_API契约.md](../5、接口/03-Hook与微信/微信Frida_API契约.md) → §七 + 契约全文
|
||||
- [微信Frida无线部署与验证说明.md](../8、部署/02-设备Hook/微信Frida无线部署与验证说明.md) → 见 §八
|
||||
|
||||
---
|
||||
@@ -312,6 +351,7 @@ python3 开发文档/8、部署/05-测试验收/scripts/wireless_frida_wechat_ba
|
||||
|
||||
| 日期 | 版本 | 说明 |
|
||||
|------|------|------|
|
||||
| 2026-05-24 | **v2.4** | **Frida RPC 映射 + Phantom 部署** 契约文档扩写;§7 分拆映射/兼容/反检测 |
|
||||
| 2026-05-24 | **v2.3** | **接口全量目录 328 条** + 存客宝 BFF 映射 + 对接架构图;OpenAPI 315 paths 重导出 |
|
||||
| 2026-05-24 | **v2.1** | 附图本地化 fig06~09;机擎/开发文档总入口对齐 |
|
||||
| 2026-05-24 | **v2.0** | **补全包 + 微信Frida 补全包全文并入**;九模块路径对齐 `sdk/`;RPC 兼容 §七;无线部署 §八;架构/真机附图;去重原型 API |
|
||||
|
||||
Reference in New Issue
Block a user