前言:
最近拿到一个需求,要通过微信去爬去公众号的文章。
最开始使用的方法是用Accessibility去模拟点击,没想到才用了一个礼拜就WX爸爸给查封了。然后又动起了拿Xpose下手的想法. (基于微信6.5.7 基于微信6.5.7 基于微信6.5.7)
首先是从ID入手,通过AndroidStudio自带的 Android Device Monitor查看到你需要关注的ID。Tools--Android--AndroidDeviceMonitor 将手机到达想要显示的位置然后点击这里,就得到了我们要的ID
我们得到了一个 com.tencent.mm:id/afx的ID,这个就是我们得到文章的最终线索了
我们利用apktool反编译微信以后,得到res/values/public.xml文件。这个文件其实就是我们Android开发中特别重要的"R.java"的替身。
检索这个关键字"afx",找到了type=id,name=afx ,id=0x7f10064a的关联项,
记住这里的type一定得是id的那个。
然后我们将APK改名成 ***.zip,并解压缩 得到所有的.dex文件
dex是Android平台上(Dalvik虚拟机)的可执行文件, 相当于Windows平台中的exe文件, 每个Apk安装包中都有dex文件, 里面包含了该app的所有源码, 通过反编译工具可以获取到相应的java源码。
检索JAVA源码的16进制 -------没有发现相关连的资源,
我们将16进制的数值转化成10进制为2131756618,
然后利用JD-GUI 检索这个十进制的数值为 在R.class中找到了这个数值:
public static final int cbY = 2131756618;
//然后在JD-GUI中搜索R.h.cbY
解锁出来8个与这个id有关的疑似adapter的类
如法炮制检索 这几个类中 getView 方法内部的Inflate方法
一一排除后将Adapter锁定为
com.tencent.mm.ui.conversation.a 这个类,它是一个adapter,
我们发现给这个控件提供数据的类是com.tencent.mm.storage.ad,
方法名为
这个方法会在这个Adapter调用然后我们在Xpose中锁定这个方法
这里特别图示的注释,不能使用Class.forname()来得到Class,会报ClassNotFound异常
将field_content导出就得到我们需要的文章啦,以后采集文章,只需要把微信号停在订阅号那里,等候微信推送过来就可以啦