某瓜视频登录协议分析(一)

1,022 阅读2分钟

该文章仅供学习与参考,请勿用于商业用途,否则后果自负!

1.登录抓包

  • 经过分析参数,只有account和password参数是通过加密生成的,其他几个参数都是写死或者从cookie获取即可;
  • 该网站登录是有滑块验证码的,所以在获取滑块的接口上对_signature参数也进行了加密;

2.分析account与password加密参数

  • 请求url:https://sso.XXXXX.com/account_login/v2/

  • 直接全局搜索url后面特征字段/account_login/v2/即可非常快的找到对应的加密方法,如下图所示

  • 继续搜索ACCOUNT_LOGIN_URL

  • encryptParams翻译成中文就是加密参数,在这里打上断点验证一下

  • 可以看到这里的accountpassword即为加密前的内容
  • 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…

4.分析滑动验证协议