强智教务管理系统爬虫难关1

强智教务系统的登录页面有个验证码,为了自动化和简单化,采用了联众答题模块,自动识别和验证

强智教务管理系统爬虫难关1

下面是我的点数,说明已经可以自动识别验证码并且可以使用了,当然,这个没有什么难度。

今天解决的是账号密码加密问题。

强智教务管理系统爬虫难关1

这个是我抓到的包

很显然,账号密码进行了加密处理,接下来要进行js逆向,

找到关键函数,加个断点。

强智教务管理系统爬虫难关1

dataStr = "Gc031n7qOX6ALgyH0874e9t789JCXb7Kc5c0WE339062eeg#33221313323132323223"

这个就是他的加密方法,不是常见的md5、ras而是动态加密,

强智教务管理系统爬虫难关1

首先,他先访问这个url,

Request URL:

http://jwxt.qlu.edu.cn/Logon.do?method=logon&flag=sess

强智教务管理系统爬虫难关1

使用了ajax动态刷新,得到了

dataStr = "Gc031n7qOX6ALgyH0874e9t789JCXb7Kc5c0WE339062eeg#33221313323132323223"

后面的加密算法就显而易见了。

强智教务管理系统爬虫难关1

下面是我整理的强智加密代码,只要获得dataStr,user,password,就可以直接套用了。

function jiami(dataStr, user, password) {
if (dataStr == "no") {
    return false;
} else {
    var scode = dataStr.split("#")[0];
    var sxh = dataStr.split("#")[1];
    var code = user + "%%%" + password;
    var encoded = "";
    for (var i = 0; i < code.length; i++) {
        if (i < 20) {
            encoded = encoded + code.substring(i, i + 1) + scode.substring(0, parseInt(sxh.substring(i, i + 1)));
            scode = scode.substring(parseInt(sxh.substring(i, i + 1)), scode.length);
        } else {
            encoded = encoded + code.substring(i, code.length);
            i = code.length;
        }
    }
    return encoded;
}
}

function getPwd() {
return jiami("n97g04282Ts2995eHw4YD13Rt8j4a0472r124839N#23311132332212212313", "201703040003", "aini123")
}

账号密码不用试了,我瞎编的,记住是动态的,先访问sess