最近下班无聊,就看了一下之前写的教务系统模拟登录代码(python-爬虫),整体逻辑大概自己总结了一下:
1.请求验证码图片。
2.对输入的密码进行加密。
3.封装账号,密码,验证码,发送post请求
但是在第2步的时候对输入的密码进行加密的过程中,我使用的方法是:
from Crypto.Cipher import AES
没错,就是调用python-Crypto.Cipher库中的AES,进行对密码进行加密处理,但是最近在工作上看到几个网站是带有js加密的进行加密处理,后面我就用到了js逆向解密解决了模拟登录的问题,后来我就想到能不能直接利用js逆向解决教务系统的AES密码加密操作,于是开始了实践:
一,网站抓包,分析请求
我们可以看到其登录发起的请求是post请求(简注:需要带参数的请求),于是我们可以想到可以用post发送相应的参数进行模拟登录。
二,js逆向加密密码
1,基于上面的过程我们看到了上面的参数数值:
{
account:
password:
verifycode:
}
通过分析,我们可以知道其参数只用对密码加密,其他数值都是明文,于是我们就可以对其进行加密:
================================重点部分=================================
首先,我们通过参数pwd进行索引,找到源代码中对密码加密的地方:
于是我们找到了js加密部分,于是我们打个断点找到其加密代码。
根据其打的断点,我们可以看到,其关联的js加密即可跳转
我们看到在我们打的断点前,其密码是明文,于是我们知道在下面这段代码中就是对密码加密的过程,于是我们进入到内部。
其js加密涉及到encrypt函数,看到这个代码我们就比较熟悉了,在加密时候我们就涉及到了这个函数,于是我们知道,这个函数一定涉及加密过程,于是将这个代码进行调试
。。。。。。。。按照上述断点方法,我们就可以写出我们的js调试代码了(里面有很多坑,本教程仅提供思路)
经过多个断点以及分析,我们得到最终的js代码:
进行返回 我们的也得到了加密数据,我们对js代码进行封装,于是得到:
进行写入wuy.js,放入将要写发送网络请求的同一文件夹下。
三,发送网络请求
1,创建一个js类,将js代码功能封装:
封装好js代码之后,我们可以进行发送网络请求了
以上代码是测试代码,将验证码图片先获取,手动输入验证码及密码之后,密码加密措施利用封装好的类进行调用。最后,我们运行一次,可以看到教务系统返回我们的信息:
好了,大功告成!!!,可以抓取教务系统的各种数据的抓取了。
(以上教程仅供技术学习,不得用于其他用途。)
若有任何问题,可联系本人