与天地兮比寿,与日月兮齐光。这篇文章主要讲述看我如何用云函数实现一个PC小程序代码包在线解密工具相关的知识,希望能为你提供帮助。
前一段时间突发奇想,想白嫖腾讯云云函数的能力来实现无服务模式下 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
云端开发
这里并没有纠结于具体使用什么版本的 node,所以一开始就默认用了 10.15,在腾讯云的云开发控制台创建应用时如果选择 koa 应用就默认是这个版本。
然后就是一顿操作了:
- 注册处理路由;
- 增加文件上传功能(小文件可以用云函数直接接收,大的就不行了会报请求体大小超限错误),上传文件至云存储;
文章图片
- 触发解密操作后从云存储下载文件;
- 调用 node 脚本去执行解密操作;
- 将解密后文件上传至云存储后提供下载链接。
文章图片
具体方案就是:
- 前端上传文件
- 服务端获取文件或者获取文件链接
文章图片
所以我就按着大佬给的提示继续往下尝试了,编写初始版本。
完事之后我们要进行调试。
云函数调试
这里要区分下大小文件的情况,大文件倒是 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 端代码包解密功能上云,听起来有意思但是实际上做的时候并没有那么美丽,一番体验下来感觉就是坑好多啊。不过还好大文件的解密是执行成功的,算是成功了一半,要啥
推荐阅读
- Debian 11 安装 无线 rtl8821ce 网卡驱动
- RENIX发送固定个数报文——网络测试仪实操
- 推荐学java——Spring第一课
- Spring认证中国教育管理中心-Apache Solr 的 Spring 数据教程一
- #yyds干货盘点# springboot配置@Async异步任务的线程池
- 文件解压缩及文件打包
- 实验(LAMP安装论坛)
- k8s故障排查指南
- 微灯手握寸笔,细谈内存管理