欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-14 10:40:04
...

前言

近期要针对微信聊天记录进行分析和拦截,通过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