tft每日頭條

 > 寵物

 > 哪些方法可以搜微信公衆号文章

哪些方法可以搜微信公衆号文章

寵物 更新时间:2024-08-02 04:20:55

關于微信公衆号《雲爬蟲技術研究筆記》可以看到更多哦!

背景

最近發現搜狗微信在2019.10.29号的時候悄然下線了一個功能,也就是不能在搜狗搜索中指定公衆号的名稱,如下圖

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)1

很多媒體以及社區也在讨論相關的話題

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)2

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)3

這樣的話,我們就沒有辦法準确的搜索到某個公衆号的最新的文章了,所以我們要是想要去實時追蹤到某個公衆号的最新文章的話,就不能通過搜狗這個渠道來爬取了。

于是,我整理了一下截止目前的微信公衆号的爬取方式

  1. 搜狗微信渠道(已放棄)
  2. AnyProxy Appium
  3. X-Wechat-Key(萬能Key)
  4. Hook微信,獲取微信公衆号推送
  5. 比較一下這幾種方式
  • 第二種的話使用模拟人工操作的自動化工具,AnyProxy的話可以替換成MitmProxy,也就是做一個中間人攔截的作用,具體的話可以看看陳文管的博客來看看具體操作,不過中間人攔截在App層面總會有些隐患。
  • 第三種的話在業界統稱為微信萬能key,也就是像公衆号文章點贊、閱讀什麼的都需要通過這個Key來進行操作,所以一些黑産(刷贊、刷閱讀量)什麼的都喜歡拿這個東西搞,獲取Key的話無非就是逆向重寫源碼邏輯或者Hook拿Key,這個目前市面上暫時沒有相關的文章。
  • 最後一種就是我們今天要采取的方式了,就是Hook微信的公衆号推送,因為邏輯上公衆号推送也是微信官方向我們發送消息的過程,我們可以Hook這個過程,每當收到推送我們就采取我們自己的一些處理邏輯,這樣在設計上來說是四種中最“實時”的。

實戰

實戰方面參考了四哥的文章做了些改進,下面我們開始邊分析邊實戰

講一個常識,像微信這種社交類的App,我們和對方在發消息的過程中的聊天記錄都是會保存在我們本地,所以我們通常都能看到我們的聊天記錄,也可以清理他們,所以如果我們想要攔截微信的消息的話,就得Hook微信的Insert方法,也就是他們插入數據庫的方法。

那我們該從哪裡入手呢?相信大家百度搜索Hook微信的時候都會搜到一類内容,就是如何解密微信本地的數據庫,而微信在我們手機上的存儲位置又有一個關鍵詞--EnMicromsg.db,這個就是我們的入口,我們需要在微信源碼中全文搜索這個詞,我們使用的微信是6.5.3,工具是Jadx,實際操作如下

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)4

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)5

我們搜索出EnMicroMsg.db之後就要每個結果去分析看哪個是比較有“眼緣”的結果。我們可以看到,第三條名字是onSQLExecuted,嗯?有點像,跟進去看看。

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)6

主要看最後一條,引用了另一個方法進行存儲,再跟進去

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)7

看到了涉及數據庫的Help類,我們猜測這個類應該是一個輔助類,那麼Insert方法應該在這個類下面,我們在這個類中搜索

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)8

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)9

好的,我們跟到這裡能夠看到很直觀的Sql語句拼接的過程,那麼這個方法的參數應該是我們收到的消息的值,隻要Hook這個方法,我們就可以去拿到插入數據庫時的值了。

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)10

代碼片段就是這個樣子,下面我們把這個代碼打包成Apk,勾選,重啟Xposed,下面可以發送消息測試看看效果了。

我們首先先用另一個微信号給我們自己發送普通的消息

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)11

看到這裡,Content的字段,值就是我們發送的1

接着我們再用另一個微信号給我們發送公衆号文章

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)12

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)13

可以看到一大段代碼,我們看到Reversed字段是由很多亂碼和字段以及值組成的,那麼我猜測微信内部實現了一個解碼工具,如果我們能夠Hook到這個解碼工具,是不是就可以獲取到解碼之後的正确數據了呢?說到解碼,根據微信以往的數據傳輸來看,這些數據很有可能是以XML的格式進行傳輸的,既然涉及到xml,那就一定是鍵值對的形式,我們去到的數據中除了有亂七八糟的小方塊,還有諸如“.msg.appmsg.category.item”這類看起來有用的内容。

我們在全文搜索一下

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)14

奇怪?我們并沒有發現什麼值得的東西?怎麼回事,回想一下是不是我們發送的消息有問題?對!我們應該拿的是微信公衆号的推送,而不是别人向我們推的公衆号文章,那我就用我的公衆号給我自己推一個預覽消息,結果如下

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)15

我們再根據剛才的邏輯,全文搜索msg.appmsg.mmreader.category.item,之後我們一個個分析,看到下面這個部分,跟進去

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)16

我們查看這一段代碼,看到下面這個部分有我們之前攔截到的消息的參數

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)17

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)18

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)19

我們發現我們需要的字段的值都來自于Yd,而Yd來自于az.Yd,那很可能這個就是我們想要Hook的解密器,我們跟進去看看

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)20

這段代碼看起來很像是解碼的,話不多說,Hook試試!

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)21

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)22

不出我們的猜想,這個方法果然是,我們再進行解析,得到如圖的效果。總結

這次Hook算是比較簡單的案例,主要是尋找Hook方法的思路,把微信公衆号的推送當成一個消息,我們去Hook這個消息存入數據庫的過程從而得到原生數據,再找到原生數據解密的地方,從而通過Hook原生數據解密的方法得到正确的解碼數據,最後完成我們的實時獲取微信公衆号推送的目的。

坑點

  1. 代碼隻是完成了功能,在額外的微信風控部分、Xposed檢測部分估計還需要做額外工作。
  2. 項目基于手機微信來開發,需要保持手機常開,穩定性需要額外考慮。

注意: 項目已經完成,想要獲得源碼可以關注下面的微信号,回複“hook微信公衆号”即可獲得項目地址以及現成的Apk

号主介紹

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)23

  • 前兩年在二線大廠工作,目前在創業公司搬磚
  • 接觸方向是爬蟲雲原生架構方面
  • 豐富的反爬攻克經驗以及雲原生二次開發經驗
  • 其他諸如數據分析黑客增長也有所涉獵
  • 做過百餘人的商業分享以及多次開辦培訓課程
  • 目前也是CSDN博客專家華為雲享專家

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)24

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)25

震驚 | 隻需3分鐘!極速部署個人Docker雲平台

深入理解Python的TLS機制和Threading.local()

我為什麼不建議你使用Python3.7.3?

下一代容器架構已出,Docker何去何處?看看這裡的6問6答!!

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)26

公衆号内回複“私藏資料”即可領取爬蟲高級逆向教學視頻以及多平台的中文數據集

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)27

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)28

哪些方法可以搜微信公衆号文章(搜狗微信下線了怎麼獲取公衆号文章)29

免責聲明: 本文章僅限用于學習和研究目的;不得将上述内容用于商業或者非法用途,否則,一切後果請讀者自負。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关寵物资讯推荐

热门寵物资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved