談下微信小程式的抓取技巧

王平發表於2018-09-02

今天聊下微信小程式的抓取,其實小程式的抓取不難,主要解決抓包和如何除錯小程式這兩個問題。如果你運用chrome除錯已經比較熟練了的話,就手到擒來。

先來說小程式抓包問題

不用破解的辦法如何抓到小程式的包?破解是個費勁的事,一不小心微信賬號還可能被封。

小程式抓不到包通常就是你手機的安卓系統版本太高和微信APP的版本太高了。版本越高,通常它的安全性就越好。換用安卓系統是4.4的手機和微信APP版本在6.7左右的版本。使用Fiddler或Charles抓包妥妥的。

如果你實在沒有低安卓系統版本手機和低版本微信,繼續看下面的文字,待會再介紹一種抓包方法。

只要抓包搞定了,很多小程式也就能抓取了,剩下就是解決IP問題。還有一部分小程式在前端有反爬措施,對請求引數加密或混淆了。所以就還得解決小程式除錯問題。

再說下小程式除錯問題

首先得對小程式有一點理解,小程式簡單來說也是一個網站,只是它只能在微信裡開啟,不能在瀏覽器裡開啟。
我們都知道一個網站的前端頁面是由html、css、javascript組成,小程式的前端頁面也是由類似這樣的來組成的。小程式裡的資料互動也是由javascript來負責的。所以爬蟲除錯小程式也主要是除錯javascript。

那怎麼除錯小程式的javascript呢?

當我們在微信裡點選小程式時,微信會把這個小程式的前端程式碼下載到你的手機上。我們只要拿到這個小程式前端程式碼,就能在微信提供的小程式開發者工具上進行除錯。小程式程式碼的路徑在:
/data/data/com.tencent.mm/MicroMsg/微訊號id資料夾/appbrand/pkg/
該路徑下以.wxapkg結尾的檔案就是小程式前端程式碼被編譯之後的形式。
小程式的wxapkg檔案

你會看到很多個.wxapkg檔案,因為你開啟過很多小程式,最好是你把這個檔案下的檔案全都刪除,重新開啟目的小程式。然後裡面的.wxapkg檔案就都是該小程式的了。
你需要把.wxapkg的檔案都拷貝到你的電腦上來。(拷貝該目錄需要你擁有root許可權,所以你得先把手機root了,或者在安卓模擬器裡面使用微信,進行如上操作,模擬器預設是root了的)。

解包wxapkg

我們的目的是拿到小程式的前端程式碼在小程式開發者工具裡面除錯,wxapkg是編譯之後的小程式,所以還得反編譯,讓wxapkg解包出原始碼。
要感謝開源的世界,已經有愛好者開發出了.wxapkg的解包程式,我們就直接拿過來用。
解包程式的github地址是:
https://github.com/qwerty472123/wxappUnpacker
解包程式是由node.js開發的,所以你得先安裝node.js,然後再安裝node.js的一些依賴包,作者已經在文字裡說得很清楚了。我就不再贅述,網上也有很多該程式的用法文章。
最後你只需要執行命令:

node xxxxxx.wxapkg

node是執行node.js的命令,即可把小程式前端原始碼還原了。類似下圖這樣的。
小程式解包後的原始碼

除錯小程式

註冊一個小程式開發者賬號
註冊地址:https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN&token=

小程式註冊賬號
下載小程式開發者工具:
https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

小程式工具下載
開啟小程式開發者工具,選擇匯入已有專案,就是選擇上面解包出來的那個資料夾。
小程式匯入專案
點選確定。就出現以下介面。
小程式主介面
這就可以對該小程式做除錯了,介面是不是很熟悉,是不是跟chrome瀏覽器的除錯很相似。你可以點選sources皮膚,然後對js打斷點,也可以在console裡直接執行一段js程式碼。想要知道請求的URL是如何加密的,跟chrome一樣,打斷點除錯即可。具體怎麼打斷點除錯,我已在猿人學公眾號上寫了好幾篇,你可以回頭再去看看。
另外我文章上半部分說了一個抓包問題,還沒有解答,如果是高版本安卓系統,高微信版本如何抓包小程式。一種小技巧就是藉助小程式開發者工具來抓包,細看上圖紅框,有個Network皮膚,跟chrome的功能是一樣的,這個小程式的網路請求在Network皮膚裡能看到。
另外因為這個小程式是別人開發的,你要把這個小程式執行起來,要讓它不去驗證域名和ssl證照那些,如下。
談下微信小程式的抓取技巧
綜上解決了抓包和除錯小程式問題,就能抓取絕大部分小程式了。還有一些小程式必須要微信登陸才能訪問,要大規模抓取,你還是得解決大量賬號的問題。
PS:上述對.wxapkg檔案解包,還有一些小細節我沒有全部寫出來,諸如執行解包程式報錯,還有解分包的問題。這些很瑣碎,偏離了主題。感興趣的可以自行搜尋。
相關知識擴充閱讀:
JS逆向方法論-反爬蟲的四種常見方式
寫爬蟲,免不了要研究JavaScript設定cookies的問題
爬蟲技巧:逆向破解js程式碼加密,程式碼混淆不是難事
如何讓爬蟲一天抓取100萬張網頁

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章