0%

python实现今日校园自动签到

背景

由于疫情原因,许多学校纷纷要求每天签到统计体温信息,回校后也是如此,一日两签有的甚至是一日三签,然而由于我经常睡迟以及记性差忘了签到,所以就有了自动签到的想法,恰巧此时正在学习爬虫,感觉可以用爬虫实现,就开始了尝试(说了这么多其实就是想偷懒)

准备工具及作用

  1. vmos pro模拟器配合Fiddler抓包
  2. Xposed配合模拟器突破ssl pinning机制
  3. JustTrustMe.apk配合模拟器突破ssl pinning机制
  4. Fiddler抓包

编程思路

  1. 模拟登录
  2. 获取未签到任务
  3. 获取具体签到任务详情
  4. 填充数据
  5. 提交数据

开始

vmos

安装好虚拟机后,点开设置->开启超级用户->启用xposed框架

vmos

安装JustTrustMe模块,可在虚拟机中搜索下载安装,安装好后需重启虚拟机

安装好今日校园,可在虚拟机中搜索下载安装,也可以从真机中导入

Fiddler

点击 官网 下载安装

启动Fiddler,tools->options,配置可参考如下

配置1
配置2

配置网络代理:查看电脑IP(win+r->cmd->ipconfig),选择如下IP地址

网络配置

打开虚拟机->选择网络->长按已连接wifi->修改网络->代理->手动
主机名填写电脑IP,服务器端口为Fiddler配置端口,一般默认为8888

安装证书,虚拟机中打开浏览器输入http://ip地址:8888

安装证书

抓包分析

抓包
查询加入今日校园的所有学校

1
https://mobile.campushoy.com/v6/config/guest/tenant/list

通过学校id获取学校信息

1
https://mobile.campushoy.com/v6/config/guest/tenant/info

组合得到登录地址

1
http://authserver.学校id.edu.cn/authserver/login?service=https%3A%2F%2F学校id.campusphere.net%2Fportal%2Flogin

获取未签到任务

1
https://学校id.campusphere.net/wec-counselor-sign-apps/stu/sign/getStuSignInfosInOneDay

获取具体签到任务详情

1
https://学校id.campusphere.net/wec-counselor-sign-apps/stu/sign/detailSignInstance

根据抓包看到的数据包自己构造并填充数据

提交数据

感想

为什么要写这篇文章呢?一方面,是记录下一些目前无法解决的问题,希望以后能有实力解决这些问题;另一方面,是希望能帮到想学习想写该项目的大家,给大家一个参考。

此次尝试对于我来说,简直是噩梦,不过所幸看到了大佬写的该项目,认真学习理解了之后也是成功完成了这次尝试,然而仍然留下了令我困惑的问题,之前在尝试解决时把自己手机给玩废了,直到在写下这篇文章前两天我仍在尝试解决它们,然而还是没能解决。接下来会写下目前未能解决的一些问题,希望以后能够解决。

问题

  1. 在我后来模拟登录时,未能找到查询所有加入今日校园的学校信息的链接,不知道大佬们是不是根据经验或者从其它地方找到的该链接
  2. 模拟登录时密码传送时进行了加密,之后会去学习理解下加密算法
  3. 在我自己抓包时能找到获取具体签到任务详情的链接,但是未能找到获取未签到任务详情的链接
  4. 填充数据时,有些数据需要加密,密钥在app的函数里,需要对app进行脱壳反编译,跟着大佬的教程使用jadx实现了对早期版本app的反编译,但是后面新版的几乎都加固,我也是找了几个脱壳教程然而没成功,作为没怎么接触过逆向的我来说,实在是为难我了。

总结

关于1、2、3,我一开始觉得或许是ssl pinning机制,或许它们就藏在那些看不到的链接中,突破ssl pinning机制原本也不难,我找到并尝试过的有以下几种方案:

  1. 逍遥安卓模拟器+Xposed框架+JustTrustMe模块
  2. Httpcanary
  3. vmos+Xposed框架+JustTrustMe模块
  4. 脱壳反编译,修改apk关于ssl的判断

逍遥安卓模拟器貌似被今日校园防住了,我尝试时安装运行就闪退;Httpcanary需要root,没有系统级证书似乎平行空间也抓不了,之前也是在这一步对手机root然后玩废的;vmos相比其它感觉是结果较好的了,在抓包情况下能正常登录进去,其它方案在启动Fiddler前提下会登录不了,然而即使是这样,也仍然是未发现1、2、3所说的链接;脱壳反编译失败了。

问题4涉及逆向,目前技术水平有限肝不动,以后关于这方面的知识多了后再回来看看。

参考:大佬的项目 大佬的逆向分析 大佬的解固脱壳方案