0x01前言
微信小程序反編譯可以通過對小程序包進行反編來獲取小程序源碼,在一次信息收集的過程中對某公司的APP、微信公眾號、小程序進行抓包數據分析尋找接口等有用的信息時,在抓包過程中由於微信的反抓包機制實際測試過程中遇到一些問題,導致通過直接抓包的方式抓取小程序數據失敗。後通過一些方式了解到小程序反編,於是想到是否可以採取這種方式反編小程序後進行源碼審計。這篇文章主要介紹了微信小程序反編的方法在這裡與大家進行分享一同學習。
0x02環境工具準備
node.js運行環境
小程序解密腳本
反編腳本
微信小程序開發者工具
以上工具打包分享
下載工具包後進行解壓首先安裝node.js環境,安裝完成後通過cmd運行node -vnpm -v查看版本是否安裝成功。
0x03小程序包解密
PC端和手機端小程序在運行時會將程序包緩存到本地,但是程序包經過了加密,我們不能夠直接進行反編解包,這裡我們需要首先對小程序包進行解密後才能夠對其進行反編。
小程序包的解密首先需要找到小程序包緩存到本地的位置,這裡以PC端為例不演示手機端。打開微信設置-文件管理,打開下圖中的路徑找到下圖路徑中WeChat Files文件夾。默認微信緩存文件在系統C盤用戶文檔目錄下,我這裡微信緩存位置做了修改。
路徑下Applet目錄就是微信小程序緩存的位置
打開目錄我們可以看到有很多以wx開頭+16位16進制數命名的文件夾,每個文件夾下就是一個微信小程序的緩存。
隨便打開一個目錄目錄下名為__APP__.wxapkg包就是微信小程序的主包。
有些小程序可能會有下面這種情況除了__APP__.wxapkg包外還有一個或多個其他.wxapkg後綴的文件,其他的文件就是也是小程序的包,可以看做是子包,對於功能比較複雜的小程序可能會有多個包。
Applet下這麼多的小程序緩存我們如何快速定位到自己要進行反編的小程序,這裡總結了兩個方法:
第一總方法是根據首次打開小程序的時間,我們第一次打開某個小程序的時候這時小程序會緩存到本地,可根據文件的修改時間大致判斷。
第二種方法更為簡單,我們直接將Applet文件夾下的所有小程序緩存包刪除掉,再訪問一次將要準備反編的小程序,這時Applet下就只有這一個小程序的緩存包了,簡單粗暴哈哈哈。
我們找到了小程序的包下一步就是對包進行解密,解密前我們先來了解一下加密。
為了保護源碼微信使用加密的方式把wxapkg包源碼進行加密,加密後的文件的起始為V1MMWX。
加密方法如下
首先pbkdf2生成AES的key。利用微信小程序id字符串為pass,salt為saltiest 迭代次數為1000。調用pbkdf2生成一個32位的key
取原始的wxapkg的包得前1023個字節通過AES通過1生成的key和iv(the iv: 16 bytes),進行加密
接着利用微信小程序id字符串的倒數第2個字符為xor key,依次異或1023字節後的所有數據,如果微信小程序id小於2位,則xorkey 為 0x66
把AES加密後的數據(1024字節)和xor後的數據一起寫入文件,並在文件頭部添加V1MMWX標識
了解了加密後或許你這時候一定有了什麼想法,沒錯你想的肯定是手撕代碼寫一個解密腳本,對於微信包解密的腳本網上有很多相關的分享這裡我不在摘抄了,有興趣的小夥伴們可以自行去百度。這裡我們使用 @daimaguo 師傅使用C#開發的PC微信小程序包解密工具。
下面我們就使用小程序包解密工具對包進行解密,解壓小程序包解密工具如下圖運行UnpackMiniApp.exe
解密成功後輸出到wxpack文件夾下,文件格式不變。
0x04小程序包反編譯
經過解密後的的包格式依然是.wxapkg,下一步我們需要對包進行反編譯就可以獲取小程序的源代碼。
我們使用中的wxappUnpacker腳本對其進行反編譯。步驟如下:解壓wxappunpacker 進入這個目錄後在目錄下運行cmd 執行命令
運行上述命令反編譯完成後在包路徑下生成一個同名文件夾存儲源代碼
如果我們需要反編的小程序中有多個包,也就是有主包和子包的情況時,主包和子包的反編過程與前面的步驟相同,先進行解密。反編的時候先對主包進行反編,再對子包進行反編,子包反編與主包略有不同。使用命令如下:
反編譯如果使用過程中出現報錯缺少相關組件,在根目錄下使用cmd運行以下命令進行安裝,通過我分享的工具包中是已經更新安裝完的在node_modules文件下,默認不需要再重新安裝,如執行存在相關組件問題可嘗試重裝解決。
0x05源碼查看
完成解密和反編後我們已經獲取到了小程序包的源碼,最後我們可以使用微信小程序開發工具進行編輯開發或查看審閱源碼。
在我分享的工具包中提供了win64版本的微信小程序開發工具安裝包,如需不同版本的安裝包也可自行到微信開發者官方網頁進行下載https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
安裝完成後我們運行工具使用遊客模式登錄
選擇導入,進行導入小程序源碼
選擇要導入的小程序源碼路徑
導入後就可以進行審閱編輯操作了。
我在前面有提到手機端的微信小程序,實際上手機端和PC端的小程序包都是相同格式的只要我們找到手機小程序包緩存位置將包導出到電腦中也可進行反編,在PC端進行反編相對於從手機提取小程序包要方便一些。有興趣的小夥伴可進行嘗試。
參考連接:
https://www.52pojie.cn/thread-1336730-1-1.html
https://blog.csdn.net/qq_41510985/article/details/117924751
E
N
D
關
於
我
們
Tide安全團隊正式成立於2019年1月,是新潮信息旗下以互聯網攻防技術研究為目標的安全團隊,團隊致力於分享高質量原創文章、開源安全工具、交流安全技術,研究方向覆蓋網絡攻防、系統安全、Web安全、移動終端、安全開發、物聯網/工控安全/AI安全等多個領域。
團隊作為「省級等保關鍵技術實驗室」先後與哈工大、齊魯銀行、聊城大學、交通學院等多個高校名企建立聯合技術實驗室。團隊公眾號自創建以來,共發布原創文章400餘篇,自研平台達到31個,目有18個平台已開源。此外積極參加各類線上、線下CTF比賽並取得了優異的成績。如有對安全行業感興趣的小夥伴可以踴躍加入或關注我們。
