Android——微信自動回覆實現

首先本文的測試微信版本是7.0.3 ,親測可以使用。

 

需要實現-抓取微信自動回覆消息的功能點。

一.首先打開DDMS,使用按鈕。

在微信中回覆一個消息

點擊Stop Method Profiling。

二.查看生成的報表,觀察到如下兩個方法

其中1應該是發送消息的接口方法。2應該是UI層顯示的方法。

 

三.首先分析第一個方法:

1.,可以看到,參數值是String,返回值是Boolean(Z表示boolean),這裏測試hook一下該函數。

2.測試結果:

可以看到成功hook到了,說明發送消息是調用的該方法。

3.然後如果需要調用該方法,首先需要獲得該方法的實例,並去調用,然後還需要獲取到具體消息指向的發送者。

那麼這裏需要對源碼進行分析。

找到Pg方法

調用了apl方法,這裏傳入了str,繼續往下分析可以看到調用了這個方法:

 

可以看到這個ex方法應該是具體的發送消息的方法:

其中調用了

setContent方法即爲具體的設置方法,

可以看到該類cx就是消息的包裝類:

 

這裏通過id參數入手,field_talkerId,hook使用到該id的方法,打印堆棧信息:

com.tencent.mm.g.c.cx.hm

Class clz = XposedHelpers.findClass("com.tencent.mm.g.c.cx", lpparam.classLoader);

XposedHelpers.findAndHookMethod(clz, "hm", int.class, new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

super.beforeHookedMethod(param);

LogUtil.d("打印調用堆棧開始...");

LogUtil.logStackTraces();

LogUtil.d("打印調用堆棧結束...");

}

});

測試輸出結果:

進入該方法:

這裏hook測試了一下,我發現原來field_talker纔是真正的微信id, field_talkerId並沒有用到。

 

所以整個hook的關鍵點方法都已經找到了:

1. com.tencent.mm.ui.chatting.p.Pg(String str) 方法,參數就是消息內容,可以發送消息,但是無法設置接受者id

 

2. com.tencent.mm.modelmulti.h(String str, String str2, int i, int i2, Object obj) 構造方法,第一個參數是接收者的微信id,第二個參數是內容。

 

自動回覆的思路:

首先獲得發送者的id,並保存下來,然後調用hook上面第一個方法發送消息,hook第二個方法修改微信id,實現收到消息立刻自動回覆。

 

 

四:難點:調用發送接口進行發送:

1.回到之前分析的具體發送的方法,結合消息體用到的地方,可以觀察到:

這裏最終是調用了這個a方法,拼接參數進行發送的。a方法內部:

可以看到兩個參數,第一個就是消息體封裝類。

最後按步驟調用 

 

測試結果,大功告成:

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章