獲取微信通訊錄列表

上一遍我們使用Xposed進行模擬登錄,今天我們來使用Xposed批量獲取好友列表信息,包括包括暱稱、微信id等信息。

第一步:先分析微信的佈局

登錄微信,並切換至通訊錄頁面,打開Android Device Monitor工具,並選擇打開Hierarchy View工具,並且在Tree View窗口查看窗口控件信息,當我們點擊至單個好友控件時,我們可以看到左邊View Properties信息,說明這個控件tag值為:com.tencent.mm.ui.contact.a$b

Xposed系列 - 獲取微信通訊錄列表

Xposed系列 - 獲取微信通訊錄列表

第二步:定位相關類

通過Jadx-gui,反編譯打開微信的app,並定位類com.tencent.mm.ui.contact.a

Xposed系列 - 獲取微信通訊錄列表

第三步:分析代碼,查找C15460b在使用的地方

通過查詢關鍵字,我們可以發現在類中有2個函數有使用到C15460b這個類。並且這個兩個類都有使用到這個類:C40334f。

Xposed系列 - 獲取微信通訊錄列表

第四步:我們查看下這個類C40334f,具體是幹嘛的。

我們定位至這個類,通過源代碼我們發現這個類是一個實體,並且我們通過字段命名看,有可能這個類就包含了通訊錄的所有字段信息。

Xposed系列 - 獲取微信通訊錄列表

第五步:我們Hook函數a、b並打印日誌,驗證我們的思路對不對。

Xposed系列 - 獲取微信通訊錄列表

try {
 findAndHookMethod("com.tencent.mm.ui.contact.a", loadPackageParam.classLoader, "a",
 loadPackageParam.classLoader.loadClass("com.tencent.mm.storage.f"),
 loadPackageParam.classLoader.loadClass("com.tencent.mm.ui.contact.a$b"),
 new XC_MethodHook() {
 @Override
 protected void afterHookedMethod(MethodHookParam param) throws Throwable {
 readAttributeValue(param.args[0]);
 }
 });
 findAndHookMethod("com.tencent.mm.ui.contact.a", loadPackageParam.classLoader, "b",
 loadPackageParam.classLoader.loadClass("com.tencent.mm.storage.f"),
 loadPackageParam.classLoader.loadClass("com.tencent.mm.ui.contact.a$b"),
 new XC_MethodHook() {
 @Override
 protected void afterHookedMethod(MethodHookParam param) throws Throwable {
 readAttributeValue(param.args[0]);
 }
 });
} catch (ClassNotFoundException e) {
 e.printStackTrace();
}

第六步:查看日誌

我們通過Xposed Install,日誌模塊查看日誌,我們驚奇的發現我們的思路確實沒錯。

Xposed系列 - 獲取微信通訊錄列表

獲取通訊錄大家分析思路不一樣,hook代碼也是不一樣,但是隻要能滿足我們的想要的就好,不知道大家有沒有其他思路呢?


分享到:


相關文章: