只需兩步獲取任何微信小程序源碼

轉(zhuǎn)載自百家號(hào)作者:不忘初心lucy

第一次在掘金這樣高大上的社區(qū)寫文章,忐忑地敲下我獲取小程序源碼過程中的經(jīng)驗(yàn)分享。

最近在學(xué)習(xí)微信小程序開發(fā),半個(gè)月學(xué)習(xí)下來,很想實(shí)戰(zhàn)一下踩踩坑,于是就仿寫了一個(gè)滴滴他們家的青桔單車小程序的前端實(shí)現(xiàn),過程一言難盡,差不多兩周時(shí)間過去了,發(fā)現(xiàn)小程序的坑遠(yuǎn)比想象的要多的多??!在實(shí)際練手中,完全是黑盒的,看到人家上線的小程序的效果,純靠推測,部分效果在絞盡腦汁后能做出大致的實(shí)現(xiàn),但是有些細(xì)節(jié),費(fèi)勁全力都沒能做出來。很想一窺源碼,查看究竟,看看大廠的前端大神們是如何規(guī)避了小程序的各種奇葩的坑。

于是就想到獲取到小程序地源文件,然后再對(duì)其進(jìn)行反編譯還原為源代碼,來作為學(xué)習(xí)參考。我百度了各種關(guān)于小程序地反編譯教程,但是感覺都不太適合像我這樣地初學(xué)小白,踩了挺多坑。在這里把我重新簡化好的,快速地獲取一個(gè)微信小程序源碼的方式記錄下來。

簡單聊一下xxxxx.wxapkg

先來想想一個(gè)很簡單的問題,小程序的源文件存放在哪?

當(dāng)然是在微信的服務(wù)器上。

但是在微信服務(wù)器上,普通用戶想要獲取到,肯定是十分困難的,有沒有別的辦法呢?

簡單思考一下我們使用小程序的場景就會(huì)明白,當(dāng)我們點(diǎn)開一個(gè)微信小程序的時(shí)候,其實(shí)是微信已經(jīng)將它的從服務(wù)器上下載到了手機(jī),然后再來運(yùn)行的。所以,雖然我們沒能力從服務(wù)器上獲取到,但是我們應(yīng)該可以從手機(jī)本地找到到已經(jīng)下載過的小程序源文件

那么如何才能在手機(jī)里找到小程序的源文件包呢?

這里只以安卓手機(jī)為例,畢竟窮逼不曾擁有過蘋果手機(jī)具體目錄位置直接給出:/data/data/com.tencent.mm/MicroMsg/{{一串32位的16進(jìn)制字符串文件夾}}/appbrand/pkg/在這個(gè)目錄下,會(huì)發(fā)現(xiàn)一些 xxxxxxx.wxapkg 類型的文件,這些就是微信小程序的包

微信小程序的格式就是:.wxapkg

.wxapkg是一個(gè)二進(jìn)制文件,有其自己的一套結(jié)構(gòu)。關(guān)于.wxapkg的詳細(xì)內(nèi)容可以參考lrdcq大神的博文:微信小程序源碼閱讀筆記但是這里有個(gè)坑,想要進(jìn)入到上面這個(gè)目錄的話,用手機(jī)自帶的文件管理器肯定是不行的,安卓或者iPhone都要要用到第三方的文件管理器,比如:RE文件管理器,并且安卓需要取得root權(quán)限,而蘋果手機(jī)肯定是要越獄的,且iphone的越獄難度>>安卓獲取root,不管越獄還是root,這都太費(fèi)勁,當(dāng)然有能力的同學(xué)可以直接從手機(jī)上來操作,但是這里不推薦從真機(jī)上獲取。

準(zhǔn)備材料

node.js運(yùn)行環(huán)境如果沒有安裝nodejs,請(qǐng)先安裝一下下載地址:nodejs.org/en/反編譯的腳本這里提供一個(gè)Github上qwerty472123大神寫的node.js版本的,當(dāng)然也有其它版本的,這里我只是簡單地用node.js版本舉例地址:github.com/qwerty47212…安卓模擬器(要求自帶root權(quán)限)我使用的是夜神模擬器,用來獲取小程序源文件下載地址:www.yeshen.com/cn/download

詳細(xì)步驟:

使用安卓模擬器獲取到.wxapkg文件

不用越獄,不用root,使用電腦端的安卓模擬器來獲取是一個(gè)非常簡單快捷且萬能的獲取方式,具體步驟如下:

打開安裝好的安卓模擬器,并在模擬器中安裝QQ、微信、RE管理器QQ、微信在模擬器自帶的應(yīng)用商店里搜索下載安裝即可RE管理器的下載地址:pan.baidu.com/s/1PPBx08rN…下載好后直接拖拽進(jìn)打開的模擬器窗口就會(huì)自動(dòng)安裝設(shè)置一下模擬器以我個(gè)人認(rèn)為比較好用的夜神模擬器舉例首先到模擬器內(nèi)部設(shè)置超級(jí)用戶權(quán)限

image
image

這些操作的目的都是為了能讓RE管理器順利的獲取到ROOT權(quán)限接下來在模擬器里打開微信,然后在微信中運(yùn)行你想要獲取的下程序(這其實(shí)是讓微信把小程序的源文件包從服務(wù)器下載到了本地了)就以我說的這款青桔單車的小程序舉例(希望滴滴的大神不會(huì)想打死我~)在模擬器微信中運(yùn)行一下后,直接切回模擬器桌面運(yùn)行RE瀏覽器 來到目錄/data/data/com.tencent.mm/MicroMsg/{{一串32位的16進(jìn)制字符串文件夾}}/appbrand/pkg/就抵達(dá)了目的文件夾

image

你會(huì)看到發(fā)現(xiàn)里面的一些.wxapkg后綴的文件,就是它們沒錯(cuò)啦,可以根據(jù)使用的時(shí)間來判斷那個(gè)是你剛才從服務(wù)器下載過來的一般小程序的文件不會(huì)太大,可以結(jié)合時(shí)間來判斷,長按壓縮所選文件,然后再將壓縮好的包通過QQ發(fā)送到我的電腦如果不進(jìn)行壓縮的話,是無法將這個(gè)文件通過QQ來發(fā)送的

image

所以QQ的這個(gè)功能可以讓我們很方便的拿到源文件,而不必到電腦目錄去找模擬器的文件目錄。解壓。這樣幾步簡單操作,就成功拿到了小程序的源文件了。

使用反編譯腳本解包 wxapkg

到這里你應(yīng)該已經(jīng)將反編譯腳本從github下載 或者 clone 到本地某個(gè)目錄打開nodejs命令窗口cd 到你clone或者下載好的反編譯腳本目錄下在node命令窗口中依次安裝如下依賴:npm install esprimanpm install css-treenpm install cssbeautifynpm install vm2npm install uglify-es安裝好依賴之后,就是最后一步了,反編譯 .wxapkg 文件在當(dāng)前目錄下輸入node wuWxapkg.js [-d] <files...> //files 就是你想要反編譯的文件名例如:我有一個(gè)需要反編譯的文件 _163200311_32.wxapkg 已經(jīng)解壓到了D盤根目錄下,那么就輸出命令node .wuWxapkg.js D:_163200311_32.wxapkg回車運(yùn)行

image

反編譯腳本就能一步將.wxapkg 文件還原為微信開發(fā)者工具能夠運(yùn)行的源文件,目錄地址和你反編譯的文件地址是一樣的

image

然后在微信開發(fā)者工具新增項(xiàng)目即可打開

image
image

運(yùn)行成功,源碼獲取完成

真的只需要兩步

至此我們就通過非常簡單的方式獲取到了一個(gè)想要的小程序源文件,并對(duì)齊進(jìn)行了反編譯還原以后想要再反編譯其他的小程序,非常快速,只需要兩步即可完成

使用模擬器找到小程序.wxapkg文件使用nodejs 反編譯腳本將.wxapkg文件反編譯

使用此方法,絕大部分的小程序都能正常反編譯出來,但是也會(huì)有一些特殊的情況,具體可以查看qwerty472123大神的readme文件

寫在后面的話

.apk 之類的文件反編譯非常困難,而小程序竟可以如此輕松隨意地被獲取到源碼,根源在于小程序的開發(fā)團(tuán)隊(duì)并沒有對(duì)小程序的執(zhí)行文件進(jìn)行有效的保護(hù),也就是加密,所以我們才能使用別人寫好的腳本直接進(jìn)行反編譯,其過程類似于解壓。

實(shí)際上,小程序只是很簡單的將圖片、js和json文件壓在一起,而壓制的過程就是Wxml -> Html、 Wxml -> JS、Wxss -> Css,轉(zhuǎn)換后文件二進(jìn)制格式跟后綴名為wx二進(jìn)制格式完全一致。

上線的源代碼能如此簡單的被獲取到,不得不說小程序的源碼安全存在很大的隱患,這一點(diǎn)很多開發(fā)者應(yīng)該也知道,所以發(fā)現(xiàn)有些小程序會(huì)將重要的js邏輯代碼柔在一個(gè)js文件中,這樣,即使被獲取了源碼,也不是很容易讀懂,但是任然避免不了被窺視的問題。小程序作為微信生態(tài)內(nèi)的新生力量,不僅被官方,也被很多開發(fā)者和內(nèi)容創(chuàng)業(yè)者寄予厚望,處于對(duì)代碼的安全性的考慮,這個(gè)漏洞遲早有一天會(huì)被 修復(fù)(封掉) 的。

所以這種這里介紹的獲取小程序源碼的方法,應(yīng)該是不會(huì)太長久的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評(píng)論 19 139
  • 明知道不會(huì)有結(jié)局,干嘛還這么期待 明知道自己是那么的要強(qiáng),卻還是忍不住想發(fā)信息的沖動(dòng) 少年,醒醒吧!不要讓自己依賴...
    永遠(yuǎn)的hachi閱讀 255評(píng)論 0 1
  • 余生性喜靜?;虻孟緯r(shí),不常與友而伴, 享于徒走。好惡之喜,獨(dú)手繪之器,常備裹 中。今斟其二份,尚不可為善,眾客做...
    勒魚驢閱讀 373評(píng)論 2 6
  • 他是世界的人類的生命 戀愛是人類的罪惡之狂風(fēng) 好人們都是在夢(mèng)中 里邊被水包藏起來了 融融如乳水的神秘 不絕的角聲飛...
    小范傷閱讀 205評(píng)論 0 0

友情鏈接更多精彩內(nèi)容