前一段时间突发奇想,想白嫖腾讯云云函数的能力来实现无服务模式下 PC 端小程序包的在线解密(注意这里仅仅是做解密)。

因为业余时间以捣鼓有意思的东西作为娱乐活动,对于小程序技术这块本身理解也是比较深刻了,所以碰到相关需求都会首先去想:这 gie 能不能用云函数实现?

于是碰上这种有意思的功能自然想尝试用云函数去搞一下了,顺便积累下云开发经验,看看无服务器云函数到底可以做到什么程度。

开发前准备

开发之前我们是肯定有一套理论指导的,而且这个算法也是开源的。

主要内容如下:

  • 文件特征:文件起始为 V1MMWX
  • 文件加密方法:
    • 首先 pbkdf2 生成 AES 的 key。利用微信小程序 id 字符串为 pass,salt 为 saltiest 迭代次数为 1000。调用 pbkdf2 生成一个 32 位的 key
    • 取原始的 wxapkg 的包得前 1023 个字节通过 AES 通过 1 生成的 key 和 iv(the iv: 16 bytes),进行加密
    • 利用微信小程序 id 字符串的倒数第 2 个字符为 xor key,依次异或 1023 字节后的所有数据,如果微信小程序 id 小于 2 位,则 xorkey 为 0x66
    • 把 AES 加密后的数据(1024 字节)和 xor 后的数据一起写入文件,并在文件头部添加 V1MMWX 标识

有这个理论知识只要专注实现就可以了,而且已经有大佬实现了相应算法,我们只要拿来测试改一改就可以了。

本地调试

这里调试分别使用了 go 语言版本与 nodejs 版本,go 版本是没有问题的,node 版需要稍微改动一下。

调试环境

  • MacOS Catalina 10.15.7
  • Nodejs 14.17.0
  • go 1.17.2 darwin/amd64

本地验证运行 go 及 nodejs 版本都没有问题,然后就是如何迁移到云函数环境了。

云端开发

这里并没有纠结于具体使用什么版本的 node,所以一开始就默认用了 10.15,在腾讯云的云开发控制台创建应用时如果选择 koa 应用就默认是这个版本。

然后就是一顿操作了:

  1. 注册处理路由;
  2. 增加文件上传功能(小文件可以用云函数直接接收,大的就不行了会报请求体大小超限错误),上传文件至云存储;

  1. 触发解密操作后从云存储下载文件;
  2. 调用 node 脚本去执行解密操作;
  3. 将解密后文件上传至云存储后提供下载链接。

文件上传这块有个小插曲,因为不支持大文件直传,所以专门问了云函数产品页面上的客服,说云函数的使用遇到了问题,结果告诉我说这块不归他们管,需要找云开发团队,然后我就懵了,云函数不是云开发下面的产品吗??咋还不归他们管??这是什么合作关系??不过最后为了解决问题我就加了客服微信,然后客服把云开发的技术大佬们拉了一个外部群,群内有十几个人之多,这阵势可让我是受宠若惊啊。不过最后还是解决了,技术大佬给了个方案,扔了几个文档链接让我自己捣鼓,就是看个文档手撸代码嘛,没啥难的,我就"好的"然后自己捣鼓去了。

具体方案就是:

  1. 前端上传文件
  2. 服务端获取文件或者获取文件链接

并且额度方面也是够用的:

所以我就按着大佬给的提示继续往下尝试了,编写初始版本。

完事之后我们要进行调试。

云函数调试

这里要区分下大小文件的情况,大文件倒是 OK 的,可以正常获取解密后的文件。

小文件(主要 5M 以内)的情况下测试了很多遍,无一例外都失败了,而且错误原因是(这个和是否使用云存储无关):

{"library": "digital envelope routines","function": "EVP_DecryptFinal_ex","reason": "bad decrypt","code": "ERR_OSSL_EVP_BAD_DECRYPT"
}

个人感觉是云端 nodejs 运行时带来的版本兼容问题,因为 10.15 是有些低了,所以将函数下载到了本地并把运行时改为了相对较新的 12.16 看看有没有救。

修改 cloudbaserc.json 里面的 runtime 运行时配置:

{"envId": "xxx","functionRoot": "functions","functions": [{"name": "koa-decrypt","timeout": 50,"runtime": "Nodejs12.16","installDependency": true,"handler": "tcbindex.main"}]
}

然后使用命令行覆盖上传云函数即可更改云端运行时。

不过遗憾的是并没有作用,错误依旧。

总结

使用最新的无服务模式实现 PC 端代码包解密功能上云,听起来有意思但是实际上做的时候并没有那么美丽,一番体验下来感觉就是坑好多啊。不过还好大文件的解密是执行成功的,算是成功了一半,要啥

看我如何用云函数撸一个PC小程序代码包在线解密工具相关推荐

  1. 微信小程序开发15 项目实战 基于云开发开发一个在线商城小程序

    在学完前 4 个模块之后,我相信你会对微信小程序的开发有一个全新的认识.在前面 3 个模块中,俊鹏分别从微信小程序内在的运行原理,小程序工程化开发以及具体实践层面,深度讲解了微信小程序开发所必要的知识 ...

  2. 微信小程序|基于小程序+云开发制作一个菜谱小程序

    今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力. 一.小程序 1. 创建小程序

  3. 恶作剧c语言程序,自己用C语言编写的一个恶作剧小程序代码

    自己用C语言编写的一个恶作剧小程序代码 #include #include #include #define MAX 100 void hebingString(char s1[],char s2[] ...

  4. 微信小程序|基于小程序+云开发制作一个租房小程序

    经济发展的同时伴随着大批人群的流动,租房需求一直是持久不衰的话题,如何租好房,好租房,跟随此文一起制作一个租房小程序,让租房不再困难. 一.小程序 1. 创建小程序 2. 首页 3. 房源列表页 4. ...

  5. treewidget怎么设置某一个item拖动的_如何零基础撸一个专车小程序?看这一文就够了!...

    作者 | hello等风来 责编 | 伍杏玲 最近时常感叹道:时间总是那么的快,转瞬即逝.对于像我这种刚入门的小生来讲,技术每天都在更新,框架也层出不穷,有时候还没弄懂这个知识大牛们又推出了更好的技术 ...

  6. 给ofo共享单车撸一个微信小程序

    想学一下微信小程序,发现文档这东西,干看真没啥意思.所以打算自己先动手撸一个.摩拜单车有自己的小程序,基本功能都有,方便又小巧,甚是喜爱.于是我就萌生了一个给ofo共享单车撸一个小程序(不知道为啥of ...

  7. 善用云函数,开源节流,小程序后端使用云函数案例

    背景 随着serverless越来越流行,越来越多的中小型企业,个人开发者开始接纳并使用这样一个简单,灵活的平台.由于不用自己运维服务器,不用自己考虑系统负载问题,可以为企业节省不少成本.另外对于一些 ...

  8. 微信小程序绑定云服务器文档,微信小程序云开发搭建一个管理小程序.pdf

    微微信信小小程程序序云云开开发发 搭搭建建一一个个管管理理小小程程序序 概概述述 : 开发者可以使用云开发开发微信小程序.小游戏,无需搭建服务器,即可使用云 能力. 云开发为开发者提供完整的云 支持, ...

  9. 两天撸一个优惠券小程序,记录下开发的小小经验

    工作的准备 下载微信开发者工具

最新文章

  1. java中Error与Exception有什么区别
  2. 这波操作,会把你的中间件架构带到另一个Level
  3. hdu 1593(数学)
  4. Tomcat部署的三种方式
  5. boost::copy_n相关的测试程序
  6. 实时数仓入门训练营:Hologres性能调优实践
  7. CVE-2019-2725复现(从环境搭建到getshell)
  8. pregquote php,PHP: preg_quote - Manual
  9. Oracle使用数据泵导入/导出数据(expdp/impdp)【图文教程】
  10. UI设计师必备|Map name切图命名规范
  11. mysql kingshard_浅谈 Kingshard MySQL 中间件
  12. docker之基础命令相关操作下
  13. linux核心蜜罐系统,分析***,斩断黑手
  14. 解决easy ui 1.4datebox控件不能清空的问题
  15. Android异步通信:深入剖析Handler机制源码
  16. 电脑蓝牙耳机无法调节用关闭绝对音量来解决
  17. 单细胞三大R包之Seurat
  18. php 打印 加标题,打印每页都有标题怎么设置
  19. 机器学习实战——人脸表情识别
  20. 开机提示小娜无法在本计算机运行,win10系统下小娜无法打开应用如何解决

热门文章

  1. 搜索凑单页大促显示延迟方案设计
  2. 重学c语言 新开导言
  3. linux 删除tmp文件夹,Linux下tmp文件夹的文件自动删除的问题(转)
  4. PotPlayer播放DST音频的mkv电影解码错误
  5. 《谁说菜鸟不会数据分析》学习笔记 第一章总览 第二章数据分析思路
  6. 蓝鲸CMP:跳出云管看云管
  7. 2022年1111/双11淘宝/天猫/京东任务自动助手,分享源码学习
  8. 失眠神器哪个最好?每天晚上睡不着的你一定要试试的东西
  9. 回归预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络多输入单输出回归预测
  10. 使用反射生成 JDK 动态代理