易班校内轻应用智慧学工JS逆向、模拟登陆、每日打卡

一、前言

成都创新互联服务项目包括尧都网站建设、尧都网站制作、尧都网页制作以及尧都网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,尧都网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到尧都省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

  因为每天晚上十点钟要求在易班中的一个轻应用进行校区定位打卡,但是只有一个小时,这个时间点作为和舍友快乐五排的时间,总是忘记打卡。因此就想着做一个自动打卡的,挂载在云函数中,也不需要单独的服务器,每天定时运行,岂不是美滋滋。

二、发现问题

  首先,这个易班是一个手机APP,但是我在电脑网页端查看了易班官网,发现就算是登录后依然不能进行打卡相关操作,所以只能把目标再次转回到手机APP中,利用手机的HttpCanary对其进行了抓包。但是呢,因为高版本安卓手机的整数问题,打开抓包APP都不能登陆。轻应用在易班中呈现一种站内链接跳转的方式,因此,决定先关闭抓包,进入APP,在直接点击进入打卡的链接跳转,毕竟只用获取到用于post打卡信息的url即可,最后发现先进入所有打卡列表的页面,再进行抓包是可行的。

  通过抓包之后,获取到了post打卡信息的url,发现请求头中有一个Authorization的验证,是一个加密信息。

于是对authorization加密信息进行base64的解密,解密完发现这个东西由三部分组成,前两部分只进行了base64加密,第三部分应该是还有别的加密。base64解码后显示是乱码。

看来这条路是行不通的。但是,经过试验,发现了打卡的轻应用在“我的”页面中是可以点击退出登录的,就去点了一下,结果跳出了登录界面,通过复制链接,发现电脑是可以打开这个登陆页面的,因为平时这个都是app内应用,所以是没有登陆的,看不到登录页面。

  那么有了登陆页面就很简单了啊,通过浏览器登陆并抓包发现,登陆成功后,有一个Ajax请求的返回信息正好是携带了token,而且跟前面的请求头中的authorration格式是一样的。

发现这个就很简单了,只要先对这个Ajax发起post拿到token,在用这个token取进行打卡就行了。  

然后点到post表单,发现登陆的密码是加密的。查看后应该是一个MD5的加密,进行一个小小的逆向就可以拿到加密方法了。

  做完这一步骤以后,又发现打卡的时候post的url,后面携带了一个叫做ID的东西。

  最后返回去之后,抓包发现获取打卡列表的时候,响应值中打卡列表中每一个打卡都有一个对应的ID,就是打卡的时候post携带的ID。

  那么,做完以上的所有操作,就知道了代码实现的流程了,首先利用逆向出的加密方法进行模拟登陆,获取Ajax响应结果中的token,使用token请求获取打卡列表中对应今天的打卡ID,利用获取到的打卡ID进行打卡操作。

三、代码操作流程

  用到的库文件

1 import execjs
2 import requests
3 import time
4 from multiprocessing.dummy import Pool

网站名称:易班校内轻应用智慧学工JS逆向、模拟登陆、每日打卡
网站路径:http://ybzwz.com/article/dsojdpj.html