啊!啊!啊!搜狗微信不能爬了!怎麼辦???
沒事,往下看。
搜狗微信渠道(已放棄)
AnyProxy+Appium
X-Wechat-Key(萬能key)
Hook微信,獲取微信公眾號推送
比較一下這幾種方式
第二種的話使用模擬人工操作的自動化工具,AnyProxy的話可以替換成MitmProxy,也就是做一個中間人攔截的作用,具體的話可以看看陳文管的博客來看看具體操作,不過中間人攔截在App層面總會有些隱患。
第三種的話在業界統稱為微信萬能key,也就是像公眾號文章點讚、閱讀什麼的都需要通過這個Key來進行操作,所以一些黑產(刷贊、刷閱讀量)什麼的都喜歡拿這個東西搞,獲取Key的話無非就是逆向重寫源碼邏輯或者Hook拿Key,這個目前市面上暫時沒有相關的文章。
最後一種就是我們今天要採取的方式了,就是Hook微信的公眾號推送,因為邏輯上公眾號推送也是微信官方向我們發送消息的過程,我們可以Hook這個過程,每當收到推送我們就採取我們自己的一些處理邏輯,這樣在設計上來說是四種中最「實時」的。
實戰實戰方面參考了四哥的文章做了些改進,下面我們開始邊分析邊實戰講一個常識,像微信這種社交類的App,我們和對方在發消息的過程中的聊天記錄都是會保存在我們本地,所以我們通常都能看到我們的聊天記錄,也可以清理他們,所以如果我們想要攔截微信的消息的話,就得Hook微信的Insert方法,也就是他們插入資料庫的方法。
那我們該從哪裡入手呢?相信大家百度搜索Hook微信的時候都會搜到一類內容,就是如何解密微信本地的資料庫,而微信在我們手機上的存儲位置又有一個關鍵詞--EnMicroMsg.db,這個就是我們的入口,我們需要在微信源碼中全文搜索這個詞,我們使用的微信是6.5.3,工具是Jadx,實際操作如下
我們搜索出EnMicroMsg.db之後就要每個結果去分析看哪個是比較有「眼緣」的結果。我們可以看到,第三條名字是onSQLExecuted,嗯?有點像,跟進去看看。主要看最後一條,引用了另一個方法進行存儲,再跟進去看到了涉及資料庫的Help類,我們猜測這個類應該是一個輔助類,那麼Insert方法應該在這個類下面,我們在這個類中搜索好的,我們跟到這裡能夠看到很直觀的Sql語句拼接的過程,那麼這個方法的參數應該是我們收到的消息的值,只要Hook這個方法,我們就可以去拿到插入資料庫時的值了。代碼片段就是這個樣子,下面我們把這個代碼打包成Apk,勾選,重啟Xposed,下面可以發送消息測試看看效果了。看到這裡,Content的欄位,值就是我們發送的1可以看到一大段代碼,我們看到Reversed欄位是由很多亂碼和欄位以及值組成的,那麼我猜測微信內部實現了一個解碼工具,如果我們能夠Hook到這個解碼工具,是不是就可以獲取到解碼之後的正確數據了呢?說到解碼,根據微信以往的數據傳輸來看,這些數據很有可能是以XML的格式進行傳輸的,既然涉及到xml,那就一定是鍵值對的形式,我們去到的數據中除了有亂七八糟的小方塊,還有諸如「.msg.appmsg.category.item」這類看起來有用的內容。我們查看這一段代碼,看到下面這個部分有我們之前攔截到的消息的參數
我們發現我們需要的欄位的值都來自於Yd,而Yd來自於az.Yd,那很可能這個就是我們想要Hook的解密器,我們跟進去看看這段代碼看起來很像是解碼的,話不多說,Hook試試!不出我們的猜想,這個方法果然是,我們再進行解析,得到如圖的效果。總結這次Hook算是比較簡單的案例,主要是尋找Hook方法的思路,把微信公眾號的推送當成一個消息,我們去Hook這個消息存入資料庫的過程從而得到原生數據,再找到原生數據解密的地方,從而通過Hook原生數據解密的方法得到正確的解碼數據,最後完成我們的實時獲取微信公眾號推送的目的。坑點代碼只是完成了功能,在額外的微信風控部分、Xposed檢測部分估計還需要做額外工作。
項目基於手機微信來開發,需要保持手機常開,穩定性需要額外考慮。
燃炸福利來襲:
1.積福氣享1折秒課,超10萬元獎品來就送!
2.免費參與全國AI水平測試,憑AI力拿萬元大獎!
3.每晚8點-10點大咖坐鎮直播!
戳「閱讀原文」直達活動現場!