從一次失敗的微信小程序抓包、反編譯經歷中學習反思

 

某天看到羣裏某個朋友說某小程序抓不到包,我忽然就來了興趣,我也試着分析了下這個小程序,名字我就不說了,本着我我的興趣分析學習的目的。javascript

 

我用安卓和IOS,以及charles和fiddler都試了,還真的抓不到包,返回的都是以下圖的數據,紅色標註區域就是微信返回的接口,可是尾部的數字和字母每次都是隨機出現的,並且也並無直接可見的數據,都是加密的字段,如圖可見php

 

 

 

 

這就有點意思了,而這個小程序的廣告地址我都直接抓到了,但就是數據沒抓到,很奇怪,而後忽然腦子裏蹦出來一個想法,反編譯試試?css

 

說幹就幹html

 

 

須要用到工具:

  • npm
  • 安卓模擬器
  • 微信開發者工具
  • 反編譯工具

 

 

 

1.安裝npm

 

去這個網站下載npm:java

https://nodejs.org/zh-cn/download/node

 

而後安裝就一直點【next】就好了git

 

測試是否安裝好:在終端裏運行以下命令:github

 

 

 

2.安裝安卓模擬器

 

安卓模擬器有夜神,mumu,genymotion,感受都差很少,大的區別沒有,夜神、mumu、genymotion都有windows和mac版,只有些小的區別web

我這裏使用的是夜神npm

 

https://www.yeshen.com/

 

 

安裝也是一路點next就好了

 

 

3.安裝微信開發者工具

 

安裝了這個工具才能打開反編譯後的小程序源碼,並本地預覽加載

 

下載地址: https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html

 

一樣的也是一路下一步,跟着提示操做就好了

 

安裝完了以後,須要去微信開發者平臺註冊一個開發者帳號 https://mp.weixin.qq.com/   

 

 

 

登錄以後,選到以下的【基本設置】,而後跟着操做就好了

 

 

 

 

4.安裝反編譯工具

 

就仍是用github上一個大神寫的工具,用git 拉取下就行  git clone https://github.com/qwerty472123/wxappUnpacker.git  固然若是你沒有配置git,能夠壓縮包下載

 

 

 

可是文件已爲空:

 

 

 很騷,這個具體緣由不知道,我後來想了下也想明白了,應該是微信方爲了安全保護本身平臺的小程序,因此跟做者作了溝通吧,也或者做者本身以爲不太好,本身把項目下架了,不過我仍是在網上找到一個,網址的話我想了好久,仍是不貼出來了,有興趣的朋友本身去找吧

  

準備工做都完畢了,開始配置環境

 

配置環境

 

1.模擬器裏安裝軟件

直接在應用市場(模擬器自帶有應用市場)裏下載  【微信】,和 【RE管理器】

 

 

2.將小程序反編譯工具解壓,放到本身想要的目錄

 

就是剛纔下載的wxappUnpacker,解壓到任意目錄,我這裏直接解壓的C盤,臨時使用,這個步驟太過簡單,掠過

 

3.安裝npm軟件包:

 

注意這個步驟建議進入你解壓後的wxappUnpacker文件夾下操做,後面的反編譯命令就能夠直接用相對路徑來執行,更方便一點

 

我這裏由於以前已經安裝過,因此就隨意了。

 

1).在以前,先用npm初始化  npm  init

 

 

 

2). 安裝以下的軟件:

注意有的文章用的是 npm install esprima -g,這個是在全局安裝的意思,這種就看你本身怎麼選擇了,我我的建議直接安裝在當前目錄便可

npm install esprima npm install css-tree npm install cssbeautify npm install vm2 npm install uglify-es npm install js-beautify npm install escodegen 

  

 

 

 

 

 

3).在安裝js-beautify會報以下錯:

 

 

 

 

使用以下命令,清楚緩存:

 

 

 再次安裝便可:

 

 

 4).最後再安裝escodegen

 

 

 

5)測試環境

 我這裏已經進入了wxappUnpacker目錄裏操做了

 

 

導出微信小程序文件

 

1).打開安卓模擬器,打開微信,而後啓動目標小程序,必定到打開下,由於要打開過的纔會下載小程序文件存儲到本地

 

2).退出微信,打開模擬器裏的RE管理器

 

第一次打開RE文件管理器,會有這個選項,選擇以下便可

 

 

 

 

 

 

3). 從RE管理器裏找到以下目錄:

 

/data/data/com.tencent.mm/MicroMsg

 

這個目錄下找那個文件夾名爲一長串的字母加數字的文件夾即爲一個微信用戶的目錄,通常狀況下就只有1到3個這種文件夾,一個一個打開看看就知道了



 

 

4).進入用戶目錄後,再進入以下紅線標註出的目錄,就會看到後綴爲wxapkg的文件,這種文件就是微信小程序的包文件了

 

 

 

可是這種文件也會有多個,因此哪一個是你的目標對象也不知道,一樣的,一個一個試,就幾個文件,總有一個是對的

5).指着這個文件,鼠標左鍵長按,而後右上角會出現三個點,點那三個點,出現下圖標註區域選項,選擇壓縮這個文件

 

 

 6).壓縮完了後,它提示你是否要查看,點查看

 

會自動跳到下圖的目錄,而後,下面的zip文件就是剛纔壓縮的文件了,我這裏由於以前試了幾個,壓縮了好幾回,因此有好幾個壓縮包,這個對本篇博客來講沒影響

 

 

 7).一樣的,鼠標左鍵長按,而後點右上角的三個點,選擇下圖的區域,發送,其實就是將文件導出去

 

 發送給微信好友,或者你再在模擬器裏裝個QQ,發送給QQ好友也行,反正目的就是把這個壓縮包導出去,你用什麼方法均可以

 

 

 

 

 

 

說到這裏,補充一點:若是你在剛開始打開微信(如上圖),從微信裏打開小程序,無法打開時,能夠先換一個號把這個小程序分享給你,而後在模擬器裏點擊下就能夠打開小程序了,我用夜神模擬器時,就須要下拉準備啓動小程序時模擬器直接閃退的狀況

 

 

 

開始反編譯

 

1).把從安卓模擬器裏導出來的小程序文件,放到一個指定目錄,我這裏就直接放在wxappUnpacker裏的 ,這個就看你本身了,放不放wxappUnpacker目錄無所謂,反正你方便操做就行

 

2).執行反編譯命令

node wuWxapkg.js  xxx(小程序包名) 

 

 

 

3).若是有以下錯:

 

 

 

 

修改wuWxss.js文件的以下位置,

function runOnce(){ for(let name in runList)runVM(name,runList[name]); }

 

 

改爲以下:

 

function runOnce() { for (let name in runList) { // console.log(name, runList[name]); var start = `var window = window || {}; var __pageFrameStartTime__ = Date.now(); var __webviewId__; var __wxAppCode__={}; var __mainPageFrameReady__ = function(){}; var __WXML_GLOBAL__={entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0}; var __vd_version_info__=__vd_version_info__||{}; $gwx=function(path,global){ if(typeof global === 'undefined') global={};if(typeof __WXML_GLOBAL__ === 'undefined') {__WXML_GLOBAL__={}; }__WXML_GLOBAL__.modules = __WXML_GLOBAL__.modules || {}; }`; runVM(name, start + " \r\n" + runList[name]); } }

 

如圖:

 

 

 

再次反編譯:

 

看到最後那個File done,即表示反編譯完畢 ,這時候同目錄下會出現同名的文件夾:

 

 

 

5).把這個文件夾用微信開發者工具打開,導入項目:

沒有AppID能夠暫時點【使用測試號】

 

 

 

 

 

而後就會自動加載小程序

 

 

 

 

 

5).便可開始你的代碼分析了

 

 

可是,我準備分析的目標小程序,以下圖,請求數據失敗,由於這個小程序是用的微信雲開發製做的

 

什麼是微信雲開發

就是製做的小程序沒有本身的後端服務,由微信團隊在2018年推出的服務,微信平臺提供簡單的後臺管理,你只須要把數據傳到雲平臺,而後調取微信雲開發裏本身定義好的函數或者接口就好了,說白了就是一個小程序不須要後端就能夠作出來,跟咱們以往認知的不同,但也有一個弊端,就是若是你想看到更多的後臺管理數據可能就沒戲了,好比你想根據用戶數據做進一步的分析就別想了,有關微信雲開發詳細的本身百度吧

 

因此,我拿到的接口是微信雲開發的接口 :   wx.cloud.callFunction.getJobList,也就根本沒法分析出這個接口的整個機制,請求什麼數據,返回什麼數據了,想都別想了,拿都拿不到數據。這種狀況我查了下資料,沒戲,也有可能我看漏了,反正我鼓搗了好一下子,得出的結論就是沒戲,而且我嘗試用微信的開發者AppID修改源碼,提示我不是這個小程序的開發者,無法修改,因此是完全沒戲了

 

 

 

確實是挺失敗的一次抓包分析,不過我以爲經過此次,仍是漲見識了,微信方這方便作得確實不錯,不得不佩服啊

 

相信有朋友確定要問,你既然都是失敗了爲何還要把這個事寫成博客發出來呢?

這個緣由就是,一來是經過此次反編譯,我我的而言確實是漲見識了,若是讓您也學到了,那麼天然更是好事,二來是我以爲這個沒有什麼丟不丟臉的事,失敗了就是失敗了,畢竟人生總不會都如意的,算是記錄下我此次的經歷

相關文章
相關標籤/搜索