前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >奕辅导自动打卡脚本实现

奕辅导自动打卡脚本实现

作者头像
Chor
修改2022-07-17 00:05:29
12.1K12
修改2022-07-17 00:05:29
举报
文章被收录于专栏:前端之旅

在使用了一个学期的自动打卡之后,学校突然宣布停用原来的“我在校园”小程序(好像是合作期到了),改用“奕辅导”小程序。虽说程序改了,但是实现自动打卡的原理基本是不变的,所以这几天有空研究了一下这个新的小程序。

首先还是通过 Fiddler 抓包小程序的请求并进行分析,这个就不赘述了。打卡过程基本可以归纳为如下:

  • 用户通过微信登录小程序,小程序调用 wx.login 获取 jsCode,再将其作为参数发送请求 1,获取用户的 accessToken。其有效期为一星期左右。
  • 将 accessToken 作为参数,发送请求 2,获取用户今日打卡状态以及一个很重要的问卷 id(每个用户、每一天都有自己的一个问卷id)
  • 将问卷 id 拼接到 url 中,发送请求 3,获取今日问卷
  • 创建 json 格式的问卷答案,发送请求 4,提交问卷(完成打卡)

知道了大致流程之后,接下来就很简单了,写脚本模拟这个过程即可。

之前的小程序我是用 Python 写的,但语法始终用不习惯,这回就改用 JS 写了。请求头、请求参数和接口地址都是知道的,由于一天只需打卡一次,少了早中晚的时间段判断,所以逻辑上也比“我在校园”小程序简单得多。需要注意的就是创建问卷答案这一块,其实这里提交的 json 内容可以是固定的,毕竟每天的问卷内容不大可能更改,但由于中间(大概是 1 号的时候)确实修改了一次,所以谨慎起见还是要检验一下。问卷大概有 8 个子问题,每个子问题有一个 id,每天打卡的时候会先获取所有子问题的 id,与准备提交的 json 中的子问题 id 做比对,确认是完全一样之后才会提交问卷。

既然是自动打卡,肯定少不了 token 过期的问题。从请求返回的字段来看,accessToken 的有效期大概一星期,但实际上解包小程序之后发现只有六天。过期了怎么办呢?目前来说只有重新抓包,无法自动获取新的 token,因为这个 token 是发送带 jsCode 参数的请求获取的,jsCode 只有调用 wx.login 才能拿到,且是一次性的,脚本无法模拟这个过程。看了小程序源码之后发现似乎还提供了账密登录的方式,但小程序中未发现相关入口,应该是还在开发中的功能,或许后续可以作为一个实现自动登录、自动获取 token 的突破口。

顺便也记录一下小程序反编译的步骤(虽然反编译完没有特别大的收获):

  • 首先要拿到小程序的包,一开始用的安卓模拟器去拿,半天没搞定,还贼麻烦,后面发现 PC 微信不也有小程序的包吗?于是直接 PC 微信文件夹里面拿就行了。具体地址是在:wechat files/applet/wx+字母数字/数字/__APP__.wxapkg。可能 applet 文件夹中有很多个小程序文件夹,可以先清空一遍再打开小程序,就会自动重新生成文件夹了。当然也可以按日期排个序,排在最前面的就是了。
  • __APP__.wxapkg 是加密的,不能直接解包,所以先用 UnpackMiniApp 解密,这时候会生成以小程序 id 命名的另一个 wxapkg 文件
  • 使用 wxappUnpacker 解包 wxapkg 文件,目录下运行 ./bingo.bat + wxapkg 所在路径 即可
  • 最终就会输出小程序源码文件夹了

最后是脚本的地址:https://github.com/Chorer/YiFuDaoChecker-cloudFunction 有需要的自取。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档