前言:
最近拿到一個需求坤塞,要通過微信去爬去公眾號的文章刀诬。
最開始使用的方法是用Accessibility去模擬點擊滋戳,沒想到才用了一個禮拜就WX爸爸給查封了跪另。然后又動起了拿Xpose下手的想法. ? (基于微信6.5.7 基于微信6.5.7 基于微信6.5.7)?
首先是從ID入手,通過AndroidStudio自帶的 Android Device Monitor查看到你需要關(guān)注的ID佳遣。Tools--Android--AndroidDeviceMonitor 將手機到達想要顯示的位置然后點擊這里识埋,就得到了我們要的ID
我們得到了一個 com.tencent.mm:id/afx的ID,這個就是我們得到文章的最終線索了
我們利用apktool反編譯微信以后零渐,得到res/values/public.xml文件窒舟。這個文件其實就是我們Android開發(fā)中特別重要的"R.java"的替身。
檢索這個關(guān)鍵字"afx",找到了type=id诵盼,name=afx ,id=0x7f10064a的關(guān)聯(lián)項惠豺,
記住這里的type一定得是id的那個。
然后我們將APK改名成 ***.zip风宁,并解壓縮 得到所有的.dex文件
dex是Android平臺上(Dalvik虛擬機)的可執(zhí)行文件, 相當(dāng)于Windows平臺中的exe文件, 每個Apk安裝包中都有dex文件, 里面包含了該app的所有源碼, 通過反編譯工具可以獲取到相應(yīng)的java源碼洁墙。
檢索JAVA源碼的16進制 -------沒有發(fā)現(xiàn)相關(guān)連的資源,
我們將16進制的數(shù)值轉(zhuǎn)化成10進制為2131756618戒财,
然后利用JD-GUI 檢索這個十進制的數(shù)值為 在R.class中找到了這個數(shù)值:
public static final int cbY = 2131756618;
//然后在JD-GUI中搜索R.h.cbY
解鎖出來8個與這個id有關(guān)的疑似adapter的類
如法炮制檢索 這幾個類中 getView 方法內(nèi)部的Inflate方法
一一排除后將Adapter鎖定為 ?
com.tencent.mm.ui.conversation.a 這個類热监,它是一個adapter,
我們發(fā)現(xiàn)給這個控件提供數(shù)據(jù)的類是com.tencent.mm.storage.ad饮寞,
方法名為
這個方法會在這個Adapter調(diào)用然后我們在Xpose中鎖定這個方法
這里特別圖示的注釋孝扛,不能使用Class.forname()來得到Class列吼,會報ClassNotFound異常
將field_content導(dǎo)出就得到我們需要的文章啦,以后采集文章疗琉,只需要把微信號停在訂閱號那里冈欢,等候微信推送過來就可以啦