照常使用fiddle抓登录请求,发现传的参数被加密:
于是使用提交的参数在fiddler中全局搜索,经过反复查找,看见加密提示:
直接有提示说这是密码加密部分,于是全局搜索setPwdValue,找到加密部分:
经过分析发现加密部分只使用了下面部分:
encodeMd5Pwd: function(e) {
var t = hex_md5, n = "";
return e += "",
LOGIN.timeseed || LOGIN.getTimeseedById_(),
n = LOGIN.timeseed,
n + t(e + n)
},
encodePwd: function(e) {
var t = hex_md5, n = "";
return e += "",
LOGIN.timeseed || LOGIN.getTimeseedById_(),
n = LOGIN.timeseed,
n + t(t(e) + n)
},
timeseed: "",
setPwdValue: function(e, t) {
if (LOGIN.isSimplePwd(t)) {
var n = e.url.value;
e.url.value += n.indexOf("?") > -1 ? "&simple=1" : "?simple=1"
}
var i, r, o = 32 === t.length;
i = o ? LOGIN.encodeMd5Pwd(t) : LOGIN.encodePwd(t),
r = e.pwd,
iptPwd_ = e.pwd_,
(r && ("" != r.id || "hidden" != r.type) || !r) && (r = document.createElement("input"),
r.name = "pwd",
r.type = "hidden",
e.appendChild(r)),
r.value = i,
LOGIN.setOldPwdValue(e, t)
},
setOldPwdValue: function(e, t) {
var n, i, r = e.pwd_, o = 32 === t.length;
o ? i = t : (n = hex_md5, i = n(t)), r && (r.maxLength = 32, r.value = i)
},
其中encodeMd5Pwd方法只是对传入的参数进行MD5加密,而encodePwd则是timeseed + md5(md5(self.pass_word) + timeseed,timeseed是其他请求获取的,如此就可以根据已有数据进行尝试,发现果真如此,请求参数构造
dataform = {
'userName': self.user_name,
'pwd_': md5(self.pass_word),
'loginType': 'ENTERPRISE',
'url': 'http://www.***********.net',
'x': '82',
'y': '32',
'monitor': '0',
'pwd': str(ts) + md5(md5(self.pass_word) + str(ts))
}
这样就可以登录了