微信机器人_微信聊天消息记录拦截分析
程序员文章站
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模块的本身 后期更新维护逻辑都比较麻烦 我建议是要搭个后台,转发群聊天并且返回机器人应答逻辑。
整体的逻辑就像这样:
微信群消息->机器人后台->应答返回消息->发送回微信群消息
后台搭建
碍于篇幅这里不细说,大家可以参考我的项目地址
消息回复
说的机器人 除了理解消息还有核心的部分就是消息回复。这部分将在下一部分里面说到。