该文章仅供学习与参考,请勿用于商业用途,否则后果自负!
1.登录抓包
- 经过分析参数,只有account和password参数是通过加密生成的,其他几个参数都是写死或者从cookie获取即可;
- 该网站登录是有滑块验证码的,所以在获取滑块的接口上对_signature参数也进行了加密;
2.分析account与password加密参数
-
请求url:
https://sso.XXXXX.com/account_login/v2/ -
直接全局搜索url后面特征字段
/account_login/v2/即可非常快的找到对应的加密方法,如下图所示
- 继续搜索
ACCOUNT_LOGIN_URL
encryptParams翻译成中文就是加密参数,在这里打上断点验证一下
- 可以看到这里的
account和password即为加密前的内容 F9跟进去找到最后加密的方法
- 拷贝下来验证一下
function encrypt(e) {
var t, n = [];
if (void 0 === e)
return "";
t = function(e) {
for (var t, n = e.toString(), r = [], o = 0; o < n.length; o++)
0 <= (t = n.charCodeAt(o)) && t <= 127 ? r.push(t) : 128 <= t && t <= 2047 ? (r.push(192 | 31 & t >> 6),
r.push(128 | 63 & t)) : (2048 <= t && t <= 55295 || 57344 <= t && t <= 65535) && (r.push(224 | 15 & t >> 12),
r.push(128 | 63 & t >> 6),
r.push(128 | 63 & t));
for (var i = 0; i < r.length; i++)
r[i] &= 255;
return r
}(e);
for (var r = 0, o = t.length; r < o; ++r)
n.push((5 ^ t[r]).toString(16));
return n.join("")
};
3.分析_signature加密参数
- 全局搜索参数名
_signature,结果有两个,简单分析排除第一个,我们来分析第二个js
- 在该参数附近随便下两个断点调试看看结果,结果显示,在这之前已经完成了加密,所以我们得追踪
e.sent或者e.arg参数什么时候被赋值的 - 对该条件判断上下文分析;
- 简单分析后在
e.next=4条件里随意下断点看看e.sent或者e.arg参数是否有赋值; - 到这一步仍未进行赋值,所以很有可能在
Object(l.b)(t)里会有加密赋值的操作,F9跟进查看,继续是断点一步步调试 window.byted_acrawler.sign这个方法便是我们要找的加密方法
-
把该加密方法全部拷贝出来,然后这代码还不能正常运行,因为node.js环境是不存在window对象,所以要模拟出window对象,相关代码已上传至
GitHub,觉得有帮助可以给个star; -
Github:github.com/ZZhangQihan…