chore: 收编 hook bridge · V5矩阵报告入库 · Obsidian 图谱配色

wechat_hook_bridge.js 进 sdk/agent/hook;Graph 视图按目录着色与 CSS snippet 对齐。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Manus AI
2026-05-24 09:17:52 +08:00
parent 30c8a20ca8
commit 2b6177f19d
11 changed files with 2747 additions and 0 deletions

55
.obsidian/graph.json vendored Normal file
View File

@@ -0,0 +1,55 @@
{
"collapse-filter": false,
"search": "",
"showTags": false,
"showAttachments": true,
"hideUnresolved": false,
"showOrphans": false,
"collapse-color-groups": false,
"colorGroups": [
{
"query": "path:开发文档/00-项目总览",
"color": { "a": 1, "rgb": 14010688 }
},
{
"query": "path:开发文档/2、架构",
"color": { "a": 1, "rgb": 14010688 }
},
{
"query": "path:开发文档/6、测试",
"color": { "a": 1, "rgb": 16338757 }
},
{
"query": "path:开发文档/8、部署",
"color": { "a": 1, "rgb": 5606192 }
},
{
"query": "path:开发文档/9、手册",
"color": { "a": 1, "rgb": 14010688 }
},
{
"query": "path:开发文档/10、项目管理",
"color": { "a": 1, "rgb": 12976168 }
},
{
"query": "path:机擎",
"color": { "a": 1, "rgb": 6954649 }
},
{
"query": "path:资料",
"color": { "a": 1, "rgb": 11337755 }
}
],
"collapse-display": true,
"showArrow": true,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.5,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 200,
"scale": 0.9,
"close": false
}

View File

@@ -5,6 +5,7 @@
## 文件说明
- `wechat_hook_v1.js`:微信 Hook 初版脚本(含 RPC + 消息事件上报骨架)
- `wechat_hook_bridge.js`安全桥接模板ping / 连接状态 / 占位 RPC可替换为完整 `wechat_hook_v*.js`
- `setup_redmi11.sh`红米11 一键初始化脚本
## 快速执行

View File

@@ -0,0 +1,45 @@
// 工作手机 SDK · 微信 Hook 桥接模板
// 说明这是安全桥接版优先提供连通性、截图、UI 导航等通用方法。
// 如果已有完整 wechat_hook_v3.js可直接替换本文件Python SDK 会兼容 camelCase/snake_case 调用。
'use strict';
function ok(data) { return { ok: true, data: data || null, ts: Date.now() }; }
function fail(message) { return { ok: false, error: String(message), ts: Date.now() }; }
function runJava(fn) {
let result;
Java.perform(function () {
try { result = fn(); } catch (e) { result = fail(e.stack || e.message || e); }
});
return result;
}
rpc.exports = {
ping: function () { return 'pong from wechat_hook_bridge'; },
getConnectionStatus: function () {
return ok({ java_available: Java.available, process: Process.id, arch: Process.arch, platform: Process.platform });
},
takeScreenshot: function () {
// 截图建议在手机端通过 uiautomator/screencap 实现Hook 层返回占位Agent 可扩展真实文件路径。
return ok({ mode: 'placeholder', message: '请在 mobile_agent 扩展 screencap -p 后回传文件路径' });
},
dumpUiTree: function () { return ok({ mode: 'placeholder', message: '建议通过 uiautomator dump 获取 UI XML' }); },
goHome: function () { return ok({ action: 'goHome', message: '桥接模板未执行 UI 点击;请替换完整 Hook 后验证' }); },
openContacts: function () { return ok({ action: 'openContacts', message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
openChats: function () { return ok({ action: 'openChats', message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
searchContact: function (keyword) { return ok({ keyword: keyword, message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
getContacts: function () { return ok({ contacts: [], message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
getContactProfile: function (wxid) { return ok({ wxid: wxid, message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
addFriend: function (keyword) { return fail('危险动作未在模板中实现addFriend ' + keyword); },
acceptFriend: function (wxid) { return fail('危险动作未在模板中实现acceptFriend ' + wxid); },
sendTextMessage: function (to, text) { return fail('危险动作未在模板中实现sendTextMessage ' + to); },
sendImageMessage: function (to, path) { return fail('危险动作未在模板中实现sendImageMessage ' + to); },
getMessages: function (wxid) { return ok({ wxid: wxid, messages: [], message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
openChat: function (wxid) { return ok({ wxid: wxid, message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
createGroup: function (members) { return fail('危险动作未在模板中实现createGroup'); },
inviteGroupMember: function (chatroom, members) { return fail('危险动作未在模板中实现inviteGroupMember'); },
getGroupMembers: function (chatroom) { return ok({ chatroom: chatroom, members: [], message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
browseChannels: function () { return ok({ message: 'NOT_IMPLEMENTED_IN_TEMPLATE' }); },
addFavorite: function () { return fail('危险动作未在模板中实现addFavorite'); },
addCustomEmoji: function () { return fail('危险动作未在模板中实现addCustomEmoji'); }
};

View File

@@ -0,0 +1,388 @@
{
"summary": {
"wechat_hook_v2_real_exports_count": 21,
"ckb_extension_exports_count": 0,
"total_unique_camel": 21,
"v4_flagged_unconfirmed": 32,
"v4_false_negative": 2,
"v4_truly_missing": 30
},
"all_real_exports_camel": [
"batchExecute",
"getContactsFull",
"getCurrentActivity",
"getGroupsFull",
"getHookStatus",
"getMessages",
"getProcessInfo",
"getRecentMessages",
"getScreenshotBase64",
"getVersionCompat",
"getWechatVersion",
"navigateToChat",
"navigateToMain",
"navigateToMoments",
"ping",
"searchMessages",
"sendMessage",
"simulateBack",
"simulateInput",
"simulateTap",
"takeScreenshot"
],
"ckb_extension_exports": [],
"v4_unconfirmed_truth_check": [
{
"idx": 1,
"action": "get_messages",
"mapped_rpc": "getMessages",
"category": "消息管理",
"title": "获取消息列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 2,
"action": "send_message",
"mapped_rpc": "sendMessage",
"category": "消息管理",
"title": "批量发送消息(服务端逐条下发,间隔防风控,单条超时可控)",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 4,
"action": "add_friend",
"mapped_rpc": "addFriend",
"category": "好友/联系人",
"title": "添加好友",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 5,
"action": "accept_friend",
"mapped_rpc": "acceptFriend",
"category": "好友/联系人",
"title": "通过好友请求",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 7,
"action": "delete_friend",
"mapped_rpc": "deleteFriend",
"category": "好友/联系人",
"title": "删除好友",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 9,
"action": "get_contacts",
"mapped_rpc": "getContacts",
"category": "好友/联系人",
"title": "获取联系人列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 10,
"action": "create_group",
"mapped_rpc": "createGroup",
"category": "群聊管理",
"title": "创建群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 11,
"action": "invite_to_group",
"mapped_rpc": "inviteToGroup",
"category": "群聊管理",
"title": "邀请入群",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 12,
"action": "remove_from_group",
"mapped_rpc": "removeFromGroup",
"category": "群聊管理",
"title": "移出群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 14,
"action": "set_group_name",
"mapped_rpc": "setGroupName",
"category": "群聊管理",
"title": "设置群名",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 15,
"action": "send_group_message",
"mapped_rpc": "sendGroupMessage",
"category": "消息管理",
"title": "发送群消息",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 17,
"action": "get_groups",
"mapped_rpc": "getGroups",
"category": "群聊管理",
"title": "获取群聊列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 18,
"action": "get_group_members",
"mapped_rpc": "getGroupMembers",
"category": "群聊管理",
"title": "获取群成员列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 25,
"action": "post_moments",
"mapped_rpc": "postMoments",
"category": "朋友圈管理",
"title": "发布朋友圈/瞬间(统一返回 200业务失败用 success=false 表示,避免 502",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 26,
"action": "like_moments",
"mapped_rpc": "likeMoments",
"category": "朋友圈管理",
"title": "点赞朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 27,
"action": "comment_moments",
"mapped_rpc": "commentMoments",
"category": "朋友圈管理",
"title": "评论朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 28,
"action": "get_moments",
"mapped_rpc": "getMoments",
"category": "朋友圈管理",
"title": "获取朋友圈列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 29,
"action": "forward_message",
"mapped_rpc": "forwardMessage",
"category": "消息管理",
"title": "转发消息",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 32,
"action": "get_profile",
"mapped_rpc": "getProfile",
"category": "资料/账号设置",
"title": "获取当前微信账号资料",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 38,
"action": "check_account_status",
"mapped_rpc": "checkAccountStatus",
"category": "账号安全/限制",
"title": "检查账号状态",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 43,
"action": "get_favorites",
"mapped_rpc": "getFavorites",
"category": "收藏/文件/表情",
"title": "获取收藏列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 49,
"action": "quit_group",
"mapped_rpc": "quitGroup",
"category": "群聊管理",
"title": "退出群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 50,
"action": "delete_moments",
"mapped_rpc": "deleteMoments",
"category": "朋友圈管理",
"title": "删除朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 51,
"action": "send_red_packet",
"mapped_rpc": "sendRedPacket",
"category": "支付/钱包",
"title": "发红包",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 53,
"action": "open_mini_program",
"mapped_rpc": "openMiniProgram",
"category": "扫码/小程序/公众号",
"title": "打开小程序",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 54,
"action": "follow_official_account",
"mapped_rpc": "followOfficialAccount",
"category": "扫码/小程序/公众号",
"title": "关注公众号",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 65,
"action": "scan_qr_code",
"mapped_rpc": "scanQrCode",
"category": "扫码/小程序/公众号",
"title": "扫描二维码",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 73,
"action": "receive_red_packet",
"mapped_rpc": "receiveRedPacket",
"category": "支付/钱包",
"title": "领取红包",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 81,
"action": "send_location",
"mapped_rpc": "sendLocation",
"category": "位置/通话",
"title": "发送位置",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 83,
"action": "send_emoji",
"mapped_rpc": "sendEmoji",
"category": "收藏/文件/表情",
"title": "发送表情",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 94,
"action": "logout",
"mapped_rpc": "logout",
"category": "设置管理",
"title": "退出登录",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
},
{
"idx": 95,
"action": "switch_account",
"mapped_rpc": "switchAccount",
"category": "设置管理",
"title": "切换账号",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": false,
"implementation_kind": "missing",
"verdict": "V4 准确(确实缺失)"
}
]
}

View File

@@ -0,0 +1,104 @@
# 微信SDK真实控制接口矩阵 V5 — 检测脚本纠偏(追加版)
生成时间2026-05-23 14:56:30
## 一、结论速览
- `wechat_hook_v2.js` 真实 `rpc.exports` 顶层方法数:**21**
- `wechat_hook_ckb_patch.js` 扩展 RPC 数:**0**
- 去重总数(驼峰):**21**
- V4 矩阵标记「未确认导出」总条数:**32**
- 其中 **V4 误判(脚本 bug****2** 条
- 其中 **V4 准确(确实缺失)****30** 条
## 二、根因
`tools/build_wechat_sdk_true_control_matrix_v3_1858.py``parse_hook_exports()` 用了:
```python
m = re.search(r'rpc\.exports\s*=\s*\{(?P<body>.*?)}\s*;', text, flags=re.S)
```
`.*?` 是**非贪婪**匹配,遇到第一个内层 `};`(例如某个 export 内部 `return { success: false, ... };`)就停止,
导致只捕获到 `rpc.exports` 头部的极少数方法(如 `ping``getProcessInfo``getHookStatus``getWechatVersion`
后面 17 个真实导出全部被误标「未确认导出」。
## 三、V4 「未确认导出」逐条核对
| # | action | RPC | 类目 | V4 声称 | 实际是否导出 | 实现类型 | 结论 |
|---|--------|-----|------|---------|--------------|----------|------|
| 1 | `get_messages` | `getMessages` | 消息管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 2 | `send_message` | `sendMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 4 | `add_friend` | `addFriend` | 好友/联系人 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 5 | `accept_friend` | `acceptFriend` | 好友/联系人 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 7 | `delete_friend` | `deleteFriend` | 好友/联系人 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 9 | `get_contacts` | `getContacts` | 好友/联系人 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 10 | `create_group` | `createGroup` | 群聊管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 11 | `invite_to_group` | `inviteToGroup` | 群聊管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 12 | `remove_from_group` | `removeFromGroup` | 群聊管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 14 | `set_group_name` | `setGroupName` | 群聊管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 15 | `send_group_message` | `sendGroupMessage` | 消息管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 17 | `get_groups` | `getGroups` | 群聊管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 18 | `get_group_members` | `getGroupMembers` | 群聊管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 25 | `post_moments` | `postMoments` | 朋友圈管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 26 | `like_moments` | `likeMoments` | 朋友圈管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 27 | `comment_moments` | `commentMoments` | 朋友圈管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 28 | `get_moments` | `getMoments` | 朋友圈管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 29 | `forward_message` | `forwardMessage` | 消息管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 32 | `get_profile` | `getProfile` | 资料/账号设置 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 38 | `check_account_status` | `checkAccountStatus` | 账号安全/限制 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 43 | `get_favorites` | `getFavorites` | 收藏/文件/表情 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 49 | `quit_group` | `quitGroup` | 群聊管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 50 | `delete_moments` | `deleteMoments` | 朋友圈管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 51 | `send_red_packet` | `sendRedPacket` | 支付/钱包 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 53 | `open_mini_program` | `openMiniProgram` | 扫码/小程序/公众号 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 54 | `follow_official_account` | `followOfficialAccount` | 扫码/小程序/公众号 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 65 | `scan_qr_code` | `scanQrCode` | 扫码/小程序/公众号 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 73 | `receive_red_packet` | `receiveRedPacket` | 支付/钱包 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 81 | `send_location` | `sendLocation` | 位置/通话 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 83 | `send_emoji` | `sendEmoji` | 收藏/文件/表情 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 94 | `logout` | `logout` | 设置管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
| 95 | `switch_account` | `switchAccount` | 设置管理 | 未确认导出 | ❌ 未导出 | missing | V4 准确(确实缺失) |
## 四、修正建议
1. **修 V3 检测脚本**:用括号配平(栈式)方式提取 `rpc.exports = { ... };` 块,
不要用非贪婪正则。本 V5 脚本的 `extract_rpc_exports_block` 可直接复用。
2. **重跑 V4 矩阵**:基于修好的检测脚本重新生成 V4把「未确认导出」改为真实状态
`已导出+SQL/Java 实现`A 类核心vs `已导出但只做 Intent 占位`B 类待补)。
3. **实现类型细分**
- `sql_or_java`:通过 `_execSQL``Java.performNow` 读 SQLite/调 Java 实现,可视为 A 类核心;
- `intent_only`:只发 `_intentAction` 广播,仍依赖 Agent 端 IntentReceiver/ADB 兜底,不算 Hook 直达;
- `mixed_sql_intent`:先尝试 SQL再降级 Intent。
## 五、所有真实 RPC 导出(驼峰名,去重后字典序)
```
batchExecute
getContactsFull
getCurrentActivity
getGroupsFull
getHookStatus
getMessages
getProcessInfo
getRecentMessages
getScreenshotBase64
getVersionCompat
getWechatVersion
navigateToChat
navigateToMain
navigateToMoments
ping
searchMessages
sendMessage
simulateBack
simulateInput
simulateTap
takeScreenshot
```
## 六、CKB 扩展 RPC
```
```

View File

@@ -0,0 +1,493 @@
{
"summary": {
"wechat_hook_v2_real_exports_count": 126,
"ckb_extension_exports_count": 0,
"total_unique_camel": 126,
"v4_flagged_unconfirmed": 32,
"v4_false_negative": 32,
"v4_truly_missing": 0
},
"all_real_exports_camel": [
"acceptFriend",
"addCustomEmoji",
"addFavorite",
"addFriend",
"addFriendByQr",
"addToFloat",
"autoRegister",
"batchExecute",
"bindPhone",
"browseChannels",
"changePassword",
"checkAccountStatus",
"checkLoginState",
"clearChatHistory",
"commentChannelVideo",
"commentMoments",
"createGroup",
"createLabel",
"deleteFavorite",
"deleteFriend",
"deleteLabel",
"deleteMoments",
"enableFingerprint",
"followChannel",
"followOfficialAccount",
"forwardMessage",
"forwardMultiple",
"generateGroupQrCode",
"generateMyQrCode",
"getConnectionStatus",
"getContactInfo",
"getContactStats",
"getContacts",
"getContactsByLabel",
"getContactsFull",
"getCurrentActivity",
"getDeviceInfo",
"getFavorites",
"getFriendRequests",
"getGroupInfo",
"getGroupMembers",
"getGroups",
"getGroupsFull",
"getHookStatus",
"getLabels",
"getLoginDevices",
"getMessages",
"getMoments",
"getNetworkInfo",
"getOfficialAccountArticles",
"getOfficialAccounts",
"getProcessInfo",
"getProfile",
"getRecentMessages",
"getRecentMiniPrograms",
"getScreenshotBase64",
"getSimPhone",
"getStorageInfo",
"getTransactionHistory",
"getVersionCompat",
"getWalletBalance",
"getWechatVersion",
"globalSearch",
"inviteToGroup",
"likeChannelVideo",
"likeMoments",
"loginByPassword",
"loginBySms",
"logout",
"navigateToChat",
"navigateToMain",
"navigateToMoments",
"openMiniProgram",
"pinChat",
"ping",
"postMoments",
"quitGroup",
"rawSql",
"receiveRedPacket",
"receiveTransfer",
"registerAccount",
"removeFromFloat",
"removeFromGroup",
"removeLoginDevice",
"revokeMessage",
"scanQrCode",
"searchContacts",
"searchMessages",
"sendCard",
"sendEmoji",
"sendFile",
"sendGroupMessage",
"sendImage",
"sendLink",
"sendLocation",
"sendMessage",
"sendRedPacket",
"sendTransfer",
"sendVideo",
"sendVoice",
"setAccountProtection",
"setAvatar",
"setChatBackground",
"setContactLabel",
"setDoNotDisturb",
"setFriendRemark",
"setGroupAnnouncement",
"setGroupName",
"setNickname",
"setNotification",
"setPrivacy",
"setRegion",
"setSex",
"setSignature",
"setWhatUp",
"shareChannelVideo",
"shareMiniProgram",
"simulateBack",
"simulateInput",
"simulateTap",
"switchAccount",
"takeScreenshot",
"unbindPhone",
"unblockSelf",
"unfollowChannel",
"unfollowOfficialAccount"
],
"ckb_extension_exports": [],
"v4_unconfirmed_truth_check": [
{
"idx": 1,
"action": "get_messages",
"mapped_rpc": "getMessages",
"category": "消息管理",
"title": "获取消息列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 2,
"action": "send_message",
"mapped_rpc": "sendMessage",
"category": "消息管理",
"title": "批量发送消息(服务端逐条下发,间隔防风控,单条超时可控)",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 4,
"action": "add_friend",
"mapped_rpc": "addFriend",
"category": "好友/联系人",
"title": "添加好友",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 5,
"action": "accept_friend",
"mapped_rpc": "acceptFriend",
"category": "好友/联系人",
"title": "通过好友请求",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 7,
"action": "delete_friend",
"mapped_rpc": "deleteFriend",
"category": "好友/联系人",
"title": "删除好友",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 9,
"action": "get_contacts",
"mapped_rpc": "getContacts",
"category": "好友/联系人",
"title": "获取联系人列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 10,
"action": "create_group",
"mapped_rpc": "createGroup",
"category": "群聊管理",
"title": "创建群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 11,
"action": "invite_to_group",
"mapped_rpc": "inviteToGroup",
"category": "群聊管理",
"title": "邀请入群",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 12,
"action": "remove_from_group",
"mapped_rpc": "removeFromGroup",
"category": "群聊管理",
"title": "移出群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 14,
"action": "set_group_name",
"mapped_rpc": "setGroupName",
"category": "群聊管理",
"title": "设置群名",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 15,
"action": "send_group_message",
"mapped_rpc": "sendGroupMessage",
"category": "消息管理",
"title": "发送群消息",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 17,
"action": "get_groups",
"mapped_rpc": "getGroups",
"category": "群聊管理",
"title": "获取群聊列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 18,
"action": "get_group_members",
"mapped_rpc": "getGroupMembers",
"category": "群聊管理",
"title": "获取群成员列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 25,
"action": "post_moments",
"mapped_rpc": "postMoments",
"category": "朋友圈管理",
"title": "发布朋友圈/瞬间(统一返回 200业务失败用 success=false 表示,避免 502",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 26,
"action": "like_moments",
"mapped_rpc": "likeMoments",
"category": "朋友圈管理",
"title": "点赞朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 27,
"action": "comment_moments",
"mapped_rpc": "commentMoments",
"category": "朋友圈管理",
"title": "评论朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 28,
"action": "get_moments",
"mapped_rpc": "getMoments",
"category": "朋友圈管理",
"title": "获取朋友圈列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 29,
"action": "forward_message",
"mapped_rpc": "forwardMessage",
"category": "消息管理",
"title": "转发消息",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 32,
"action": "get_profile",
"mapped_rpc": "getProfile",
"category": "资料/账号设置",
"title": "获取当前微信账号资料",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 38,
"action": "check_account_status",
"mapped_rpc": "checkAccountStatus",
"category": "账号安全/限制",
"title": "检查账号状态",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 43,
"action": "get_favorites",
"mapped_rpc": "getFavorites",
"category": "收藏/文件/表情",
"title": "获取收藏列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 49,
"action": "quit_group",
"mapped_rpc": "quitGroup",
"category": "群聊管理",
"title": "退出群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 50,
"action": "delete_moments",
"mapped_rpc": "deleteMoments",
"category": "朋友圈管理",
"title": "删除朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 51,
"action": "send_red_packet",
"mapped_rpc": "sendRedPacket",
"category": "支付/钱包",
"title": "发红包",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 53,
"action": "open_mini_program",
"mapped_rpc": "openMiniProgram",
"category": "扫码/小程序/公众号",
"title": "打开小程序",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 54,
"action": "follow_official_account",
"mapped_rpc": "followOfficialAccount",
"category": "扫码/小程序/公众号",
"title": "关注公众号",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 65,
"action": "scan_qr_code",
"mapped_rpc": "scanQrCode",
"category": "扫码/小程序/公众号",
"title": "扫描二维码",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 73,
"action": "receive_red_packet",
"mapped_rpc": "receiveRedPacket",
"category": "支付/钱包",
"title": "领取红包",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 81,
"action": "send_location",
"mapped_rpc": "sendLocation",
"category": "位置/通话",
"title": "发送位置",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 83,
"action": "send_emoji",
"mapped_rpc": "sendEmoji",
"category": "收藏/文件/表情",
"title": "发送表情",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 94,
"action": "logout",
"mapped_rpc": "logout",
"category": "设置管理",
"title": "退出登录",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 95,
"action": "switch_account",
"mapped_rpc": "switchAccount",
"category": "设置管理",
"title": "切换账号",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
}
]
}

View File

@@ -0,0 +1,209 @@
# 微信SDK真实控制接口矩阵 V5 — 检测脚本纠偏(追加版)
生成时间2026-05-23 14:57:31
## 一、结论速览
- `wechat_hook_v2.js` 真实 `rpc.exports` 顶层方法数:**126**
- `wechat_hook_ckb_patch.js` 扩展 RPC 数:**0**
- 去重总数(驼峰):**126**
- V4 矩阵标记「未确认导出」总条数:**32**
- 其中 **V4 误判(脚本 bug****32** 条
- 其中 **V4 准确(确实缺失)****0** 条
## 二、根因
`tools/build_wechat_sdk_true_control_matrix_v3_1858.py``parse_hook_exports()` 用了:
```python
m = re.search(r'rpc\.exports\s*=\s*\{(?P<body>.*?)}\s*;', text, flags=re.S)
```
`.*?` 是**非贪婪**匹配,遇到第一个内层 `};`(例如某个 export 内部 `return { success: false, ... };`)就停止,
导致只捕获到 `rpc.exports` 头部的极少数方法(如 `ping``getProcessInfo``getHookStatus``getWechatVersion`
后面 122 个真实导出全部被误标「未确认导出」。
## 三、V4 「未确认导出」逐条核对
| # | action | RPC | 类目 | V4 声称 | 实际是否导出 | 实现类型 | 结论 |
|---|--------|-----|------|---------|--------------|----------|------|
| 1 | `get_messages` | `getMessages` | 消息管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 2 | `send_message` | `sendMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 4 | `add_friend` | `addFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 5 | `accept_friend` | `acceptFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 7 | `delete_friend` | `deleteFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 9 | `get_contacts` | `getContacts` | 好友/联系人 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 10 | `create_group` | `createGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 11 | `invite_to_group` | `inviteToGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 12 | `remove_from_group` | `removeFromGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 14 | `set_group_name` | `setGroupName` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 15 | `send_group_message` | `sendGroupMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 17 | `get_groups` | `getGroups` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 18 | `get_group_members` | `getGroupMembers` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 25 | `post_moments` | `postMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 26 | `like_moments` | `likeMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 27 | `comment_moments` | `commentMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 28 | `get_moments` | `getMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 29 | `forward_message` | `forwardMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 32 | `get_profile` | `getProfile` | 资料/账号设置 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 38 | `check_account_status` | `checkAccountStatus` | 账号安全/限制 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 43 | `get_favorites` | `getFavorites` | 收藏/文件/表情 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 49 | `quit_group` | `quitGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 50 | `delete_moments` | `deleteMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 51 | `send_red_packet` | `sendRedPacket` | 支付/钱包 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 53 | `open_mini_program` | `openMiniProgram` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 54 | `follow_official_account` | `followOfficialAccount` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 65 | `scan_qr_code` | `scanQrCode` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 73 | `receive_red_packet` | `receiveRedPacket` | 支付/钱包 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 81 | `send_location` | `sendLocation` | 位置/通话 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 83 | `send_emoji` | `sendEmoji` | 收藏/文件/表情 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 94 | `logout` | `logout` | 设置管理 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 95 | `switch_account` | `switchAccount` | 设置管理 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
## 四、修正建议
1. **修 V3 检测脚本**:用括号配平(栈式)方式提取 `rpc.exports = { ... };` 块,
不要用非贪婪正则。本 V5 脚本的 `extract_rpc_exports_block` 可直接复用。
2. **重跑 V4 矩阵**:基于修好的检测脚本重新生成 V4把「未确认导出」改为真实状态
`已导出+SQL/Java 实现`A 类核心vs `已导出但只做 Intent 占位`B 类待补)。
3. **实现类型细分**
- `sql_or_java`:通过 `_execSQL``Java.performNow` 读 SQLite/调 Java 实现,可视为 A 类核心;
- `intent_only`:只发 `_intentAction` 广播,仍依赖 Agent 端 IntentReceiver/ADB 兜底,不算 Hook 直达;
- `mixed_sql_intent`:先尝试 SQL再降级 Intent。
## 五、所有真实 RPC 导出(驼峰名,去重后字典序)
```
acceptFriend
addCustomEmoji
addFavorite
addFriend
addFriendByQr
addToFloat
autoRegister
batchExecute
bindPhone
browseChannels
changePassword
checkAccountStatus
checkLoginState
clearChatHistory
commentChannelVideo
commentMoments
createGroup
createLabel
deleteFavorite
deleteFriend
deleteLabel
deleteMoments
enableFingerprint
followChannel
followOfficialAccount
forwardMessage
forwardMultiple
generateGroupQrCode
generateMyQrCode
getConnectionStatus
getContactInfo
getContactStats
getContacts
getContactsByLabel
getContactsFull
getCurrentActivity
getDeviceInfo
getFavorites
getFriendRequests
getGroupInfo
getGroupMembers
getGroups
getGroupsFull
getHookStatus
getLabels
getLoginDevices
getMessages
getMoments
getNetworkInfo
getOfficialAccountArticles
getOfficialAccounts
getProcessInfo
getProfile
getRecentMessages
getRecentMiniPrograms
getScreenshotBase64
getSimPhone
getStorageInfo
getTransactionHistory
getVersionCompat
getWalletBalance
getWechatVersion
globalSearch
inviteToGroup
likeChannelVideo
likeMoments
loginByPassword
loginBySms
logout
navigateToChat
navigateToMain
navigateToMoments
openMiniProgram
pinChat
ping
postMoments
quitGroup
rawSql
receiveRedPacket
receiveTransfer
registerAccount
removeFromFloat
removeFromGroup
removeLoginDevice
revokeMessage
scanQrCode
searchContacts
searchMessages
sendCard
sendEmoji
sendFile
sendGroupMessage
sendImage
sendLink
sendLocation
sendMessage
sendRedPacket
sendTransfer
sendVideo
sendVoice
setAccountProtection
setAvatar
setChatBackground
setContactLabel
setDoNotDisturb
setFriendRemark
setGroupAnnouncement
setGroupName
setNickname
setNotification
setPrivacy
setRegion
setSex
setSignature
setWhatUp
shareChannelVideo
shareMiniProgram
simulateBack
simulateInput
simulateTap
switchAccount
takeScreenshot
unbindPhone
unblockSelf
unfollowChannel
unfollowOfficialAccount
```
## 六、CKB 扩展 RPC
```
```

View File

@@ -0,0 +1,506 @@
{
"summary": {
"wechat_hook_v2_real_exports_count": 126,
"ckb_extension_exports_count": 6,
"total_unique_camel": 132,
"v4_flagged_unconfirmed": 32,
"v4_false_negative": 32,
"v4_truly_missing": 0
},
"all_real_exports_camel": [
"acceptFriend",
"addCustomEmoji",
"addFavorite",
"addFriend",
"addFriendByQr",
"addToFloat",
"autoRegister",
"batchExecute",
"batchSyncContacts",
"bindPhone",
"browseChannels",
"changePassword",
"checkAccountStatus",
"checkLoginState",
"clearChatHistory",
"commentChannelVideo",
"commentMoments",
"createGroup",
"createLabel",
"deleteFavorite",
"deleteFriend",
"deleteLabel",
"deleteMoments",
"enableFingerprint",
"followChannel",
"followOfficialAccount",
"forwardMessage",
"forwardMultiple",
"generateGroupQrCode",
"generateMyQrCode",
"getConnectionStatus",
"getContactDetail",
"getContactInfo",
"getContactStats",
"getContacts",
"getContactsByLabel",
"getContactsDetail",
"getContactsFull",
"getCurrentActivity",
"getDeviceInfo",
"getFavorites",
"getFriendRequests",
"getGroupInfo",
"getGroupMembers",
"getGroupMembersDetail",
"getGroups",
"getGroupsFull",
"getHookStatus",
"getLabels",
"getLoginDevices",
"getMessages",
"getMoments",
"getNetworkInfo",
"getOfficialAccountArticles",
"getOfficialAccounts",
"getProcessInfo",
"getProfile",
"getRecentMessages",
"getRecentMiniPrograms",
"getScreenshotBase64",
"getSimPhone",
"getStorageInfo",
"getTransactionHistory",
"getVersionCompat",
"getWalletBalance",
"getWechatVersion",
"globalSearch",
"inviteToGroup",
"likeChannelVideo",
"likeMoments",
"loginByPassword",
"loginBySms",
"logout",
"navigateToChat",
"navigateToMain",
"navigateToMoments",
"openMiniProgram",
"pinChat",
"ping",
"postMoments",
"quitGroup",
"rawSql",
"receiveRedPacket",
"receiveTransfer",
"registerAccount",
"removeFromFloat",
"removeFromGroup",
"removeLoginDevice",
"revokeMessage",
"scanQrCode",
"searchContacts",
"searchMessages",
"sendCard",
"sendEmoji",
"sendFile",
"sendGroupMessage",
"sendImage",
"sendLink",
"sendLocation",
"sendMessage",
"sendRedPacket",
"sendTransfer",
"sendVideo",
"sendVoice",
"setAccountProtection",
"setAvatar",
"setChatBackground",
"setContactLabel",
"setDoNotDisturb",
"setFriendRemark",
"setGroupAnnouncement",
"setGroupName",
"setNickname",
"setNotification",
"setPrivacy",
"setRegion",
"setSex",
"setSignature",
"setWhatUp",
"shareChannelVideo",
"shareMiniProgram",
"simulateBack",
"simulateInput",
"simulateTap",
"startFriendAddListener",
"startGroupMemberListener",
"switchAccount",
"takeScreenshot",
"unbindPhone",
"unblockSelf",
"unfollowChannel",
"unfollowOfficialAccount"
],
"ckb_extension_exports": [
"getContactsDetail",
"getContactDetail",
"getGroupMembersDetail",
"startFriendAddListener",
"startGroupMemberListener",
"batchSyncContacts"
],
"v4_unconfirmed_truth_check": [
{
"idx": 1,
"action": "get_messages",
"mapped_rpc": "getMessages",
"category": "消息管理",
"title": "获取消息列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 2,
"action": "send_message",
"mapped_rpc": "sendMessage",
"category": "消息管理",
"title": "批量发送消息(服务端逐条下发,间隔防风控,单条超时可控)",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 4,
"action": "add_friend",
"mapped_rpc": "addFriend",
"category": "好友/联系人",
"title": "添加好友",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 5,
"action": "accept_friend",
"mapped_rpc": "acceptFriend",
"category": "好友/联系人",
"title": "通过好友请求",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 7,
"action": "delete_friend",
"mapped_rpc": "deleteFriend",
"category": "好友/联系人",
"title": "删除好友",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 9,
"action": "get_contacts",
"mapped_rpc": "getContacts",
"category": "好友/联系人",
"title": "获取联系人列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 10,
"action": "create_group",
"mapped_rpc": "createGroup",
"category": "群聊管理",
"title": "创建群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 11,
"action": "invite_to_group",
"mapped_rpc": "inviteToGroup",
"category": "群聊管理",
"title": "邀请入群",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 12,
"action": "remove_from_group",
"mapped_rpc": "removeFromGroup",
"category": "群聊管理",
"title": "移出群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 14,
"action": "set_group_name",
"mapped_rpc": "setGroupName",
"category": "群聊管理",
"title": "设置群名",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 15,
"action": "send_group_message",
"mapped_rpc": "sendGroupMessage",
"category": "消息管理",
"title": "发送群消息",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 17,
"action": "get_groups",
"mapped_rpc": "getGroups",
"category": "群聊管理",
"title": "获取群聊列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 18,
"action": "get_group_members",
"mapped_rpc": "getGroupMembers",
"category": "群聊管理",
"title": "获取群成员列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 25,
"action": "post_moments",
"mapped_rpc": "postMoments",
"category": "朋友圈管理",
"title": "发布朋友圈/瞬间(统一返回 200业务失败用 success=false 表示,避免 502",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 26,
"action": "like_moments",
"mapped_rpc": "likeMoments",
"category": "朋友圈管理",
"title": "点赞朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 27,
"action": "comment_moments",
"mapped_rpc": "commentMoments",
"category": "朋友圈管理",
"title": "评论朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 28,
"action": "get_moments",
"mapped_rpc": "getMoments",
"category": "朋友圈管理",
"title": "获取朋友圈列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 29,
"action": "forward_message",
"mapped_rpc": "forwardMessage",
"category": "消息管理",
"title": "转发消息",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 32,
"action": "get_profile",
"mapped_rpc": "getProfile",
"category": "资料/账号设置",
"title": "获取当前微信账号资料",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 38,
"action": "check_account_status",
"mapped_rpc": "checkAccountStatus",
"category": "账号安全/限制",
"title": "检查账号状态",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 43,
"action": "get_favorites",
"mapped_rpc": "getFavorites",
"category": "收藏/文件/表情",
"title": "获取收藏列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 49,
"action": "quit_group",
"mapped_rpc": "quitGroup",
"category": "群聊管理",
"title": "退出群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "simple_return",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 50,
"action": "delete_moments",
"mapped_rpc": "deleteMoments",
"category": "朋友圈管理",
"title": "删除朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 51,
"action": "send_red_packet",
"mapped_rpc": "sendRedPacket",
"category": "支付/钱包",
"title": "发红包",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 53,
"action": "open_mini_program",
"mapped_rpc": "openMiniProgram",
"category": "扫码/小程序/公众号",
"title": "打开小程序",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 54,
"action": "follow_official_account",
"mapped_rpc": "followOfficialAccount",
"category": "扫码/小程序/公众号",
"title": "关注公众号",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 65,
"action": "scan_qr_code",
"mapped_rpc": "scanQrCode",
"category": "扫码/小程序/公众号",
"title": "扫描二维码",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 73,
"action": "receive_red_packet",
"mapped_rpc": "receiveRedPacket",
"category": "支付/钱包",
"title": "领取红包",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 81,
"action": "send_location",
"mapped_rpc": "sendLocation",
"category": "位置/通话",
"title": "发送位置",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 83,
"action": "send_emoji",
"mapped_rpc": "sendEmoji",
"category": "收藏/文件/表情",
"title": "发送表情",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 94,
"action": "logout",
"mapped_rpc": "logout",
"category": "设置管理",
"title": "退出登录",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 95,
"action": "switch_account",
"mapped_rpc": "switchAccount",
"category": "设置管理",
"title": "切换账号",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "intent_only",
"verdict": "V4 误判(脚本 bug"
}
]
}

View File

@@ -0,0 +1,220 @@
# 微信SDK真实控制接口矩阵 V5 — 检测脚本纠偏(追加版)
生成时间2026-05-23 14:58:00
## 一、结论速览
- `wechat_hook_v2.js` 真实 `rpc.exports` 顶层方法数:**126**
- `wechat_hook_ckb_patch.js` 扩展 RPC 数:**6**
- 去重总数(驼峰):**132**
- V4 矩阵标记「未确认导出」总条数:**32**
- 其中 **V4 误判(脚本 bug****32** 条
- 其中 **V4 准确(确实缺失)****0** 条
## 二、根因
`tools/build_wechat_sdk_true_control_matrix_v3_1858.py``parse_hook_exports()` 用了:
```python
m = re.search(r'rpc\.exports\s*=\s*\{(?P<body>.*?)}\s*;', text, flags=re.S)
```
`.*?` 是**非贪婪**匹配,遇到第一个内层 `};`(例如某个 export 内部 `return { success: false, ... };`)就停止,
导致只捕获到 `rpc.exports` 头部的极少数方法(如 `ping``getProcessInfo``getHookStatus``getWechatVersion`
后面 122 个真实导出全部被误标「未确认导出」。
## 三、V4 「未确认导出」逐条核对
| # | action | RPC | 类目 | V4 声称 | 实际是否导出 | 实现类型 | 结论 |
|---|--------|-----|------|---------|--------------|----------|------|
| 1 | `get_messages` | `getMessages` | 消息管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 2 | `send_message` | `sendMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 4 | `add_friend` | `addFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 5 | `accept_friend` | `acceptFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 7 | `delete_friend` | `deleteFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 9 | `get_contacts` | `getContacts` | 好友/联系人 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 10 | `create_group` | `createGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 11 | `invite_to_group` | `inviteToGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 12 | `remove_from_group` | `removeFromGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 14 | `set_group_name` | `setGroupName` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 15 | `send_group_message` | `sendGroupMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 17 | `get_groups` | `getGroups` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 18 | `get_group_members` | `getGroupMembers` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 25 | `post_moments` | `postMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 26 | `like_moments` | `likeMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 27 | `comment_moments` | `commentMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 28 | `get_moments` | `getMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 29 | `forward_message` | `forwardMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 32 | `get_profile` | `getProfile` | 资料/账号设置 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 38 | `check_account_status` | `checkAccountStatus` | 账号安全/限制 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 43 | `get_favorites` | `getFavorites` | 收藏/文件/表情 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 49 | `quit_group` | `quitGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | simple_return | V4 误判(脚本 bug |
| 50 | `delete_moments` | `deleteMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 51 | `send_red_packet` | `sendRedPacket` | 支付/钱包 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 53 | `open_mini_program` | `openMiniProgram` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 54 | `follow_official_account` | `followOfficialAccount` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 65 | `scan_qr_code` | `scanQrCode` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 73 | `receive_red_packet` | `receiveRedPacket` | 支付/钱包 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 81 | `send_location` | `sendLocation` | 位置/通话 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 83 | `send_emoji` | `sendEmoji` | 收藏/文件/表情 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 94 | `logout` | `logout` | 设置管理 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
| 95 | `switch_account` | `switchAccount` | 设置管理 | 未确认导出 | ✅ 已导出 | intent_only | V4 误判(脚本 bug |
## 四、修正建议
1. **修 V3 检测脚本**:用括号配平(栈式)方式提取 `rpc.exports = { ... };` 块,
不要用非贪婪正则。本 V5 脚本的 `extract_rpc_exports_block` 可直接复用。
2. **重跑 V4 矩阵**:基于修好的检测脚本重新生成 V4把「未确认导出」改为真实状态
`已导出+SQL/Java 实现`A 类核心vs `已导出但只做 Intent 占位`B 类待补)。
3. **实现类型细分**
- `sql_or_java`:通过 `_execSQL``Java.performNow` 读 SQLite/调 Java 实现,可视为 A 类核心;
- `intent_only`:只发 `_intentAction` 广播,仍依赖 Agent 端 IntentReceiver/ADB 兜底,不算 Hook 直达;
- `mixed_sql_intent`:先尝试 SQL再降级 Intent。
## 五、所有真实 RPC 导出(驼峰名,去重后字典序)
```
acceptFriend
addCustomEmoji
addFavorite
addFriend
addFriendByQr
addToFloat
autoRegister
batchExecute
batchSyncContacts
bindPhone
browseChannels
changePassword
checkAccountStatus
checkLoginState
clearChatHistory
commentChannelVideo
commentMoments
createGroup
createLabel
deleteFavorite
deleteFriend
deleteLabel
deleteMoments
enableFingerprint
followChannel
followOfficialAccount
forwardMessage
forwardMultiple
generateGroupQrCode
generateMyQrCode
getConnectionStatus
getContactDetail
getContactInfo
getContactStats
getContacts
getContactsByLabel
getContactsDetail
getContactsFull
getCurrentActivity
getDeviceInfo
getFavorites
getFriendRequests
getGroupInfo
getGroupMembers
getGroupMembersDetail
getGroups
getGroupsFull
getHookStatus
getLabels
getLoginDevices
getMessages
getMoments
getNetworkInfo
getOfficialAccountArticles
getOfficialAccounts
getProcessInfo
getProfile
getRecentMessages
getRecentMiniPrograms
getScreenshotBase64
getSimPhone
getStorageInfo
getTransactionHistory
getVersionCompat
getWalletBalance
getWechatVersion
globalSearch
inviteToGroup
likeChannelVideo
likeMoments
loginByPassword
loginBySms
logout
navigateToChat
navigateToMain
navigateToMoments
openMiniProgram
pinChat
ping
postMoments
quitGroup
rawSql
receiveRedPacket
receiveTransfer
registerAccount
removeFromFloat
removeFromGroup
removeLoginDevice
revokeMessage
scanQrCode
searchContacts
searchMessages
sendCard
sendEmoji
sendFile
sendGroupMessage
sendImage
sendLink
sendLocation
sendMessage
sendRedPacket
sendTransfer
sendVideo
sendVoice
setAccountProtection
setAvatar
setChatBackground
setContactLabel
setDoNotDisturb
setFriendRemark
setGroupAnnouncement
setGroupName
setNickname
setNotification
setPrivacy
setRegion
setSex
setSignature
setWhatUp
shareChannelVideo
shareMiniProgram
simulateBack
simulateInput
simulateTap
startFriendAddListener
startGroupMemberListener
switchAccount
takeScreenshot
unbindPhone
unblockSelf
unfollowChannel
unfollowOfficialAccount
```
## 六、CKB 扩展 RPC
```
getContactsDetail
getContactDetail
getGroupMembersDetail
startFriendAddListener
startGroupMemberListener
batchSyncContacts
```

View File

@@ -0,0 +1,506 @@
{
"summary": {
"wechat_hook_v2_real_exports_count": 126,
"ckb_extension_exports_count": 6,
"total_unique_camel": 132,
"v4_flagged_unconfirmed": 32,
"v4_false_negative": 32,
"v4_truly_missing": 0
},
"all_real_exports_camel": [
"acceptFriend",
"addCustomEmoji",
"addFavorite",
"addFriend",
"addFriendByQr",
"addToFloat",
"autoRegister",
"batchExecute",
"batchSyncContacts",
"bindPhone",
"browseChannels",
"changePassword",
"checkAccountStatus",
"checkLoginState",
"clearChatHistory",
"commentChannelVideo",
"commentMoments",
"createGroup",
"createLabel",
"deleteFavorite",
"deleteFriend",
"deleteLabel",
"deleteMoments",
"enableFingerprint",
"followChannel",
"followOfficialAccount",
"forwardMessage",
"forwardMultiple",
"generateGroupQrCode",
"generateMyQrCode",
"getConnectionStatus",
"getContactDetail",
"getContactInfo",
"getContactStats",
"getContacts",
"getContactsByLabel",
"getContactsDetail",
"getContactsFull",
"getCurrentActivity",
"getDeviceInfo",
"getFavorites",
"getFriendRequests",
"getGroupInfo",
"getGroupMembers",
"getGroupMembersDetail",
"getGroups",
"getGroupsFull",
"getHookStatus",
"getLabels",
"getLoginDevices",
"getMessages",
"getMoments",
"getNetworkInfo",
"getOfficialAccountArticles",
"getOfficialAccounts",
"getProcessInfo",
"getProfile",
"getRecentMessages",
"getRecentMiniPrograms",
"getScreenshotBase64",
"getSimPhone",
"getStorageInfo",
"getTransactionHistory",
"getVersionCompat",
"getWalletBalance",
"getWechatVersion",
"globalSearch",
"inviteToGroup",
"likeChannelVideo",
"likeMoments",
"loginByPassword",
"loginBySms",
"logout",
"navigateToChat",
"navigateToMain",
"navigateToMoments",
"openMiniProgram",
"pinChat",
"ping",
"postMoments",
"quitGroup",
"rawSql",
"receiveRedPacket",
"receiveTransfer",
"registerAccount",
"removeFromFloat",
"removeFromGroup",
"removeLoginDevice",
"revokeMessage",
"scanQrCode",
"searchContacts",
"searchMessages",
"sendCard",
"sendEmoji",
"sendFile",
"sendGroupMessage",
"sendImage",
"sendLink",
"sendLocation",
"sendMessage",
"sendRedPacket",
"sendTransfer",
"sendVideo",
"sendVoice",
"setAccountProtection",
"setAvatar",
"setChatBackground",
"setContactLabel",
"setDoNotDisturb",
"setFriendRemark",
"setGroupAnnouncement",
"setGroupName",
"setNickname",
"setNotification",
"setPrivacy",
"setRegion",
"setSex",
"setSignature",
"setWhatUp",
"shareChannelVideo",
"shareMiniProgram",
"simulateBack",
"simulateInput",
"simulateTap",
"startFriendAddListener",
"startGroupMemberListener",
"switchAccount",
"takeScreenshot",
"unbindPhone",
"unblockSelf",
"unfollowChannel",
"unfollowOfficialAccount"
],
"ckb_extension_exports": [
"getContactsDetail",
"getContactDetail",
"getGroupMembersDetail",
"startFriendAddListener",
"startGroupMemberListener",
"batchSyncContacts"
],
"v4_unconfirmed_truth_check": [
{
"idx": 1,
"action": "get_messages",
"mapped_rpc": "getMessages",
"category": "消息管理",
"title": "获取消息列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 2,
"action": "send_message",
"mapped_rpc": "sendMessage",
"category": "消息管理",
"title": "批量发送消息(服务端逐条下发,间隔防风控,单条超时可控)",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 4,
"action": "add_friend",
"mapped_rpc": "addFriend",
"category": "好友/联系人",
"title": "添加好友",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 5,
"action": "accept_friend",
"mapped_rpc": "acceptFriend",
"category": "好友/联系人",
"title": "通过好友请求",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 7,
"action": "delete_friend",
"mapped_rpc": "deleteFriend",
"category": "好友/联系人",
"title": "删除好友",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 9,
"action": "get_contacts",
"mapped_rpc": "getContacts",
"category": "好友/联系人",
"title": "获取联系人列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 10,
"action": "create_group",
"mapped_rpc": "createGroup",
"category": "群聊管理",
"title": "创建群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 11,
"action": "invite_to_group",
"mapped_rpc": "inviteToGroup",
"category": "群聊管理",
"title": "邀请入群",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 12,
"action": "remove_from_group",
"mapped_rpc": "removeFromGroup",
"category": "群聊管理",
"title": "移出群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 14,
"action": "set_group_name",
"mapped_rpc": "setGroupName",
"category": "群聊管理",
"title": "设置群名",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 15,
"action": "send_group_message",
"mapped_rpc": "sendGroupMessage",
"category": "消息管理",
"title": "发送群消息",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 17,
"action": "get_groups",
"mapped_rpc": "getGroups",
"category": "群聊管理",
"title": "获取群聊列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 18,
"action": "get_group_members",
"mapped_rpc": "getGroupMembers",
"category": "群聊管理",
"title": "获取群成员列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 25,
"action": "post_moments",
"mapped_rpc": "postMoments",
"category": "朋友圈管理",
"title": "发布朋友圈/瞬间(统一返回 200业务失败用 success=false 表示,避免 502",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 26,
"action": "like_moments",
"mapped_rpc": "likeMoments",
"category": "朋友圈管理",
"title": "点赞朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 27,
"action": "comment_moments",
"mapped_rpc": "commentMoments",
"category": "朋友圈管理",
"title": "评论朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 28,
"action": "get_moments",
"mapped_rpc": "getMoments",
"category": "朋友圈管理",
"title": "获取朋友圈列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 29,
"action": "forward_message",
"mapped_rpc": "forwardMessage",
"category": "消息管理",
"title": "转发消息",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 32,
"action": "get_profile",
"mapped_rpc": "getProfile",
"category": "资料/账号设置",
"title": "获取当前微信账号资料",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 38,
"action": "check_account_status",
"mapped_rpc": "checkAccountStatus",
"category": "账号安全/限制",
"title": "检查账号状态",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 43,
"action": "get_favorites",
"mapped_rpc": "getFavorites",
"category": "收藏/文件/表情",
"title": "获取收藏列表",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 49,
"action": "quit_group",
"mapped_rpc": "quitGroup",
"category": "群聊管理",
"title": "退出群聊",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "sql_or_java",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 50,
"action": "delete_moments",
"mapped_rpc": "deleteMoments",
"category": "朋友圈管理",
"title": "删除朋友圈",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 51,
"action": "send_red_packet",
"mapped_rpc": "sendRedPacket",
"category": "支付/钱包",
"title": "发红包",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 53,
"action": "open_mini_program",
"mapped_rpc": "openMiniProgram",
"category": "扫码/小程序/公众号",
"title": "打开小程序",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 54,
"action": "follow_official_account",
"mapped_rpc": "followOfficialAccount",
"category": "扫码/小程序/公众号",
"title": "关注公众号",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 65,
"action": "scan_qr_code",
"mapped_rpc": "scanQrCode",
"category": "扫码/小程序/公众号",
"title": "扫描二维码",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 73,
"action": "receive_red_packet",
"mapped_rpc": "receiveRedPacket",
"category": "支付/钱包",
"title": "领取红包",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 81,
"action": "send_location",
"mapped_rpc": "sendLocation",
"category": "位置/通话",
"title": "发送位置",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 83,
"action": "send_emoji",
"mapped_rpc": "sendEmoji",
"category": "收藏/文件/表情",
"title": "发送表情",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 94,
"action": "logout",
"mapped_rpc": "logout",
"category": "设置管理",
"title": "退出登录",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
},
{
"idx": 95,
"action": "switch_account",
"mapped_rpc": "switchAccount",
"category": "设置管理",
"title": "切换账号",
"v4_claim": "未在wechat_hook_v2.js确认导出",
"actually_exported": true,
"implementation_kind": "mixed_sql_intent",
"verdict": "V4 误判(脚本 bug"
}
]
}

View File

@@ -0,0 +1,220 @@
# 微信SDK真实控制接口矩阵 V5 — 检测脚本纠偏(追加版)
生成时间2026-05-23 14:58:43
## 一、结论速览
- `wechat_hook_v2.js` 真实 `rpc.exports` 顶层方法数:**126**
- `wechat_hook_ckb_patch.js` 扩展 RPC 数:**6**
- 去重总数(驼峰):**132**
- V4 矩阵标记「未确认导出」总条数:**32**
- 其中 **V4 误判(脚本 bug****32** 条
- 其中 **V4 准确(确实缺失)****0** 条
## 二、根因
`tools/build_wechat_sdk_true_control_matrix_v3_1858.py``parse_hook_exports()` 用了:
```python
m = re.search(r'rpc\.exports\s*=\s*\{(?P<body>.*?)}\s*;', text, flags=re.S)
```
`.*?` 是**非贪婪**匹配,遇到第一个内层 `};`(例如某个 export 内部 `return { success: false, ... };`)就停止,
导致只捕获到 `rpc.exports` 头部的极少数方法(如 `ping``getProcessInfo``getHookStatus``getWechatVersion`
后面 122 个真实导出全部被误标「未确认导出」。
## 三、V4 「未确认导出」逐条核对
| # | action | RPC | 类目 | V4 声称 | 实际是否导出 | 实现类型 | 结论 |
|---|--------|-----|------|---------|--------------|----------|------|
| 1 | `get_messages` | `getMessages` | 消息管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 2 | `send_message` | `sendMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 4 | `add_friend` | `addFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 5 | `accept_friend` | `acceptFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 7 | `delete_friend` | `deleteFriend` | 好友/联系人 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 9 | `get_contacts` | `getContacts` | 好友/联系人 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 10 | `create_group` | `createGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 11 | `invite_to_group` | `inviteToGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 12 | `remove_from_group` | `removeFromGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 14 | `set_group_name` | `setGroupName` | 群聊管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 15 | `send_group_message` | `sendGroupMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 17 | `get_groups` | `getGroups` | 群聊管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 18 | `get_group_members` | `getGroupMembers` | 群聊管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 25 | `post_moments` | `postMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 26 | `like_moments` | `likeMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 27 | `comment_moments` | `commentMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 28 | `get_moments` | `getMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 29 | `forward_message` | `forwardMessage` | 消息管理 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 32 | `get_profile` | `getProfile` | 资料/账号设置 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 38 | `check_account_status` | `checkAccountStatus` | 账号安全/限制 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 43 | `get_favorites` | `getFavorites` | 收藏/文件/表情 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 49 | `quit_group` | `quitGroup` | 群聊管理 | 未确认导出 | ✅ 已导出 | sql_or_java | V4 误判(脚本 bug |
| 50 | `delete_moments` | `deleteMoments` | 朋友圈管理 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 51 | `send_red_packet` | `sendRedPacket` | 支付/钱包 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 53 | `open_mini_program` | `openMiniProgram` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 54 | `follow_official_account` | `followOfficialAccount` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 65 | `scan_qr_code` | `scanQrCode` | 扫码/小程序/公众号 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 73 | `receive_red_packet` | `receiveRedPacket` | 支付/钱包 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 81 | `send_location` | `sendLocation` | 位置/通话 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 83 | `send_emoji` | `sendEmoji` | 收藏/文件/表情 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 94 | `logout` | `logout` | 设置管理 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
| 95 | `switch_account` | `switchAccount` | 设置管理 | 未确认导出 | ✅ 已导出 | mixed_sql_intent | V4 误判(脚本 bug |
## 四、修正建议
1. **修 V3 检测脚本**:用括号配平(栈式)方式提取 `rpc.exports = { ... };` 块,
不要用非贪婪正则。本 V5 脚本的 `extract_rpc_exports_block` 可直接复用。
2. **重跑 V4 矩阵**:基于修好的检测脚本重新生成 V4把「未确认导出」改为真实状态
`已导出+SQL/Java 实现`A 类核心vs `已导出但只做 Intent 占位`B 类待补)。
3. **实现类型细分**
- `sql_or_java`:通过 `_execSQL``Java.performNow` 读 SQLite/调 Java 实现,可视为 A 类核心;
- `intent_only`:只发 `_intentAction` 广播,仍依赖 Agent 端 IntentReceiver/ADB 兜底,不算 Hook 直达;
- `mixed_sql_intent`:先尝试 SQL再降级 Intent。
## 五、所有真实 RPC 导出(驼峰名,去重后字典序)
```
acceptFriend
addCustomEmoji
addFavorite
addFriend
addFriendByQr
addToFloat
autoRegister
batchExecute
batchSyncContacts
bindPhone
browseChannels
changePassword
checkAccountStatus
checkLoginState
clearChatHistory
commentChannelVideo
commentMoments
createGroup
createLabel
deleteFavorite
deleteFriend
deleteLabel
deleteMoments
enableFingerprint
followChannel
followOfficialAccount
forwardMessage
forwardMultiple
generateGroupQrCode
generateMyQrCode
getConnectionStatus
getContactDetail
getContactInfo
getContactStats
getContacts
getContactsByLabel
getContactsDetail
getContactsFull
getCurrentActivity
getDeviceInfo
getFavorites
getFriendRequests
getGroupInfo
getGroupMembers
getGroupMembersDetail
getGroups
getGroupsFull
getHookStatus
getLabels
getLoginDevices
getMessages
getMoments
getNetworkInfo
getOfficialAccountArticles
getOfficialAccounts
getProcessInfo
getProfile
getRecentMessages
getRecentMiniPrograms
getScreenshotBase64
getSimPhone
getStorageInfo
getTransactionHistory
getVersionCompat
getWalletBalance
getWechatVersion
globalSearch
inviteToGroup
likeChannelVideo
likeMoments
loginByPassword
loginBySms
logout
navigateToChat
navigateToMain
navigateToMoments
openMiniProgram
pinChat
ping
postMoments
quitGroup
rawSql
receiveRedPacket
receiveTransfer
registerAccount
removeFromFloat
removeFromGroup
removeLoginDevice
revokeMessage
scanQrCode
searchContacts
searchMessages
sendCard
sendEmoji
sendFile
sendGroupMessage
sendImage
sendLink
sendLocation
sendMessage
sendRedPacket
sendTransfer
sendVideo
sendVoice
setAccountProtection
setAvatar
setChatBackground
setContactLabel
setDoNotDisturb
setFriendRemark
setGroupAnnouncement
setGroupName
setNickname
setNotification
setPrivacy
setRegion
setSex
setSignature
setWhatUp
shareChannelVideo
shareMiniProgram
simulateBack
simulateInput
simulateTap
startFriendAddListener
startGroupMemberListener
switchAccount
takeScreenshot
unbindPhone
unblockSelf
unfollowChannel
unfollowOfficialAccount
```
## 六、CKB 扩展 RPC
```
getContactsDetail
getContactDetail
getGroupMembersDetail
startFriendAddListener
startGroupMemberListener
batchSyncContacts
```