逆向青果软件有限公司外包的教务系统登录接口
很早以前为了抢课就研究过学校的登录接口,当时刚碰JS遇到了许多坑,故记下此篇造福人类,也让自己复习一遍,完整的代码可以点此仓库的py文件模拟登录,但希望点进来观看的你看了此篇教程能有一点点收获就是乱舞神菜最大的荣幸!
POST请求解析
研究登录接口的第一件事就是对登录的post的请求进行解析,看看传入的参数是否加密以及是否有多余的参数.如果没有,那么恭喜你这篇教程不用看了,直接对明文参数进行post进行登录研究.
可以很明显的看出来 http://jwgl.bsuc.edu.cn/bsxyjw/cas/logon.action 这个接口就是我们要研究的登录接口,当然其中的data数据也是进行了加密.
右键按钮审查元素定位登录按钮在html中的位置,点击右边的Event Listeners将Ancestors all的选项取消,这样就能单独监听按钮的事件,点击click,发现定位到一处代码之中,跟过去看看。
很明显此时已经被断下了,我们用F11单步步入进去看有关于如何处理本次按钮事件的有关函数.
继续进行分析
就是文本_u加上验证码
就是文本_p加上验证码
这段代码就是用户名文本加上;;再加上_sessionid(这个变量从何得来呢,ctrl+shift+f搜一下发现他就在主页中,应该是每次访问随机生成的那种)三者相加进行base64加密.
很明显,就是讲前面几个变量相加变为params
然而我们的逆向分析还没有结束,我们请求中的token很明显是经过加密的,但是逆向分析到此时token还是等于password,于是我们继续逆向
很明显,getEncParams这个函数才是加密了token,params这些参数的地方,我们F11单步步入进去看看.
F11单步步入点进去看看,我们发现这个 站的程序员确实差点意思,写的都是一层套一层循环嵌套,再F11单步步入进入strEnc这个函数看看.
程序员已经给我们备注了是des加密了,所以我们也就不必进行分析,此时我们有两种选择,一种是直接复制调用这段JS进行加密,另一种则是直接python调用des加密模块进行加密,由于不清楚程序员是否修改了des的加密方式故我们直接采用调用js的加密方式确保不会出错.
分析到这里我们只要再回头看看对des传入了哪些参数就能解密出来了.
很明显data传入的是我们的params,那这个_deskey是什么过ctrl+f搜索发现同样在这个jsp文件顶部,由于_deskey的加密方式搜不到,分析也十分难分析,故笔者这里采用直接获取jsp文本的方式获取这两个变量:
到这里我们的解密工作也就告一段落了.
调用js
剩下的小难点就是调用js了,我们可以利用execjs这个库来调用js:
后续
剩下的就是获取相关的url,构造相关的请求头,以及python调用md5加密和base加密等操作,利用requests库的session来保持会话就能实现我们的模拟登录了.
总结
此次逆向说难不难说简单不简单,算是对新手来说是很方面的加密了,但是综合性很强,我们需要分析协议,下断点,分析js代码,甚至利用正则表达式,好在js代码是明文这让我们的逆向工作简单了很多,希望各位看到这边文章能有所收获,共同进步!
运行环境
- python3
- execjs
- base64
- hashlib
- re
my github
欢迎来全世界最大的同性交友 站和我一起学习交流
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树预备知识常用开发工具211691 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!