前言:
最近在学习点安卓的知识,发现了Xposed的安卓程序,想着之前搞个微信公众号抓取的研究,所有的聊天记录都会保存在手机本地,每接收或者发送一条消息,都要通过程序代码写入到本地的数据库文件里,要想拦截微信的消息,微信公众号的数据,可以通过Hook的方法拿到。
本文仅用来学习研究!!
1.准备工具
- 安卓模拟器(android 5)(推荐用雷电模拟器)
- 安卓微信安装包
- Xposed框架安装包
- Jadx-gui(0.7版本,Apk反编译工具)
- Android Studio(提前安装java依赖)
2.原理讲解
- Jadx-gui
jadx是个人比较喜欢的一款反编译利器,同时支持命令行和图形界面,能以最简便的方式完成apk的反编译操作,微信这种大软件,需要兼容的设备需要非常多,对各个安卓版本也要兼容,良心的是这个软件的反编译不用脱壳。
Jadx链接地址: https://github.com/skylot/jadx - Hook
Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。
要实现钩子函数,有两个步骤:
1. 利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)
2.动态代理(使用所有场景)
我们写得xposed模块就能实现hook微信公众号消息的功能。
3.微信反编译分析
- 通过Jadx工具反编译安卓微信获得微信源码,搜索数据库相关关键字。
这个时候需要直觉,男人的直觉很可怕,发现搜索Database关键字时,很可疑,点击跟进去
- 发现搜索Database关键字时,很可疑,点击跟进去
- 根据导入路径搜索目录树
- 仔细研究这个数据库操作类,搜索数据库的"insert"方法
- 跟到这里能够看到很直观的sql语句拼接的过程,那么这个方法的参数应该是我们收到的消息的值,只要Hook这个方法,应该就可以拿到数据库写入之前的数据。
4.Xposed环境安装和Hook Apk开发
- 要想使用Xposed来Hook程序,首先需要在安卓环境中安装Xposed
Xposed Installer(xposed框架)
是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。
- 下载地址 Xposed安装器下载地址: https://pan.baidu.com/s/1dEToAvJ 密码:uiu8
- 下载地址2: https://www.wandoujia.com/apps/1253603
- 重启之后就完成安装
5.Hook Apk 安卓程序开发
- 通过配置好安卓开发环境,新建一个标准的Xposed安卓程序,项目目录结构如下
-部分接口的代码如下
- 起个后台服务,Django或Flask,在Hook Apk核心代码中加入http请求,将拿到的数据发送到后台服务8080端口。
6.数据的处理,和文章内容的解析
- 详情页的链接如下:https://mp.weixin.qq.com/s?__biz=MzA5NTI5NDkxMg==&mid=2650351028&idx=1&sn=f0c97526300340e5e6d34c1efd923338&chksm=884c011bbf3b880d3c3c645e56443d6b5e12c4d737f85a51e1ddd23a4289986d918752b1c3e6&scene=27
7.自动化操作模拟器
- 为了保证接受到消息的及时性,模拟器中的软件不能一直不动,使用雷电模拟器的操作录制
- 点击打开软件,进入到订阅号消息列表,返回到软件首页,退出到桌面。定时循环操作。
- 有设备的可以用真机,接受消息更及时,不用反复的操作。
8.总结
理论上来讲,这套采集的方案,风控还可以,只hook这个接口,封号的几率不大。最新版本的微信也可使用。
转载请标明出处和链接