基于Xposed hook 实时监测微信消息的三种策略

2023-11-03

本文以微信版本6.7.3为例进行分析有hook,
大部分做微信机器人的话,首先要实时抓取微信的消息,在这里展示三种方式对微信的消息进行hook:
1.基于UI层拉取加载进行监听
2.基于微信dao层调用的保存进行监听
3.基于数据库的插入保存进行监听
这三层各有各的特点请自行选用。
/**
 * UI加载微信消息 接收消息的监听,
 */
 public static void uiMsgListener(XC_LoadPackage.LoadPackageParam lpparam) {
        log("uiMsgListener 开始");
        Object[] arrayOfObject = new Object[2];
        arrayOfObject[0] = Cursor.class;
        arrayOfObject[1] = new XC_MethodHook() {
            protected void afterHookedMethod(MethodHookParam methodHookParam) throws XmlPullParserException, IOException {
                //0代表别人发的消息,1代表是自己发的消息
                int field_isSend = ((Integer) XposedHelpers.getObjectField(methodHookParam.thisObject, "field_isSend")).intValue();
                //消息类型:1是文本...参考wechat_manager里的消息类型定义
                int field_type = ((Integer) XposedHelpers.getObjectField(methodHookParam.thisObject, "field_type")).intValue();
                //微信服务器端的消息id
                Object field_msgSvrId =  XposedHelpers.getObjectField(methodHookParam.thisObject, "field_msgSvrId");
                //消息内容
                String field_content = (String) XposedHelpers.getObjectField(methodHookParam.thisObject, "field_content");
                String field_talker = (String) XposedHelpers.getObjectField(methodHookParam.thisObject, "field_talker");
                //消息创建时间
                long field_createTime = ((Long) XposedHelpers.getObjectField(methodHookParam.thisObject, "field_createTime")).longValue();
                log("uiMsgListener field_isSend:" + field_isSend + "--field_type:" + field_type + "--field_msgSvrId--" + field_msgSvrId + "--field_talker--" + field_talker + "--field_content--" + field_content);

            }
        };
        XposedHelpers.findAndHookMethod("com.tencent.mm.storage.bi", lpparam.classLoader, "d", arrayOfObject);
        log("uiMsgListener 结束");
    }
/**
 *微信  dao层 插入消息监听 
 */
 /**
     * 插入消息监听 处理微信 dao层
     */
    public static void insertMsgDAOListener(XC_LoadPackage.LoadPackageParam lpparam) {
        log("insertMsgDAOListener 开始");
        Class<?> au = XposedHelpers.findClass("com.tencent.mm.storage.bi", lpparam.classLoader);
        Object[] arrayOfObject = new Object[3];
        arrayOfObject[0] = au;
        arrayOfObject[1] = boolean.class;
        arrayOfObject[2] = new XC_MethodHook() {
            protected void afterHookedMethod(MethodHookParam paramAnonymousMethodHookParam) throws XmlPullParserException, IOException {
                Object au = paramAnonymousMethodHookParam.args[0];
                if (au == null) {
                    return;
                }
                int field_isSend = ((Integer) XposedHelpers.getObjectField(au, "field_isSend")).intValue();
                int field_type = ((Integer) XposedHelpers.getObjectField(au, "field_type")).intValue();
                Object field_msgSvrId = XposedHelpers.getObjectField(au, "field_msgSvrId");
                String field_content = (String) XposedHelpers.getObjectField(au, "field_content");
                String field_talker = (String) XposedHelpers.getObjectField(au, "field_talker");
                log("insertMsgDAOListener field_isSend:" + field_isSend + "--field_type:" + field_type + "--field_msgSvrId--" + field_msgSvrId + "--field_talker--" + field_talker + "--field_content--" + field_content);

            }
        };
        XposedHelpers.findAndHookMethod(XposedHelpers.findClass("com.tencent.mm.storage.bj", lpparam.classLoader), "b", arrayOfObject);
        log("insertMsgDAOListener 结束");
    }
/**
 * database层数据的插入消息监听
 */

public static void insertMsgDBListener(XC_LoadPackage.LoadPackageParam lpparam) {
        log("insertMsgDBListener 开始");
        Object[] arrayOfObject = new Object[4];
        arrayOfObject[0] = String.class;
        arrayOfObject[1] = String.class;
        arrayOfObject[2] = ContentValues.class;
        arrayOfObject[3] = new XC_MethodHook() {
            protected void afterHookedMethod(MethodHookParam paramAnonymousMethodHookParam) throws XmlPullParserException, IOException {
                log("insertMsgDBListener 0"+paramAnonymousMethodHookParam.args[0]);
                log("insertMsgDBListener 1"+paramAnonymousMethodHookParam.args[1]);
                log("insertMsgDBListener 2"+paramAnonymousMethodHookParam.args[2]);

            }
        };
        XposedHelpers.findAndHookMethod(XposedHelpers.findClass("com.tencent.wcdb.database.SQLiteDatabase", lpparam.classLoader), "insert", arrayOfObject);
        log("insertMsgDBListener 结束");
    }
纯属发骚所作,如有侵权,请联系,如果对你的开发有帮助请给个赞
资源类下载地址:https://download.csdn.net/download/lamboo_cn/11128706
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Xposed hook 实时监测微信消息的三种策略 的相关文章

  • Android Xposed 框架

    一 Xposed框架简介 Xposed是Android平台上的一个常用的HOOK框架 xff0c 可以在不改变程序源代码的前提下 xff0c 影响程序的运行 一个支持Xposed的Android应用程序被称为一个Xposed模块 xff0c
  • 夜神安卓7.1.2安装xposed踩坑(Could not load available ZIP files.Pull down to try again)

    详情见我的博客小生博客 报错如图 1 通用制作xposed目录解决办法 夜神模拟器见第二点 1 1下载xposed https dl xda xposed info framework 下载对应的sdk 模拟器要下载x86的 我是安卓7 1
  • Android混淆机制

    java代码的混淆 常见的混淆的方式有两种 Proguard 免费 和 DexGuard 要钱 Proguard 与 DexGuard 的关系 DexGuard 是基于 ProGuard 的 这就是为什么它是如此的原因很容易升级到DexGu
  • 混淆技术研究-OLLVM混淆-控制流平坦化(FLA) - WIP

    简介 控制流平坦化通过将程序中的条件分支语句转化为等价的平铺控制流来实现 通常 这包括将原始的分支语句 如if语句 switch语句 中的每个分支提取出来 并将它们放置在一系列连续的基本块中 然后使用一个状态变量或标志来选择要执行的基本块
  • 【安卓逆向】爱加密so层静态分析

    因为这个是比较久远的apk 所以高版本是运行不起来的 学习的目的是了解一下以前的加固方式 也是划水 哈哈 下一次更新 我这边也打算写一篇关于小x书APP的协议分析 感兴趣的同学可以关注一下 应该就是在这几天更新 有问题也可以加我vx3481
  • 调试与反调试--关键文件检测

    往期推荐 模拟器检测 文件检测 签名验证 资源文件混淆 一 运行文件检测程序 1 使用adb命令 将filecheck课件push到手机目录下的data local位置 如下图所示 2 运行filecheck后 提示killed 如下图所示
  • Frida hook Java层

    往期推荐 frida环境安装 Xposed框架安装 使用及插件开发 HOOK startActivity HOOK框架 动态代理 需要相关资料的朋友 可以 加入此处即可打包获取 需要对在进程外传递的消息进行拦截处理就必须采取一种称为HOOK
  • Android-黑客技术-实现类似电脑版软件破解版

    首先先看看什么叫做Android的黑客技术效果 游戏 修改正版apk代码 实现破解免支付买道具 应用 修改添加自己的信息 和应用市场应用看起来一样 最近趁着清闲 学了段时间的Android逆向技术 发现了新世界 所以现在就算手机app也是可
  • Java—类的加载概述

    1 1 类的加载概述 当程序要使用某个类时 如果该类还未被加载到内存中 则系统会通过加载 连接 初始化三步来实现对这个类进行初始化 1 加载 是将class文件读入内存 并为之创建一个Class对象 任何类被使用时系统都会建立一个Class
  • ARM处理器寻址方式

    往期推荐 ARM指令集 ARM汇编语言程序结构 Android与ARM处理器 反射调用Java层方法 寻址的概述 寻址是指寻找寄存器里存放的数据或者是地址里存放的数据并加以使用 寻址有以下八种方式 1 立即寻址 2 寄存器寻址 3 寄存器移
  • 【安卓逆向】360加固-脱壳修复

    最近花了一些时间学习逆向脱壳 这方面一直投入的时间比较少 样本经过某加固宝进行加固 这里简单记录一下脱壳过程和思路 感谢某数字公司对安全加固的无私贡献 让我有机会小小的提高一下这方面的技能 安卓逆向交流学习qq 3251901516 vx
  • HOOK框架——静态代理

    往期推荐 实战案列分析 Crakeme01 实战 AliCrackme 实战案列 AntiDebug self debugging反调试 需要相关资料的朋友 可以 加入此处即可打包获取 代理模式分为静态代理和动态代理 静态代理是编译阶段就生
  • pc端和移动端抓包工具

    客户端与服务器端 CydiaSubstrate框架 Frida Native层HOOK Frida hook Java层 需要相关资料的朋友 可以 加入此处即可打包获取 一 抓包工具概述 http https fiddler burpsui
  • Xposed框架安装、使用及插件开发

    往期推荐 HOOK startActivity HOOK框架 动态代理 HOOK框架 静态代理 实战案列分析 Crakeme01 需要相关资料的朋友 可以 加入此处即可打包获取 Xposed框架是一款可以在不修改APK的情况下影响程序运行
  • 实战案列分析:Crakeme01

    往期推荐 实战 AliCrackme 实战案列 AntiDebug self debugging反调试 轮循检测技术 需要样本的朋友 可以 加入此处即可打包获取 先运行软件 观察程序特点 步骤与第八节实战相似 都是运用IDA静态调试与动态调
  • 实战案列:AntiDebug

    往期推荐 self debugging反调试 轮循检测技术 进程名称检测 Java层反调试 Anti Debug主要是通过各种函数去确定当前进程是否处于被调试的状态 一 IDA里面静态分析so文件 1 将文件拖入jdax gui中 进行静态
  • 模拟器检测

    往期推荐 文件检测 签名验证 资源文件混淆 apk保护策略 Java代码混淆 模拟器检测的就是指通过检测确认软件 手游等不能运行在模拟器上面 比如一个游戏 它能够在模拟器上实现批量刷金币或者是其他功能 但模拟器又无法启动起来 在这种情况下
  • Android插件:关闭WIFI下微信朋友圈视频自动播放插件开发过程详解

    本文将会详细介绍怎么开发一个屏蔽微信 7 0 5 朋友圈WIFI下自动播放视频插件 背景介绍 周五下班在地铁上刷微信时看到一个新闻 说是微信更新后在WIFI下自动播放视频还没法关闭 这个问题前几天我也遇到了 但是我记得设置里边有一个工作可以
  • 安卓逆向之去除app游戏入口广告

    安卓逆向学习群692903341 首先来看一下app游戏入口界面广告 lt
  • 使用 xpose 挂接一个以自定义类数组作为参数的方法

    如何挂钩包含自定义类数组的方法 Lcom samsung android uniform widget notification NotificationItem 这就是 smali 论证 我可以上课XposedHelpers findCl

随机推荐

  • Django安装操作教程

    一 环境准备 确保已安装好python和pycharm工具 二 django安装并配置环境变量 方法一 cmd中命令安装 pip install i https pypi douban com simple django 或 指定相应的dj
  • tr字符使用

    当我们把文件从Windows传到Linux环境时候 常常在每一行的末尾 会出现一些 M的字符 而这些字符会影响文件的正常读写和执行 要去掉这些 M 字符 有很多种办法 比如直接dox2unix 也可以使用一些命令去处理 比如 删除Windo
  • 406. Queue Reconstruction by Height

    class Solution public vector
  • c++学习笔记二十——派生类的构造函数,复制构造函数和析构函数

    在讲派生类的构造和析构函数时候我们先介绍类的兼容性 类的兼容性 类的兼容性是指在需要基类对象的任何地方都可以使用派生类来替代 通过继承 派生类得到了除了基类构造函数 复制函数中的所有成员 这样公有派生类实际具备了基类所有的功能 凡是基类所能
  • 基于 BEM 规范实现简单的全局 scss

    该文章是在学习 小满vue3 课程的随堂记录 示例均采用
  • One PUNCH Man——变量显著性检验

    文章目录 显著性检验简介 t检验 单侧检验与双侧检验 区别在于是否知道标准 确定P值和做出推断结论 T检验例子 栗子no 1 栗子No 2 F检验 判断一个变量是否显著 我们一般采用T检验和F检验的方式 显著性检验简介 假设检验也叫显著性检
  • STM32单片机颜色识别分拣系统颜色名称显示2路舵机分拣

    实践制作DIY GC0120 颜色识别分拣系统 一 功能说明 基于STM32单片机设计 颜色识别分拣系统 功能介绍 硬件组成 STM32F103C系列最小系统单片机 颜色识别模块 2路舵机 2个按键 LCD1602显示器 1 可以识别颜色
  • Python 字符串

    原始字符串 print r n t n t 续行符 name woshi abc print name name woshi abc print name woshiabc 三引号 可直接跨行书写 用于注释文档 字符串拼接 str1 str
  • lintcode 1692. 组队打怪

    你现在有n个英雄 每个英雄的战斗力为atk1 你要用这些英雄去对付n个怪物 每个怪物的战斗力为atk2 在一场战斗中 你需要安排每个英雄分别与一个怪兽战斗 如果英雄战斗力高于怪兽 那个怪兽就会被击杀 问最多能击杀几个怪兽 给定atk1 6
  • excel二进制移位运算_Excel揭秘13:在Excel中实现位运算

    我们知道 计算机使用的是二进制计数法 也就是说 在计算机中的所有信息都是使用二进制来存储和处理的 下表列出了我们熟悉的十进制数及与其相对应的二进制数 位运算规则 在位运算中 按位与 运算 AND运算 分别按位比较两个相应的数字 0或1 当且
  • centos7搭建svn服务器

    一 安装svn服务器 root svnserver yum y install subversion 查看svn 安装位置 可以用以下命令 root svnserver rpm ql subversion etc subversion et
  • Java中String类的使用

    目录 1 MS String 类中两种对象实例化的区别 1 1 直接赋值 1 2 构造方法 2 字符 字节与字符串 2 1 字符与字符串转换 2 2 字节与字符串转换 3 字符串常见操作 3 1 字符串比较 3 2 字符串查找 3 3 字符
  • HS BDC 【HDU - 3472】【混合半欧拉图构建欧拉图+最大流】

    题目链接 有N个字符 如果字符可以首尾相同字符相接组成一条链的话 那么就是说明是well done的 不然 就不是 所以考虑成一条边 我们把每个字符串考虑成有向边 又有些字符串是可以反转的 实际上可以把它当成是无向边来考虑 现在 就是要知道
  • idea 生成项目结构图

    Terminal中输入tree D mybatis plus generator demo gt tree 文件夹 PATH 列表 卷序列号为 ECE0 24D1 D idea inspectionProfiles libraries mv
  • Java如何将一个对象的所有字段值赋值给另一个对象?

    我们开发的时候可能需要进行对象值的复用 下面给大家介绍一个方法 就是使用BeanUtils public static void main String args throws Exception Student student new S
  • MySQL 经典练习 50 题(完美解答版)

    一 创建数据库和表 数据库 学生表 student 课程表 course 教师表 teacher 成绩表 score 表关系 创建数据库和表 创建数据库 drop database if exists mysql test cascade
  • 51单片机EEPROM(I²C总线通信)AT24C02数据存储

    一 存储器介绍 补充 1 易失性存储器 RAM 存储速度特别快但掉电丢失 SRAM 运行速度最快 用于电脑CPU 高速缓存 单片机中的SRAM 定义一个变量就会存在SRAM中 使用触发器做的 存储容量小 成本高 DRAM 运行速度仅次于SR
  • Linux的GPIO子系统解析 ( 一 ) 之 gpiolib.c

    文章目录 Linux的GPIO子系统解析 一 之 gpiolib c 绪论 关于GPIO子系统库文件的gpiolib c解析 drivers gpio gpiolib c gpio desc结构体 gpio chip结构体 gpio ens
  • ModbusSlave安装及使用指南正式版带序列码

    ModbusSlave是一个从站设备仿真软件 它用于接收主设备的命令包 并回送数据包 可用于测试和调试Modbus主站设备 便于观察Modbus通信过程中的各种报文 ModbusSlave支持ModbusRTU ASCII TCP IP等协
  • 基于Xposed hook 实时监测微信消息的三种策略

    本文以微信版本6 7 3为例进行分析有hook 大部分做微信机器人的话 首先要实时抓取微信的消息 在这里展示三种方式对微信的消息进行hook 1 基于UI层拉取加载进行监听 2 基于微信dao层调用的保存进行监听 3 基于数据库的插入保存进