记一次失败的小程序反编译经历

起因与目标

最近想搞个自己的小程序,觉得最实用的就是去水印小程序,可以下载抖音、小红书的无水印视频和图片。要做这个,怎么去水印是关键。一种方法就是深究底层原理自己搞,这种对不是专业做逆向的我来说太困难了。还有一种就是找一个去水印接口,发送链接,返回无水印视频图片的地址。然后我在网上搜了一圈,去水印接口基本都是收费,而且你想买还不一定找得到卖的人。于是我尝试着反编译某个去水印小程序,看看能不能拿到它的接口给我自己用。事实后来证明是行不通的,后面我会说明。

反编译小程序

这一步我是参考的这篇文章微信小程序反编译~2022年

按照他的步骤来基本没什么问题,唯一需要注意的是在文件管理中打开的文件夹下面并没有小程序的缓存,而是在上一级,比如这是我的路径

然后就用工具反编译就行了,得到反编译之后的代码。

源码查看

使用微信开发者工具导入源码。导入代码的时候,这里的AppID我用了我自己的AppID,这是一个大坑,后面会提到。

导入之后我显示尝试了一下,在开发者工具中粘贴地址解析无水印视频,结果不行。

可以看到返回的code是7015,正确返回应该是0。

于是我去研究了一下这个请求方法

    formSubmit: function(t) {var a = this, e = t.detail.value.txtUrl;a.startSubmit(e);},startSubmit: function(t) {this.startGetData(t);},startGetData: function(t) {var a = this, e = t && t.indexOf("http");if (t && -1 != e) {t = t.substring(e);var n = i.getWxCode();console.log(n), "" != n && null != n ? a.getVideoInfo(t, n) : wx.login({success: function(e) {e.code && (i.setWxCode(e.code), a.getVideoInfo(t, e.code));}});} else a.setData({btnSubmitEnable: !0}), wx.showToast({title: "请输入短视频分享链接地址",icon: "none",duration: 2e3});},getVideoInfo: function(a, e) {var n = this;n.setData({btnSubmitEnable: !1,btnSubmitLoading: !0,showVideo: !1,loadModal: !0}), wx.showLoading({title: "加载中..."});var o = {text: a,code: e};t.formParmas(o), wx.request({url: i.getApiDomain() + "/Video/GetVideoInfo",method: "post",data: o,timeout: 2e4,header: {"content-type": "application/x-www-form-urlencoded",DevINfo: t.getDevInfo()},success: function(t) {if (0 == t.data.code) wx.setStorage({key: "video",data: t.data.data}), wx.navigateTo({url: "/pages/index/video/index"}), n.setData({textVal: "",showCopy: !0}); else {var a = t.data.msg;7015 != t.data.code && 7e3 != t.data.code || (i.setWxCode(""), a = "服务器繁忙,请重试!"), wx.showModal({title: "提示",confirmText: "确定",showCancel: !1,content: a,success: function(t) {}});}},fail: function(t) {wx.showModal({title: "提示",confirmText: "确定",showCancel: !0,content: "请求失败,请检查网络是否正常,或者切换网络重试一下。",success: function(t) {t.confirm;}});},complete: function(t) {n.setData({btnSubmitEnable: !0,btnSubmitLoading: !1,loadModal: !1}), wx.hideLoading();}});}

因为我对js代码不太熟悉,所以这里借用了一下chatgpt帮我解释(有一说一chatgpt是真的好用)

根据代码和chatgpt的解释,我来总结一下:

  1. GetVideoInfo这个接口需要5个参数,其中三个参数text是链接地址,versionCode是小程序版本,appId是开发者的appId,都是固定的。唯一不同的是code和sign。而sign是其余几个参数的key和value再加上md5的算法生成的,只要code能确定,sign就能确定。所以关键是code。
  2. code是微信登录凭证,通过调用getWxCode方法获取。如果code不为空就当做参数发起请求;如果为空就调用wx.login方法获取,并通过setWxCode方法放入本地缓存。
  3. getWxCode会调用两个带有固定前缀的方法getWxCodeKeygetWxCodeTimeKey来获取存储在本地的微信登录凭证码以及其对应的时间戳。接着,函数判断当前时间戳与本地存储的时间戳之差是否超过300秒(5分钟),如果是,则说明微信登录凭证码已过期,函数返回一个空字符串;否则,函数直接返回本地存储中的微信登录凭证码。

寻找原因

所以为什么我本地调试生成的code无效呢?我开始查找资料,以下是相关的资料:

wx.login微信官方文档

code2Session微信官方文档

微信小程序登陆模块invalid code问题

【微信小程序】详解微信小程序登录wx.login和获取用户信息wx.getUserInfo

下面是我总结出来的结论:

  1. wx.login方法是静默的,不会弹出授权弹窗。该方法返回一个code,也就是用户登录凭证,有效期5分钟。
  2. 后台拿到code之后,可以调用code2Session方法,获取openid(用户唯一标识)等参数。
  3. 每次调用解析接口GetVideoInfo的时候,会将code传到后端,后端对code进行校验。校验通过再执行业务逻辑。怎么校验呢?我这里随便设想一种方案:以code为key去redis中查找有没有相关的键值对,如果有就校验通过;如果没有就调用code2Session方法,调用失败就认为code校验失败;否则说明code校验通过,并且以code为key, openid为value存入redis中,并设置过期时间为5分钟。
  4. 小程序分发的code是与appid绑定的,仅当前申请code的appid才可使用

最关键的一点,wx.login返回的code与appid是绑定的,这也是为什么我会调用失败的原因。code2Session需要4个请求参数,小程序appId,小程序appSecret,wx.login返回的code,grant_type(常量值)。因为我在导入代码的时候,在开发者工具里设置的appId是我自己的appId,所以生成的code也和我的appId是绑定的,因此在调用code2Session方法的时候必然不通过。一句话,开发者工具中设置的appId和接口后端中的appId必须相同。

那我能不能修改开发者工具中的appId呢?答案是不能,因为需要开发者的微信登录

那我能不能抓包,抓一个可以通过的code,写死到程序中?答案是可以,但是5分钟之后就会失效,原因我上面已经讲了。

原理图

按照逻辑我画了一张原理图,应该能把过程表达清楚了

总结

虽然折腾的过程失败了,但我也不是没有收获。以后做自己的项目的时候就可以用这套机制来防止别人盗用我的接口。

btw我还是折腾点更有价值的事情吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/53622.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《微SaaS创富周刊》第9期:如何把创业者访谈,变成年收入100万+美元的生意

导读 大家好!第9期《微SaaS创富周刊》面世啦(点击这里阅读第1期),感谢大家的关注和阅读!本周刊面向独立开发者、早期创业团队,报道他们主要的产品形态——微SaaS如何变现的最新资讯和经验分享等。所谓微Sa…

QQ机器人---服务器超级简单的安装

废话不多说。 直接开工。 安装docker容器。 先卸载老版本,安装新版本。 sudo yum remove docker docker-client docker-client-latest sudo docker-common docker-latest docker-latest-logrotate docker-logrotate sudo docker-selinux docker-engine-selinux d…

nonebot2-2.0.0b4 QQ机器人详细教程

介绍 Nonebot2是基于go-cqhttp框架使用Python3制作的机器人框架,可以实现go-cqhttp能实现的QQ功能。使用异步开发更快,稳定。nonebot 一直在很久之前就在开发,现在是nonebot2之前的1版本已无法使用。但是nonebot2的旧版本依旧不影响&#xf…

使用腾讯云服务器+Nonebot2+go-cqhttp搭建QQ聊天机器人【保姆级教程 2023最新版】

文章目录 一、查看conda版本二、查看系统版本三、配置go-cqhttp1.请切换至同一网络下扫码2.打包Docker镜像 四、创建NoneBot环境安装脚手架 一、查看conda版本 二、查看系统版本 uname -a arch getconf LONG_BIT三、配置go-cqhttp 下载go-cqhttp 这里有不同版本的cqhttp,并且…

[QQ机器人]nonebot2 聊天插件

使用方法:将插件放入存放机器人插件的文件夹,并重新运行bot.py 使用命令:输入#加上你要问的问题 运行截图: 以下是源码: """ 作者:萌新源 时间:2022/3/30 操作系统:debian for raspberry pi 修改请保留本插件的版权 本插件版权属于萌新源 要发布请…

Nonebot QQ机器人插件七:智能聊天机器人

QQ机器人插件七:智能聊天机器人 1. 使用智能聊天api 搜索青云客网络青云客智能聊天机器人API (qingyunke.com),点击人工智能聊天。(实测智能回复问题不大,就是反应可能慢一点,而且如果一次给他发几条消息最多回复一条&#xff0…

快速搭建 QQ 聊天机器人--聊天机器人框架安装及搭建教程

使用到的工具 Deno:现代的 JavaScript 和 TypeScript 运行时。 Yoeth:一个轻巧、易用的 Deno 聊天机器人框架,支持 OneBot 12标准。 Walle-Q:一个 QQ 平台的 OneBot 协议实现端。 前期准备 安装 Deno(使用 PowerS…

windows上QQ机器人搭建教程

我们的这个qq机器人是用Python来搭建的。 所以说,先打开我们的Pycharm 然后新建一个文件夹,再打开终端,先来装点库 pip install pydantic loguru pygtrie httpx python-dotenv uvicorn fastapi requests selenium aiocqhttp ffmpeg aiohttp …

最新版QQ机器人搭建保姆教程,保熟【最新beta2版本】

前面写了不少文章关于机器人,后来小伙伴说不能用了,因为你版本与我不一样,隔了几个月了,版本更新了,变化比较大,所以特此更新一篇2022/3/25的QQ机器人搭建教程,有空更新插件。 声明:…

【qq机器人】机器人发语音

文章目录 前言一.演示二.完整源码前言 前提你已经按照我的 教程 搭建好环境 一.演示 二.完整源码 from nonebot.adapters.cqhttp import Message from nonebot import on_command from nonebot.typing import T_State from nonebot.adapters import Bot, Event import reque…

【最新】QQ机器人插件

QQ机器人 前言QQ机器人功能展示一、如何白嫖(用别人的插件)二、如何自力更生(自己写) 前言 本文旨在如何为你的QQ机器人添加插件,也就是添加机器人的功能。添加插件的方法有两种,一种是用别人写好的插件&a…

QQ聊天机器人教程

文章目录 关于本篇教程使用技术关于simbot所需依赖我的项目源码项目结构目前已实现的功能有 可爱的猫猫码群监听及发送信息关于groupmsg 发送图片,at,转发等特殊信息请使用可爱的猫猫码发送 聊天记录持续会话关于机器人启动的问题请参照我的上一篇机器人教程 关于本篇教程 我再…

别再用Ctrl+C来复制内容了,赶紧试试这一款快捷回复工具

电脑上复制内容你会选择的方法是什么?相信很多人会说使用CtrlC来复制,CtrlV来粘贴,用电脑快捷键复制内容固然是比较快捷的,但是在复制的时候容易误选导致粘贴错误,而且经常使用键盘CtrlC也容易让手部感觉比较劳累&…

鸿蒙OS已开源(内有Huawei_LiteOS下载地址)

华为的Harmony OS 昨天发布,来得比预计的早一些。 特点: 1、开源。 2、鸿蒙系统是基于微内核的全场景分布式OS 3、实现模块化耦合,对应不同设备可弹性部署,鸿蒙OS有三层架构。 4、底层由鸿蒙微内核、Linux 内核、lite os 组成…

鸿蒙os3.0beta,鸿蒙OS系统下载-鸿蒙OS beta版 v2.0下载-955游戏网

鸿蒙OS beta版简介: 鸿蒙系统os2.0是由华为带来的最炫酷的最新的系统软件,这个新的操作系统给大家更专业的系统服务。 鸿蒙操作系统专注于内核安全,而且自主开发的系统应用于手机和其他可穿戴设备,不仅使用方便,而且功能强大&…

鸿蒙系统在哪里下载,鸿蒙操作系统开源在哪下载 华为鸿蒙OS操作系统开源下载...

鸿蒙操作系统开源在哪下载?华为自研操作系统鸿蒙OS是一个开源系统,对鸿蒙OS操作系统感兴趣的朋友是不是想下载鸿蒙OS操作系统开源呢?下面小编为大家带来了鸿蒙OS操作系统开源下载,供参考。 鸿蒙OS操作系统开源下载 华为自有操作系统鸿蒙在8月9日正式发…

华为鸿蒙os手机系统下载,华为鸿蒙os系统手机正版下载|华为鸿蒙os手机Beta版正式版-520下载站...

华为鸿蒙os手机Beta版正式版是一款面向所有手机移动端用户所研发的操作系统软件,华为鸿蒙os手机可以在手机,电脑各种上进行开端代码的下载,查看系统的详细框架内容,可以进行相关的实验操作,目前所有的华为手机以及智能…

ubuntu 安装微信(微信官方版本)

ubuntu 安装微信 1-环境说明: 首先,说明一下我在ubuntu20.04LTS上安装微信的经历,我在网上(主要是csdn)看了很多安装方法,包括直接安装wechat,安装deepin版本的wechat,要么是不能运…

如何获取鸿蒙系统的源码下载

如何获取鸿蒙系统的下载 源码地址仓库说明规则仓库根据规则仓库下载源码说明 源码地址 https://gitee.com/openharmony 仓库说明 该项目总共有119个仓库,他的鸿蒙系统,结构类似于安卓,并不是由一个仓库维护,也就是说&#xff0…

华为手机鸿蒙系统官方下载入口,华为鸿蒙系统官方下载入口v.20

华为鸿蒙系统官方下载入口v.20是一款非常好用的国产手机程序。华为鸿蒙系统官方下载入口v.20为您带来了华为方面提供的权威下载地址。在这款国产手机系统里您可以收获到相比于各种老牌外国手机系统更好的体验,享受更好的智能手机服务。想要试试看的朋友赶紧来下载吧…