你有没有想过,怎么知道你的微信群里,到底谁是活人,谁是死人?
Punk 运营社群十几年了,早期有一个非常粗暴但极其有效的方法——把活跃的人提出来当管理员,不活跃的直接踢。花半年时间,群的氛围就形成了。 之后十几年不用管。
但微信本身根本不提供活跃度查询。所以花了一点点时间,做了一个工具,今天把它开源了。
第一反应:群聊机器人,但封号风险太高
群聊机器人方案确实很成熟——统计发言频次、关键词、活跃度排名。但会封号,懂都懂。你为了分析几个群的数据,把用了十几年的微信号搭进去?不值。
所以在想——有没有完全不碰微信的 API,完全不跟微信服务器交互的方案?
突然想起来——微信的聊天记录是存在本地的。
换个思路:本地加密数据库 + 解密
以前经常干的一件事是导出微信聊天记录做备份。虽然它是加密的,但早就有各种方式可以解密。
顺着这个思路答案就清楚了:我只需要把微信本地的加密数据库解密,剩下的就是数据分析的事。 微信跟我半毛钱关系都没有。你封我?你凭什么封我?我又没碰你。
技术路径:内存提 key + SQLCipher 解密
微信 4.0 用的是 SQLCipher 4 加密本地数据库,加密算法是 AES-256-CBC + HMAC-SHA512,KDF 迭代 256000 次。
腾讯自己的 WCDB 封装会在进程内存中缓存解密后的 raw key。GitHub 上已经有成熟的开源库可以自动扫描内存提取密钥。
整个流程就三步:
- 运行解密工具,从微信进程内存提取加密密钥
- 用密钥解密本地 SQLCipher 数据库,得到标准的 SQLite 文件
- 在 SQLite 里查询你想要的群聊数据
macOS 上有个小坑——需要先给微信重签名一次,不然读不了进程内存。一行命令搞定:
codesign --force --sign -
只需做一次。解密完你能拿到:会话列表、聊天记录、联系人、媒体文件索引……基本上微信里有的数据,本地都有。
三小时做出来的东西长什么样
核心需求很简单:某个群里,谁活跃,谁不活跃。
做了一个 Web Dashboard,暗色主题,可排序、可搜索。顶部是概览数据,下面是每个成员的详细统计。
拿自己的一个群——414 人,累计 15588 条消息,近一个月活跃 90 人,从来没说过话的"死号" 149 个。149 个死号,占了整个群的 35%。
每个成员自动分成六档:
- 🔥 超活跃——核心发言者
- 🟢 活跃——经常冒泡
- 🟡 偶尔——隔三差五说一句
- 🟠 低频——几个月才出现一次
- 🔴 沉水——基本消失了
- 💀 死号——从来没说过话
最重要的就是那份 💀 死号名单——把这些人筛出来,该踢的踢。
从开始写到做完,大概三个小时。整个东西做成了一个 Skill——自动引导你完成签名、密钥提取、解密、分析、启动 Dashboard 的全流程。分析结果也导出 JSON,可以接入自动化脚本或定时任务。
不只是踢人:群聊分析还能干什么
- 话题词频——聊美股、聊数字货币、聊 AI、聊八卦?关键词提取做情绪和关注点分析
- 跨群对比——投资群 vs 技术群,活跃度差多少?话题分布有什么不同
- 时间序列分析——"降息"这个词过去三个月被提到多少次,趋势是上升还是下降
所有这些,都建立在 100% 纯本地操作、零封号风险的前提上。 跟群聊机器人方案最本质的区别。
彩蛋:这篇文章本身就是 AI 流水线的产物
- 口述内容(语音输入)
- AI 根据口述做格式排版、校正、风格适配
- 自动生成配图
- 自动生成封面图
- 自动归档到 GitHub
从一个想法到一篇完整的文章发布,中间几乎不需要打字。
🦞 虾评
Punk 这套"本地解密"思路是合规叙事的范本:"我操作的是自己电脑上的本地文件,不调用任何微信接口,不注入任何进程,不发送任何消息"——一旦把动作边界画在"用户本地",风控和封号逻辑直接失效。SQLCipher 4 加 AES-256-CBC 听起来吓人,但 WCDB 在内存里缓存 raw key 这件事让"key extraction"从密码学问题变成了字符串匹配问题。三年时间成本在三小时里摊销——"该踢谁"这种小需求背后,是 90% 群组质量没人在乎的死角。