你的小程序代碼已被開源,但微信官方并不想背鍋

01 源代碼可任意下載的重大漏洞終于大規(guī)模爆發(fā)

2018年的第一天,微信小程序被爆出驚天BUG:任何人可以通過AppID和版本號獲取任意小程序的源碼文件钻洒!

該漏洞被大范圍曝光起源于V2EX論壇一篇關(guān)于使用微信小游戲“跳一跳”不校驗post的漏洞進行刷分技術(shù)文章,文章同時給出了獲取跳一跳小游戲源碼的獲取方法锄开。文章備注素标,此種獲取源碼的方法對于小程序也是通用的。

方法非常簡單:只要獲取到小程序的appid和版本號院刁,即可通過構(gòu)造URL直接下載該小程序的源碼wxapkg文件糯钙。

理論上,小程序的appid和版本號是只有開發(fā)者本人知道的退腥,除非小程序開發(fā)者公布任岸,其他人員無從獲取。而技術(shù)層面上狡刘,我們卻可以通過對小程序和服務(wù)器的通信進行抓包獲取到小程序appid和版本號享潜。這就使得下載小程序源碼變得輕松異常。

微信小程序官方稱在當(dāng)天修復(fù)了通過構(gòu)造URL下載源碼的漏洞嗅蔬,目前剑按,已無法使用構(gòu)造URL的方式直接下載小程序執(zhí)行包疾就。

這個鍋應(yīng)該由誰來背?

有開發(fā)者次日在V2EX爆料稱艺蝴,該漏洞是由于小程序CDN服務(wù)商沒有給訪問做URL鑒權(quán)導(dǎo)致的猬腰。服務(wù)器開發(fā)我并不熟悉,此處不站隊猜敢。

實際上姑荷,通過構(gòu)造URL的方式下載小程序源碼只是其中被曝光了的一個方式,我們的手機里其實已經(jīng)保存了所有我們使用過的小程序執(zhí)行包缩擂,對于root的安卓手機鼠冕,我們可以在appbrand文件中找到所有已經(jīng)使用過的小程序wxapkg文件。

只是命名規(guī)則比混亂胯盯,但這比抓包和構(gòu)造URL的方法降低了對技術(shù)的要求懈费。

之所以在標(biāo)題使用“終于大規(guī)模爆發(fā)”,是因為這兩種獲取小程序源碼的方法早在2017年6月就有開發(fā)者發(fā)文給出了博脑,而那位開發(fā)者寫文更多的是對前端代碼安全的討論憎乙。

02 更有討論價值的恰恰是前端代碼的安全問題

小程序大部分功能的實現(xiàn)都是基于前端的,很多開發(fā)者為了省掉域名備案和SSL證書部署的麻煩趋厉,將小程序的大部分功能都寫在了前端寨闹。在被抓包和提取執(zhí)行包不可避免的情況下,就要求小程序官方采取足夠的代碼安全保護措施君账。

而這一點,小程序開發(fā)團隊做的不是很好沈善。

使用前文的任意方法獲取到小程序的執(zhí)行文件乡数,用Python版腳本(不得不佩服我們的程序員,在短短的一天時間內(nèi)闻牡,出現(xiàn)了Python净赴、PHP和js三個版本的解包腳本)對下載的wxapkg文件解包后得到這么幾個文件

解碼后的小程序文件目錄

可以發(fā)現(xiàn)這些文件的組成和小程序的代碼已經(jīng)非常相似了。與常規(guī)小程序代碼不同的是罩润,解包的文件格式仍然是HTML文件玖翅。

但這不是重點。

打開page-frame.html和app-service.js割以,可以發(fā)現(xiàn)這些代碼已經(jīng)非常具備可讀性了:

page-frame.html代碼截圖
app-service.js

對于熟悉小程序開發(fā)的人來說金度,這樣的代碼已經(jīng)幾乎不需要再格式化了,現(xiàn)有文件已經(jīng)可以比較清楚地看出代碼的邏輯严沥。

回到代碼保護猜极。

我們獲取到的wxapkg文件其實是小程序的執(zhí)行文件,可以簡單理解為安裝包消玄。安卓手機的安裝包(xxx.apk文件)大家否非常熟悉跟伏,我們是很難通過apk文件獲取到應(yīng)用源代碼的丢胚,因為代碼壓縮有非常復(fù)雜的加密過程,很難被反編譯受扳。但為什么小程序的執(zhí)行包就可以被輕松地“反編譯”携龟?(用“反編譯”其實已經(jīng)非常高估小程序了,你可以發(fā)現(xiàn)前面我都是使用了“解包”這個詞勘高,因為小程序的“反編譯”過程非常簡單骨宠,就像解壓縮一樣。)

小程序的執(zhí)行文件之所以可以如此輕松地被反編譯相满,根源在于小程序的開發(fā)團隊并沒有對小程序的執(zhí)行文件進行有效的保護层亿,也就是加密。使用Hex Fiend(一款Mac OS上的十六進制編輯轉(zhuǎn)件)分析wxapkg文件會發(fā)現(xiàn)立美,大部分字段是沒有被加密的匿又,可以直接看到文件的路徑。

實際上建蹄,小程序只是很簡單的將圖片碌更、js和json文件壓在一起,而壓制的過程無非就是Wxml --> Html洞慎、 Wxml --> JS痛单、Wxss --> Css,轉(zhuǎn)換后文件二進制格式跟后綴名為wx二進制格式完全一致劲腿。這就使得解包過程非常簡單旭绒,所以出現(xiàn)了一天之內(nèi)涌現(xiàn)出Python、PHP和JS三個版本解包代碼的情況焦人。

其實挥吵,早在2017年10月份,就有開發(fā)者在簡書分享了對小程序執(zhí)行包的提取和解析過程花椭,并在GitHub開源了腳本代碼忽匈。

03 SO?

開發(fā)者Rolan在文章《從微信小程序看前端代碼的安全》中提到:

微信并沒有在代碼安全上進行過多的考慮矿辽。這導(dǎo)致需要在應(yīng)用審核過程中花費比較多的功夫(也就是自己給代碼加密)丹允,不然作品太容易被復(fù)制竄改,以至于會失去渠道先機袋倔,這對流量是致命打擊雕蔽。由于歷史原因,前端的代碼安全技術(shù)發(fā)展的比較緩慢奕污,相比其他被編譯成二進制的應(yīng)用萎羔,前端這種純文本應(yīng)用,太容易被辨識與竄改碳默。

對前端代碼進行保護的目的在于讓機器容易識別相關(guān)的指令贾陷,而使人難以理解代碼的邏輯缘眶,但往往在對前端代碼進行保護過程中,很難既兼顧指令效率又能使可讀性降低髓废。因此巷懈,常常需要在現(xiàn)有的代碼中增加一些額外的驗證邏輯,例如一些增加無效的代碼進行混淆慌洪、采用守護代碼保護業(yè)務(wù)代碼不能在其他的域名下正常運行顶燕、增加一些防止調(diào)試跟蹤的斷點等,這些措施都是使得破解代碼時人工成本增加冈爹,從而增加代碼的安全性涌攻。

這篇文章是2017年6月發(fā)布的,早與小程序源碼大范圍泄漏前半年频伤!半年前就已經(jīng)被開發(fā)者意識到的安全問題恳谎,小程序開發(fā)團隊卻至今沒有發(fā)現(xiàn),或者像Rolan說的“并沒有在代碼安全上進行過多的考慮”憋肖。

近乎開源的源代碼對于開發(fā)者而言因痛,已經(jīng)幾乎沒有任何盈利的可能性。當(dāng)前互聯(lián)網(wǎng)環(huán)境下岸更,個人開發(fā)者(或小型開發(fā)團隊)在沒有足夠資金和流量支持的情況下鸵膏,先發(fā)優(yōu)勢是他們唯一可以使用的資源,而代碼的安全性是對先發(fā)優(yōu)勢的絕對保護怎炊。

一旦代碼被開源谭企,優(yōu)質(zhì)小程序可能會迅速被不懷好意的資本和流量持有方抄襲取代。

在大張旗鼓宣傳“原創(chuàng)”的微信生態(tài)下结胀,被持續(xù)賦能一年的小程序赞咙,竟然存在如此嚴(yán)重的“原創(chuàng)保護”漏洞,而漏洞被爆出5天之后糟港,小程序竟然沒有采取任何有效的措施,甚至連對開發(fā)者的提醒都沒有院仿。

發(fā)個公告秸抚,就這么掉面子么?

這是一個大廠應(yīng)該表現(xiàn)出的責(zé)任心歹垫?

這樣并不完整的產(chǎn)品剥汤,卻在不斷地被賦能,到底價值幾何排惨?

給瘸子打上興奮劑吭敢,他也能跑的很快。

但不把腿治好暮芭,想通過不斷打興奮劑讓他一直跑下去么鹿驼?

小程序開發(fā)團隊的回復(fù)似乎是“嗯”:

—————? 碎碎念? —————

遙想當(dāng)年欲低,我們發(fā)布在公眾號的文章被抄襲搬運到某條、某魚畜晰、某家賺取流量收益時砾莱,我們問天無路;

再看當(dāng)下凄鼻,我們發(fā)布在微信的小程序被不收任何阻攔的下載腊瑟、解析,修改復(fù)用后再次發(fā)布賺取收益块蚌,我們又是問地?zé)o門闰非。

當(dāng)媒體人的版權(quán)被侵害,他們會申訴峭范,會發(fā)聲财松,他們會讓全世界都知道他們沒有被重視;

而程序員不會虎敦,他們習(xí)慣沉默游岳,習(xí)慣“忍氣吞聲”,當(dāng)他們不再被重視時其徙,只會選擇默默地離開胚迫。

那些代碼可是我用狗命加班熬夜換來的,存在GitHub被下載了還能收獲個“星”唾那,發(fā)布到小程序你們下載了卻連個招呼都不打访锻。摔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闹获,一起剝皮案震驚了整個濱河市期犬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌避诽,老刑警劉巖龟虎,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沙庐,居然都是意外死亡鲤妥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門拱雏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棉安,“玉大人,你說我怎么就攤上這事铸抑」钡ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蒲赂。 經(jīng)常有香客問我阱冶,道長,這世上最難降的妖魔是什么凳宙? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任熙揍,我火速辦了婚禮,結(jié)果婚禮上氏涩,老公的妹妹穿的比我還像新娘届囚。我一直安慰自己,他們只是感情好是尖,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布意系。 她就那樣靜靜地躺著,像睡著了一般饺汹。 火紅的嫁衣襯著肌膚如雪蛔添。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天兜辞,我揣著相機與錄音迎瞧,去河邊找鬼。 笑死逸吵,一個胖子當(dāng)著我的面吹牛凶硅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扫皱,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼足绅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了韩脑?” 一聲冷哼從身側(cè)響起氢妈,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎段多,沒想到半個月后首量,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡进苍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年蕾总,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琅捏。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖递雀,靈堂內(nèi)的尸體忽然破棺而出柄延,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布搜吧,位于F島的核電站市俊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滤奈。R本人自食惡果不足惜摆昧,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜒程。 院中可真熱鬧绅你,春花似錦、人聲如沸昭躺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽领炫。三九已至偶垮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帝洪,已是汗流浹背赁严。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工怎囚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓舔腾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親误辑。 傳聞我的和親對象是個殘疾皇子旋炒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,129評論 25 707
  • 轉(zhuǎn)載鏈接 注:本文轉(zhuǎn)載知乎上的回答 作者:初雪 鏈接:https://www.zhihu.com/question...
    pengshuangta閱讀 28,540評論 9 295
  • 1常空、姑娘,我今年25歲盖溺。漓糙。。 今晚頗有點大言不慚烘嘱,掐指算算昆禽,其實我快26了。我享受25歲的時光里蝇庭,越來越短暫醉鳖。還是...
    YIBAO閱讀 362評論 4 29
  • 第二篇:《禮儀深入骨髓》 一年一度的除夕之夜到了,這一整天大人們都在高興的忙活著哮内,小孩們也都在盡情的玩耍著...
    詩人張三閱讀 49評論 0 3