我的 AI 助理要写日报、盯数据,前提是它得看到数据:微信 8 个工作群、钉钉群文件、6 个内容平台的阅读/粉丝数、手机便签、待办清单。早先试过截屏模拟点击,能跑但慢、脆、low,后来全部推翻,换成硬核路线:只读解密本地数据库。
怎么实现的
总原则:不 hook、不注入、不碰目标进程。加密库拷出快照,在快照上解密、合并 WAL、增量读取,目标软件毫无感知。
- 微信:攻克 4.1 版本地库密钥,逐页 AES-256-CBC 解密 + WAL 合并。计划任务每天 06:45 拉 8 个工作群生成日报:老板指令全录、关键词命中、工期节点分级、群文件自动归档。
- 钉钉:密钥 =
md5(uid)[:16],4096 字节页 AES-128-ECB 解密;WAL 帧解密后按 SQLite 校验和算法重算整条校验链,才能合并出最新消息。每天 06:52 采集,文件自动分类归档。 - 引流数据:CSDN、公众号、掘金、知乎、百家号、抖音 6 平台,走 cookie + 后台 API。自写浏览器插件,点一下(或每 6 小时自动)把 cookie 交给本地接收服务直接入库,空包守卫保证废 cookie 不覆盖好 cookie。数据链每天 07:10 和 19:00 双跑:采集→收链接→灌库→对账,全程幂等。
- OPPO 便签:不逆向加密协议,CDP 连进 O+互联的 webview,直接调页面自己的 JS API 拿解密后的数据。Todo 清单 App 则是本地库直接导出。
隐私边界是硬设计:快照、cookie、增量状态全落本地隐私目录,入 .gitignore 永不提交。
硬核在哪
- 钉钉 WAL 校验链重算:最新消息在 WAL 里,帧校验和一变整条链全废,按 SQLite 官方算法逐帧重算才能合法合并(移植自开源 dingwave)。
- 微信暗坑:消息类型字段高位带标志位(0x60000031 其实是文件消息),须取低 16 位;部分正文是 Zstd 压缩(魔数 28 B5 2F FD),必须先解压再匹配。
- 语音转写全链路:语音 XML → 匹配音频 → 剥前缀得 silk → 解码 24kHz PCM → 重采样 16kHz → 豆包 SAUC 大模型转写,失败降级本地 whisper,结果缓存,重跑秒级。
- OPPO 反调试绕过:原版检测到调试端口参数直接退出;把 app.asar 里参数字符串等长改写一个字符,检测失效功能无损,再注入 webpack 模块拿内部 API。
- 反爬实测结论:抖音"需签名"的预判被推翻,cookie 免签名直调成功;头条对 urllib 一律回 JS 挑战,换 chrome TLS 指纹后放行。
实测数据 / 现场
- 钉钉消息表 128 个分片(tbmsg_000~127)全部正常解密;
- 引流首跑校准:知乎 6 篇、掘金 18 篇、公众号 11 篇、抖音 10 篇;公众号阅读数 15/15 篇有数,知乎 25/25 篇非空;
- cookie 接收服务开机自启常年在跑,日志只记平台条数,永不记 cookie 值。
这套东西能复用到哪
- 企业办公自动化:盯群消息、归档文件、出日报,只读解密+增量 checkpoint 框架换配置就能上;
- 自媒体运营:cookie 插件+本地接收服务适合一切"自己账号数据自己采"的需求,口径自控;
- 个人知识管理与逆向方法论:本地库导出套路通用,数据不出本机;从"模拟点击"升级到"读本地库"的判断框架,可套到下一个软件。
现状与下一步
各条线已稳定每日自动运行,踩坑记录全写进各工具 README。遗留硬骨头:百家号粉丝数接口未定位;头条历史趋势受官方窗口限制,越晚接入丢得越多。
