首页 > 编程语言 >看我如何用云函数撸一个PC小程序代码包在线解密工具

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

时间:2022-12-11 13:03:18浏览次数:57  
标签:文件 函数 用云 解密 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

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

云端开发

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

然后就是一顿操作了:

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

看我如何用云函数撸一个PC小程序代码包在线解密工具_云存储

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

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

看我如何用云函数撸一个PC小程序代码包在线解密工具_云存储_02

具体方案就是:

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

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

看我如何用云函数撸一个PC小程序代码包在线解密工具_腾讯云_03

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

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

云函数调试

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

看我如何用云函数撸一个PC小程序代码包在线解密工具_云计算_04

小文件(主要 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,版本,上传,程序代码
From: https://blog.51cto.com/xuedingmaojun/5928244

相关文章

  • okhttpClient 使用示例
    1@Autowired2privateOkHttpClientokHttpClient;34@PostMapping("testOkHttp")5publicResulttestOkHttp(@RequestParam("code")Stringco......
  • ATPCS规则 ------ 汇编传参规则
    1、寄存器使用规则ARM处理器中有r0-r15共16个寄存器,它们的用途有一些约定的习惯,并依据这些用途定义了别名,如表所示。项目别名使用规则r15pc程序计数器r14lr......
  • 帝国CMS:搭建网站发生Deprecated: Function get_magic_quotes_gpc() is deprecated in
     场景描述:搭建帝国CMS网站的时候,因为默认使用了宝塔推荐的PHP环境一键安装,报错如下:  报错: Deprecated:Functionget_magic_quotes_gpc()isdeprecatedin/data......
  • TPCH模型规范及测试说明
    使用TPC-H进行性能测试,需要有很多工作配合才能获得较高性能,如建立索引,表数据的合理分布(使用表空间和聚簇技术)等。本文从查询优化技术的角度,对TPC-H的22条查询语句和......
  • ARM3级流水线的PC值关系
    在解释PC值关系之前先了解一些概念。程序计数器(PC寄存器)程序计数器是用于存放下一条指令所在单元的地方。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内......
  • TPCH测试TIDB
    1、下载Git的测试工具[root@localhosttpch]#gitclonehttps://github.com/pingcap/tidb-bench.gitCloninginto'tidb-bench'...fatal:unabletoaccess'https://githu......
  • 02 PCB布线参数
    铜走线(Track)线宽:单面板0.3mm,双面板0.2mm;铜箔线之间最小间隙:单面板0.3mm,双面板0.2mm;铜箔线距PCB板边缘最小1mm,元件距PCB板边缘最小5mm,焊盘距PCB板边缘最小4mm;一般通孔......
  • 2022 ICPC 杭州 K
    K.MasterofBoth我们通过一些性质可以知道排序可以只比较每个串的第一个不同的地方即可这样我们就能比较轻易的得出n2的做法我们把它搞到一个trie树上面要求逆序对......
  • 40、记录ROC-RK3588S-PC开发板目标检测和mpp拉海康摄像头进行解码
    基本思想:喜得一个RK3588开发板,利用它完成目标检测和TCP通信 一、刷机参考官网或者参考下篇博客系统用的:ROC-RK3588S-PC_Ubuntu20.04-Gnome-r21199_v1.0.1b_220812.7z刷机......
  • 45th ICPC World Finals Challenge powered by Huawei
    虽然好几天前就结束了,但现在才有时间写。打的是\(\text{P1}\)。题有兴趣的可以自己看:分榜只展示前面一部分(奖嘿嘿耳机。码又臭又长(附了一些注释。//If,......