如何用Xposed框架爬取微信朋友圈数据?

9158APP 0

如何用Xposed框架爬取微信朋友圈数据?

对于程序员来说,写一些可以在微信朋友圈中使用的数据是很容易的。 Xpose框架对于程序员来说是非常熟悉的,但是对于小编这样的普通人来说,它就是一本圣经。那么如何用Xposed框架爬取微信朋友圈数据? 接下来小编就以程序员的身份给大家分享一下微信朋友圈数据的抓取。

大意

从UI中获取文本信息是最简单的方法,因此应优先考虑UI代码的逆向工程。

反向微信apk

首先解压微信apk,使用dex2jar反编译classes.dex,然后使用JD-GUI查看jar源码。

当然,可以看到的源代码是高度混淆的。不过,从重要的Android组件(例如Activity、Service等)继承的类名是不能混淆的,所以你仍然可以从它们身上看到一些东西。

首先找到微信APP包。我们知道这是com.tencent.mm。

在com.tencent.mm中,我们发现了一个ui包,有点意思。

展开com.tencent.mm.ui,找到多个不混淆的类。其中,发现MMBaseActivity直接继承于Activity,MMFragmentActivity继承于ActionBarActivity,MMActivity继承于MMFragmentActivity,MMActivity是微信中大部分Activity的父类。

现在我们需要找出朋友圈中的activity,为此我们需要使用Xposed hookMMActivity。

创建Xpose模块

参考[教程]Xposed模块开发创建Xposed工程。

一个简单的Xposed模块的基本思路是:hook一个APP中的一个方法,达到读写数据的目的。

小编尝试了hookcom.tencent.mm.ui.MMActivity.setContentView方法,打印出了该Activity下所有的TextView内容。那么首先需要遍历这个Activity下的所有TextView。遍历ViewGroup的方法参考SO中如下代码:

小编尝试的数据代码

findAndHookMethod方法中,第一个参数是完整的类名,第三个参数是需要hook的方法名,后面的参数对应的是方法的形参类型。在这里,Activity.setContentView(View

view)方法只有一个View类型的形参,所以传入了一个View.class。

现在,想要的结果是每个Activity中所有TextView的显示内容都可以在运行时从Log中读取。

不过因为setContentView()的时候不一定会加载View中的数据,所以小编的实验结果是日志中什么也没有。

意想不到的结果

切换到朋友圈页面时,Xpose模块报异常,异常来源是从com.tencent.mm.plugin.sns.ui.SnsTimeLineUI类中捕获的。从类名来看,这很可能是朋友圈首页的UI类。扩展这个类可以发现更多有趣的事情:

该类下有一个子类a(混淆后的类名),该子类下有一个名为gyO的ListView类的实例。我们知道ListView是一个显示列表类的UI组件,它可能用来显示好友列表。

跟随线索

然后,我们首先需要获取SnsTimeLineUI.a.gyO的实例。但在此之前,你必须先获取com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a的实例。继续查找,发现com.tencent.mm.plugin.sns.ui.SnsTimeLineUI中有一个名为gLZ的SnsTimeLineUI.a实例,所以我们首先获取这个实例。

经测试,com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a(boolean, boolean, String,

boolean) 每次初始化微信界面时都会调用该方法。所以我们将hook这个方法并从中获取gLZ。

现在我们已经获得了SnsTimeLineUI.a的实例gLZ,接下来我们需要获得该类下ListView类型的gyO属性。

现在您可以打印出朋友圈页面的所有文字信息了。我们需要根据TextView的子类名判断这些文本是朋友圈内容、好友昵称、点赞还是评论。

此后,我们就从微信APP获取了朋友圈数据。当然,这部分爬取代码需要定期执行。因为从ListView中捕获的数据只是当前显示在屏幕上的可见部分,所以需要每隔很短的时间再次执行一次,以便让用户在滑动加载过程中捕获更多的数据。

剩下的就是数据分类处理和格式化输出到文件。由于本文篇幅限制,我就不详细说了。详细实现请参考作者在GitHub上的源码。

学过Xpose框架的朋友,能写点数据吗?很多人想了解如何用Xposed框架爬取微信朋友圈数据? 以上就是小编提供的使用Xposed框架爬取微信朋友圈数据的方法。