博客配套代碼與工具發布于github:微信小程序?(歡迎順手Star一下?)
相關爬蟲專欄:JS逆向爬蟲實戰??爬蟲知識點合集??爬蟲實戰案例?逆向知識點合集
前言:
微信小程序對于很多嘗試JS逆向的人群來說,都是一個不小的挑戰。相比于常規逆向調試,其主要問題在于難以下手,不知道小程序逆向常規流程應該怎么走。但別擔心,本文會詳細介紹相關邏輯搭建與具體操作流程,幫助讀者更好理解。
一、思路構建
1.準備工具:
- 任意一款調試工具(fiddler,Charles,Wireshark等):因為運行是在微信小程序上,所以無法用常規的開發者工具直接調試,得專門下載一個工具再操作。
- 相關的兩個工具包(用于反編譯):一者負責將數據包先解密,另一者負責將解密后的數據包再還原成源碼。這倆工具包我會在github的鏈接上提供,自取即可
- 微信開發者工具:用于斷點調試debug,去官網下就行。
2.具體思路:
首先要明白:微信小程序逆向工程是指通過分析、反編譯或調試微信小程序,來理解其內部機制、數據流、加密算法以及潛在漏洞的過程。這通常涉及對小程序包(_APP_.wxapkg
)、前端JS代碼、API請求與響應等進行深入分析。
在具體操作上,我們首先會通過一系列步驟,發起對某個小程序的請求,并通過專門的調試工具
獲取該響應查看相關信息。同時在涉及到JS逆向時,常規情況下我們需要在瀏覽器調試中不斷設置斷點、調用堆棧來查看相關信息。但因為在微信小程序上我們無法做到這點。所以需要通過獲得微信小程序緩存的相關加載信息,將其先解密再反編譯獲得最原始的小程序數據包,再將它們寫入到微信開發者工具,把相關報錯信息處理一下就可以在上面自由調試了。之后所有操作都跟常規JS逆向思路一致。該咋分析咋分析即可。
綜上,思路構建后之后我們就開始在下面詳細操作演示。因為本文重點是對微信小程序逆向的通用處理思路,所以并不會涉及到某個具體小程序的JS逆向實戰。
二、具體操作
注:以下操作默認你已經把準備工具安裝準備完畢。
1. 找到微信小程序當前位置,并清空當前緩存:
點開電腦微信-設置-文件管理-打開文件夾-返回到上一級的WeChat Files-進入到下級的Applet
可以看到如圖信息。除了上面兩個public文件,其他文件都是小程序的緩存信息,將除開倆public的文件全部刪除即可。后面再載入新的微信小程序才可以更直觀的看到。
2. 搜索微信小程序并對其發起響應:
點開你想要的小程序,并在里面隨意按幾下多觸發點事件,
這時候再返回,就能看到這個小程序的信息已經被緩存好了。
點進這個wx2f...,這個正是我們需要的數據包。
3. 用第一個軟件解密
這里需要分別用到倆工具,第一個先解密,第二個再反編譯。
這里的wxpack文件夾是我提前裝好的,如果沒有該文件夾下載一個即可。
直接選擇剛才我們找好的后綴為.wxapkg的文件就行,里面有多少個文件就都解密過來:
它會在wxpack里生成一次解密后的文件,這里生成完后會出現一堆wx...很混亂,就將其還是改成原來名字(如果你不改就是重名,涉及多個文件時就會來回覆蓋,所以重命名才能保證不覆蓋)。
4. 用第二個軟件反編譯
在當前有unveilr.exe的目錄下,搜cmd:
進入cmd后再寫unveilr.exe (wxpack的目錄),按回車
看到這些綠色INFO即代表成功獲取。
看到產生了對應的文件夾即反編譯到了小程序的源碼。
5.將該源碼放到微信開發者工具內,并修改報錯
點+號,
目錄就用剛才的那個源碼文件,使用測試號且不使用云服務,再點擊創建。
信任并運行。
這時候大概率會出現模擬器啟動失敗,并給出相應報錯讓我們排。這里的解決就沒什么好辦法了,因為報錯原因不一。看錯誤自己調就行,每次調試完后點擊編譯查看新的運行是否可以,調不出來的可以問問ai怎么搞。
這里簡要介紹下幾個常見的報錯怎么處理:
(一)、
在app.json里找到componentFramework的字段,將對應的值改成"exparser"即可
(二)、
插件未授權使用,點擊添加插件即可。如果還提示要授權才行,那比較難頂。但仍可以試試將該插件刪去,假若不影響js調試與小程序運行的話(雖然通常都會影響)。
(三)、
并非合法域名,那么讓它不要去校驗即可。在詳情,本地設置,并勾選不校驗即可。
調試錯誤完成后再進行常規JS逆向即可,后面的JS因項目而異,此處礙于篇幅不再贅述。
四、總結
微信小程序逆向工程其實相比常規JS逆向,主要特殊點就在于接口在小程序而非web端,所以我們只要能把這個接口問題搞定,就可以像常規的方式一樣去處理小程序了。但還需要注意下:歸咎于小程序的特殊之處,很多地方的處理難以繞過。所以常規我們希望對某個軟件或網址的數據做爬取會從三個角度去考慮:app、web端、小程序端,這仨蛋哪個好叮叮哪個,叮到就是贏,不用糾結非得從哪個端口去叮到。