你的小程序代码已被开源,但微信官方并不想背锅

01 源代码可任意下载的重大漏洞终于大规模爆发

2018年的第一天,微信小程序被爆出惊天BUG:任何人可以通过AppID和版本号获取任意小程序的源码文件!

该漏洞被大范围曝光起源于V2EX论坛一篇关于使用微信小游戏“跳一跳”不校验post的漏洞进行刷分技术文章,文章同时给出了获取跳一跳小游戏源码的获取方法。文章备注,此种获取源码的方法对于小程序也是通用的。

方法非常简单:只要获取到小程序的appid和版本号,即可通过构造URL直接下载该小程序的源码wxapkg文件。

理论上,小程序的appid和版本号是只有开发者本人知道的,除非小程序开发者公布,其他人员无从获取。而技术层面上,我们却可以通过对小程序和服务器的通信进行抓包获取到小程序appid和版本号。这就使得下载小程序源码变得轻松异常。

微信小程序官方称在当天修复了通过构造URL下载源码的漏洞,目前,已无法使用构造URL的方式直接下载小程序执行包。

这个锅应该由谁来背?

有开发者次日在V2EX爆料称,该漏洞是由于小程序CDN服务商没有给访问做URL鉴权导致的。服务器开发我并不熟悉,此处不站队。

实际上,通过构造URL的方式下载小程序源码只是其中被曝光了的一个方式,我们的手机里其实已经保存了所有我们使用过的小程序执行包,对于root的安卓手机,我们可以在appbrand文件中找到所有已经使用过的小程序wxapkg文件。

只是命名规则比混乱,但这比抓包和构造URL的方法降低了对技术的要求。

之所以在标题使用“终于大规模爆发”,是因为这两种获取小程序源码的方法早在2017年6月就有开发者发文给出了,而那位开发者写文更多的是对前端代码安全的讨论。

02 更有讨论价值的恰恰是前端代码的安全问题

小程序大部分功能的实现都是基于前端的,很多开发者为了省掉域名备案和SSL证书部署的麻烦,将小程序的大部分功能都写在了前端。在被抓包和提取执行包不可避免的情况下,就要求小程序官方采取足够的代码安全保护措施。

而这一点,小程序开发团队做的不是很好。

使用前文的任意方法获取到小程序的执行文件,用Python版脚本(不得不佩服我们的程序员,在短短的一天时间内,出现了Python、PHP和js三个版本的解包脚本)对下载的wxapkg文件解包后得到这么几个文件

解码后的小程序文件目录

可以发现这些文件的组成和小程序的代码已经非常相似了。与常规小程序代码不同的是,解包的文件格式仍然是HTML文件。

但这不是重点。

打开page-frame.html和app-service.js,可以发现这些代码已经非常具备可读性了:

page-frame.html代码截图
app-service.js

对于熟悉小程序开发的人来说,这样的代码已经几乎不需要再格式化了,现有文件已经可以比较清楚地看出代码的逻辑。

回到代码保护。

我们获取到的wxapkg文件其实是小程序的执行文件,可以简单理解为安装包。安卓手机的安装包(xxx.apk文件)大家否非常熟悉,我们是很难通过apk文件获取到应用源代码的,因为代码压缩有非常复杂的加密过程,很难被反编译。但为什么小程序的执行包就可以被轻松地“反编译”?(用“反编译”其实已经非常高估小程序了,你可以发现前面我都是使用了“解包”这个词,因为小程序的“反编译”过程非常简单,就像解压缩一样。)

小程序的执行文件之所以可以如此轻松地被反编译,根源在于小程序的开发团队并没有对小程序的执行文件进行有效的保护,也就是加密。使用Hex Fiend(一款Mac OS上的十六进制编辑转件)分析wxapkg文件会发现,大部分字段是没有被加密的,可以直接看到文件的路径。

实际上,小程序只是很简单的将图片、js和json文件压在一起,而压制的过程无非就是Wxml --> Html、 Wxml --> JS、Wxss --> Css,转换后文件二进制格式跟后缀名为wx二进制格式完全一致。这就使得解包过程非常简单,所以出现了一天之内涌现出Python、PHP和JS三个版本解包代码的情况。

其实,早在2017年10月份,就有开发者在简书分享了对小程序执行包的提取和解析过程,并在GitHub开源了脚本代码。

03 SO?

开发者Rolan在文章《从微信小程序看前端代码的安全》中提到:

微信并没有在代码安全上进行过多的考虑。这导致需要在应用审核过程中花费比较多的功夫(也就是自己给代码加密),不然作品太容易被复制窜改,以至于会失去渠道先机,这对流量是致命打击。由于历史原因,前端的代码安全技术发展的比较缓慢,相比其他被编译成二进制的应用,前端这种纯文本应用,太容易被辨识与窜改。

对前端代码进行保护的目的在于让机器容易识别相关的指令,而使人难以理解代码的逻辑,但往往在对前端代码进行保护过程中,很难既兼顾指令效率又能使可读性降低。因此,常常需要在现有的代码中增加一些额外的验证逻辑,例如一些增加无效的代码进行混淆、采用守护代码保护业务代码不能在其他的域名下正常运行、增加一些防止调试跟踪的断点等,这些措施都是使得破解代码时人工成本增加,从而增加代码的安全性。

这篇文章是2017年6月发布的,早与小程序源码大范围泄漏前半年!半年前就已经被开发者意识到的安全问题,小程序开发团队却至今没有发现,或者像Rolan说的“并没有在代码安全上进行过多的考虑”。

近乎开源的源代码对于开发者而言,已经几乎没有任何盈利的可能性。当前互联网环境下,个人开发者(或小型开发团队)在没有足够资金和流量支持的情况下,先发优势是他们唯一可以使用的资源,而代码的安全性是对先发优势的绝对保护。

一旦代码被开源,优质小程序可能会迅速被不怀好意的资本和流量持有方抄袭取代。

在大张旗鼓宣传“原创”的微信生态下,被持续赋能一年的小程序,竟然存在如此严重的“原创保护”漏洞,而漏洞被爆出5天之后,小程序竟然没有采取任何有效的措施,甚至连对开发者的提醒都没有

发个公告,就这么掉面子么?

这是一个大厂应该表现出的责任心?

这样并不完整的产品,却在不断地被赋能,到底价值几何?

给瘸子打上兴奋剂,他也能跑的很快。

但不把腿治好,想通过不断打兴奋剂让他一直跑下去么?

小程序开发团队的回复似乎是“嗯”:

—————  碎碎念  —————

遥想当年,我们发布在公众号的文章被抄袭搬运到某条、某鱼、某家赚取流量收益时,我们问天无路;

再看当下,我们发布在微信的小程序被不收任何阻拦的下载、解析,修改复用后再次发布赚取收益,我们又是问地无门。

当媒体人的版权被侵害,他们会申诉,会发声,他们会让全世界都知道他们没有被重视;

而程序员不会,他们习惯沉默,习惯“忍气吞声”,当他们不再被重视时,只会选择默默地离开。

那些代码可是我用狗命加班熬夜换来的,存在GitHub被下载了还能收获个“星”,发布到小程序你们下载了却连个招呼都不打。摔。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,263评论 25 707
  • 转载链接 注:本文转载知乎上的回答 作者:初雪 链接:https://www.zhihu.com/question...
    pengshuangta阅读 28,446评论 9 295
  • 1、姑娘,我今年25岁。。。 今晚颇有点大言不惭,掐指算算,其实我快26了。我享受25岁的时光里,越来越短暂。还是...
    YIBAO阅读 350评论 4 29