指点天下
指点天下是我学校目前使用的一款软件,用来日常管理学生和相关通知发布的软件。在疫情期间用于我们学校的进行每日身体健康情况打卡,用以确保学生在家情况,同时通过打卡时的定位信息来确定学生是否出行。
在上半年里,每天都坚持打卡,未从中断。但放暑假了,人相对容易忘记打卡的事情,每天忘记打卡的同学也越来越多了。自己也害怕忘记,因此想着通过python程序来解决打卡问题。
简单自动打卡
在之前的半个月里自己已经通过简单的程序来实现打卡了,通过简单的抓包提取到headers中token和每次打卡上传的内容,以后每天程序定时提交就行了。但昨天,自己早上没注意打卡信息,直到老师在群里通知谁谁没打卡抓紧时间打卡的信息里才知道自己今天的自动打卡失效了。自己想可能是因为token失效的原因,原本想直接提取新的token继续实现,又碰到同学让我帮他打卡几天,于是为了以后方便就下决心去分析token。
分析token
token内容是什么自己也不清楚,于是小白的我尝试用base64进行解码,发现第一段是一段编码信息,第二段是手机号和生成和过期时间的时间戳,第三段解密不开。
第一段的内容是一个加密算法的名称:HS256,因此百度搜索以下:明白了token使用JWT实现Token认证。最后一段是根据密钥对前面两段内容进行加密的字符串。密钥自己不知道,当时甚至想去暴力破解,后来搜索一下,不太现实,大公司的密钥都设置的很复杂。
获取token
想要伪造token时不可能了,因此要想避免token失效就必须重新获取token,想到指点天下每段时间就要重新登录,于是想到是登录时获取的。
开始抓包登录时的包,结果证明了自己的猜测。确实如此,但也遇到了一个新的问题,自己的密码上传的时候是加密的,长度为32位,猜测是md5,但自己用密码进行md5加密后,但结果与抓包内容不同,因此肯定是加入其他字符后又采用的md5。
app自己不会分析,心想放弃。百度搜索了下指点天下,发现有网页版登录界面但学生用户无法登录,不过却有意外发现,在上传的表单中也是用的md5加密,而且md5加密后的结果时相同的。
于是就从网页版的js入手,自己本身都是小白不太懂,就看了看js的内容,在源码中发现竟然直接明文写出来加密方式,没有任何的js加密。(小声吡吡:这也太不负责任了吧)。
知道了加密方式,于是直接使用了登录的api和随机伪造的设备识别deviceToken来获取token,解决过期问题。
定位问题
定位问题很好解决,定位是获取的手机反馈的经纬度和地理位置。我直接就用我抓包的数据即可,我同学的也是通过查他老家的位置,手动修改相关的地理位置。
自己耍点小聪明,通过高德开放平台来获取相关的经纬度、行政区以及较为准确的地理叫法。为后面能在学校里自动签到打好基础。
成品出炉
问题解决差不多,下一步就是写代码。(初步完成,但在完善。)
项目地址:
CODING仓库
想问一下,打卡需要提交的内容字段是如何获取的呢?代理抓包吗?想填写假期居住地,但不知道字段名呢。
打卡的api和相关字段是通过抓包获取的,使用的软件为fiddler(电脑上)。因为指点天下基本使用http协议,所以抓包十分容易。在抓包的数据中可以按顺序和相关选项来找到你想要的字段。另外就我学校而言,现在填写的信息和之前填写的发生变化,所以需要重新获取相关字段。如果你想要获取自己学校所需要的字段等,可以使用软件来进行抓包。如有其他相关问题,我们可以多多交流。