2021年6月29日

微信机器人_微信聊天消息记录拦截分析

作者 huruwo

前言

近期要针对微信聊天记录进行分析和拦截,通过xposed工具制作成机器人回复系统。

为此对整个的微信代码结构分析了一遍,找到了核心的消息记录类-sql工具类。

分析过程

收到消息->写入数据库

针对整个拦截,首先从界面的ui入手 。

从对方消息发送 再到消息通知 再到界面显示红点 再到打开界面框读取消息。

整个的过程最终走向的就是数据存储。

也就是微信在第一时间收到消息并储存到了sql记录里面。

清晰的知道了:

收到消息==写入数据库

数据库操作类

按照经验 db 就是和数据库相关的包名和类。正好微信没有混淆该部分的包名路径,很容易的找到了一个路径

com.tencent.wcdb.database

明眼人一瞧 这不就是所谓的数据库操作类

SQLiteDatabase

管他呢,先把他的方法全部勾上测试

拦截数据库HOOK测试

我们用 XposedBridge.hookAllMethods()
com.tencent.wcdb.database.SQLiteDatabase的所有相关方法勾上去测试 在所有的方法里面打印

而且很明显有个方法名字叫插入数据 重点的关注他

public Operation<Long> onDatabaseInserted(@NotNull Object thisObject, @NotNull String table, @Nullable String nullColumnHack, @Nullable ContentValues initialValues, int conflictAlgorithm, @Nullable Long result) {
        if (table == "message") {
            LogXUtils.e("New Message:"+initialValues);
        }
        return null;
    }

启动hook 消息发送

果然所有的消息写入都经过了这个所谓的Inserted方法

编写机器人插件

基于之前的hook逻辑,我们把hook主体放到我们的微信群里面。

因为大多数情况下 我们都想做一个管理微信群的机器人。

本机处理or后台处理

如果单纯的把机器人相关的逻辑都插入到hook模块的本身 后期更新维护逻辑都比较麻烦 我建议是要搭个后台,转发群聊天并且返回机器人应答逻辑。

整体的逻辑就像这样:

微信群消息->机器人后台->应答返回消息->发送回微信群消息

后台搭建

碍于篇幅这里不细说,大家可以参考我的项目地址

消息回复

说的机器人 除了理解消息还有核心的部分就是消息回复。这部分将在下一部分里面说到。

项目地址

https://github.com/HuRuWo/WeChatSimpleBot