Xposed实时获取微信公众号推送

2024-02-06 05:08

本文主要是介绍Xposed实时获取微信公众号推送,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

友情提示:阅读本文需要稍微有一点点Xposed开发基础,一点点Android逆向的基础,以及一点点Kotlin基础

鸣谢:本项目基于@Gh0u1L5,开源的Xposedhook框架—-WechatSpellbook,感谢,很不错的框架,推荐一波(虽然我用的东西都是基于WechatMagician魔改得到的)。

由于之前的基于itchat开发的微信公众号采集工具使用的账号被封号了,就很郁闷。

恰巧此时我正在研究Xposed Hook 微信,所以就打算拿Android版微信来试试,需求是怎么样的呢?就是微信推送一条公众号消息,我们就接受一条,并且将其发送到对应的接口进行保存,以便于后续浏览。刚准备做的时候我还觉得没啥,直接去把微信数据库里的东西down出来就可以了嘛,太简单了好吧,然而。

naive.jpg

naive!!!

从微信数据表“message”中导出的数据是包含乱码的一堆鬼东西,而且解析出来的url也不全,比如一次推送中的五篇文章,只能取到三篇的url,这就让人感觉很难受。

image.png

但是难受归难受,问题总还是要解决的,怎么解决呢?看源码!

之前我将微信的几个dex包的代码分别反编译出来以后放到了一个文件夹下,然后使用VSCode打开,用于平时的查看,

虽然微信反编译出来的源码乱七八糟, 但是有的代码能看的。

我们看到上面导出来的数据是存在一些乱码的,那么我猜测微信内部实现了一个解码工具,如果我们能够hook到这个解码工具,是不是就可以获取到解码之后的正确数据了呢?

说到解码,根据微信以往的数据传输来看,这些数据很有可能是以XML的格式进行传输的,既然涉及到xml,那就一定是键值对的形式,我们去到的数据中除了有乱七八糟的小方块,还有诸如“.msg.appmsg.mmreader.category.item”这类看起来有用的内容。

我打开vscode,全局搜索“.msg.appmsg.mmreader.category.item”,令人高兴的是,搜索出来的结果并不多,这说明这个值确实是有意义的值,挨个查看这些源码,在一个包为:“

com.tencent.mm.plugin.biz;”下中一个名为“a”的类中,我发现了一些有意思的东西。

image.png

方法名为wS的一个方法,接收了一个String类型的值,且其内部做了一些数据取出的工作。

难道这个str参数就是我想要的标准xml吗?

经过hook验证,打印其参数后发现,并不是,参数内容的格式和之前数据库中的格式是一致的。

image.png

那么我们就将目光放在后第一行的Map上,是不是ay.WA(String str)这个方法做了解析操作呢?

我对com.tencent.mm.sdk.platformtools.ay中WA()这个方法进行了hook,取得其返回值,这个返回值是一个Map类型的数据,在打印出其内容后,我的猜想被验证了。

WA()这个方法将刚才的内容解析成了一个便于我们读取的map。其中包含了该条推送包含的图文消息数量,以及公众号的id,名称,对应的文章url,图片url,文章描述等信息。

晚餐总算可以加鸡腿了。啊哈哈哈哈。

本文章只用于研究学习,请正确食用,谢谢。

贴一下相关的hook代码

这里写图片描述

这篇关于Xposed实时获取微信公众号推送的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683212

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We