微信小程序打包的原理_说说微信小程序和它的打包加密算法

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:35   1849   0

B站传送门www.bilibili.com

不愿看视频的可以看下面的视频文字稿

不知道你有没有发现这样一个现象,当年用QQ的人越来越多的转战到了微信。当时那群留着爆炸头用着£吙星妏☆★的孩子把自己非主流的时期统统锁进QQ里然后…扔掉。而同时有许多的软件平台也纷纷在微信上推出自己的小程序产品。但是,小程序究竟是怎么运行的,它和当今的互联网技术栈又有什么区别?

小程序的运行机理

现在网上已经有很多具体的原理分析文章,在这里我们简单的说一下它的运行机理。伟大的微机课老师告诉过我们:在浏览器中代码与渲染虽然是两个不同的线程,但两者的运行是互斥的。因此在浏览器环境中,如果我们有一个非常耗时的代码在运行,这个时候浏览器就会看起来是卡死的状态。

小程序为了保证用户的浏览体验不受代码运行的影响,将其分离为完全独立的两个线程,由微信作为背后的系统层提供数据的传输以及一些系统能力的支持。这样做除了用户体验之外还有另外一个好处,就是被广大开发者吐槽的浏览器能力阉割。(被大家都吐槽的还叫好处吗?)其实这是为了安全性考虑的,如果支持任意代码执行,微信的各种非公开接口就可能以各种花里胡哨的方式被人使用,那么就有可能你刚打开这个小程序,你的好友就同时收到一些五颜六色五花八门五光十色五彩斑斓五湖四海无法无天不知火舞的广告。哦,这该死的营销。

小程序和互联网技术栈的区别

简单的说了一下运行机理,相信大家都会有这样一个疑问,这个小程序的代码看起来是网页,用起来像网页,他为啥就和网页不一样呢?那么让我们去看一看微信到底是如何处理这些代码的,小程序的渲染真的是推出时宣传的那样利用原生能力进行性能提升的吗?

要想知道这些信息,我们就要拿到打包后的文件去做分析。但是,由于现在微信端的安全策略升级,打包后的小程序包都是被加密之后的文件,他们都是通过微信自己的“V1MMWX”加密算法进行的加密。哦~加密的。这就意味着我们没有办法进一步探索,那么好本期视频就到这…….

正当我们准备收摊的时候,一个不重要的哥们为我们提供了几个之前的版本,让我们得以一探究竟。通过肉眼比对几个文件之后,我们可以大概看出小程序包由三个部分组成:头信息、索引项和文件包。其中头信息存储文件的数量信息,索引项存储文件名及存储位置,文件包则是暴力的将所有文件内容堆叠在一起。

但是,当我们仔细看索引文件名时,会发现这样一个陌生又熟悉的后缀名:“HTML”。其实,HTML是我们日常访问的网页的通用格式定义,中文名叫做超文本标记语言。这就奇怪了啊,微信不是要求开发者们都要用他们推出的微信标记语言(WXML)吗?这怎么还偷偷变了个身?(小样,你以为穿上马甲我就不认识你了)接下来在我们一通搜索之后发现,微信所谓的原生能力加成其实只有少数的几个组件,比如:视频、地图、画布等,而大多数的东西其实还是互联网的那套技术栈。

结语

不能否认微信小程序确实为许多的商家及开发者提供了一个很棒的平台,让用户也有一个更简单、轻量的方式去体验各个产品,而不用经历繁琐的安装、卸载等操作。但是我想说的是,现在的互联网更推崇的是开放的技术,只有信息与技术的充分交流才能更好的促进计算机这一行业的发展。

小程序并不是实现用户随用随走的唯一解决方案,谷歌之前提出的渐进式网页应用(PWA)在与最新的互联网技术栈不冲突的条件下也实现了类似小程序的功能。我相信,未来的系统终究是开放式的,现在的小程序解决方案只是对当前一些要求的一种妥协。

解密V1MMWX

说到这里你是不是以为这期视频到这里就要结束了?没这么简单!之前我们提到微信小程序现在已经利用“V1MMWX”的加密方式对小程序进行了加密,那么这个东西真的就是很完美的加密吗?

在另一个不重要的哥们的帮助下,我们找到了之前有一篇尝试解密这个格式的文章。在这篇文章中提到,V1MMWX其实是对前1k字节进行RSA加密,而后面的部分只是简单的异或操作。那么就有意思了,我们尝试使用文章中提到的异或字符对文件后半部分进行解密,结果非常的令人震惊:我们!得到了!一串乱码!你以为这么简单就放弃了吗?不不不!在通过肉眼的一阵观察后,我们发现文件中有异常多的0x46字符。

伟大的微机课老师还说过:文本文件中最常出现的字符是空格,也就是0x20字符。那么就可以口算出这个真正的异或字符应该是0x66,利用这个字符进行异或之后发现,我们如愿以偿的获得了后半部分文件的明文。

那么在不知道前半段文件的加密密钥的前提下,我们就没办法知道原始信息了吗?不不不!我们之前分析过,这个文件的格式其实是由头信息、索引项、文件包三部分组成的。而头信息与索引项的长度基本上又都是超过1k的大小,这就保证了我们能够读取到文件包的完整内容。再因为文件包是和索引项相同的顺序依次存放的,那么我们就可以从后往前依次读取原始文件信息,并推断出对应的文件表。最后再根据这些信息,重新构造出头信息。到这里,我们对V1MMWX格式的解密也就完成了。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP