腾讯qq空间GET登陆JS分析

腾讯QQ空间作为腾讯的社交核心产品之一,在登陆的安全设置上没有用变态的技术,都是常规策略。可能是因为该产品内容上的价值对于用户而言重要,但是对于他人来说并不重要。

老规矩首先抓个包试试看看那登陆请求有哪些字段

image
u:2551513277@qq.comverifycode:!NNTpt_vcode_v1:0pt_verifysession_v1:e02e02eecdb805b45ce122cde11c229d62be175396694ebe18c4f39b3491e5f7845b10c499d60bc42ad9ff81768d860401fbf1871932aacdp:xeOyBOEajC3l2pBFTuB6EGzMpGaIMGpL5rOkK3s6qe3ExEc1QB8xZIojs2wFvNVIElBAAvEP5ap0kbLGmTDgkRWU0vPYTvM8mVbYpYcCsxc9DwJXbpIVNQk0a8R4fg4jdMiKKtvri4SsNXFjIgr5NMQb*3OaB06ynyg2Xd2jcEo0CxmUx-eoKSpSb6vzUbNrlJSuo1DtFHZDINXcGtnLxARgMy35Km7BzXrKgkNj2uuOoKD1aXd*Cx5pMpDxXbUtmTc1TAA5PI1qKUElnihIGeZ8M35F9r07dsB0M0D5a9T-QVXIBsYCr0N8ecUEkFCOC2zSZy0z1xsDMlyNdcBV9Q__pt_randsalt:2u1:https://qzs.qq.com/qzone/v5/loginsucc.html?para=izoneptredirect:0h:1t:1g:1from_ui:1ptlang:2052action:3-19-1548851060420js_ver:10291js_type:1login_sig:pt_uistyle:40aid:549000912daid:5

粗略分析我们就知道哪些字段比较难搞了,u是用户名、verifycode是类似验证码的东西、pt_verifysession_v1类似id的字符串、p就应该是密码了。

我们分析的重点在verifycode、pt_verifysession_v1、P三个字段了,然后再看post请求之前的请求,发现了一个有价值的get请求:

image

返回如下:

ptui_checkVC('0','!NNT','\x00\x00\x00\x00\x98\x15\x00\xbd','e02e02eecdb805b45ce122cde11c229d62be175396694ebe18c4f39b3491e5f7845b10c499d60bc42ad9ff81768d860401fbf1871932aacd','2')

很好,这个get请求已经返回verifycode、pt_verifysession_v1参数,那我们需要重点分析的是password的加密方式了。再看这个请求的参数:

image

其中appid是来自html源码中的,那就是时候获得这两个参数并没有太大问题。

继续看password,查找发出该请求的相应js位置

if ("login" == t) {            i.u = encodeURIComponent(pt.plogin.at_account),            i.verifycode = $("verifycode").value,            pt.plogin.needShowNewVc ? i.pt_vcode_v1 = 1 : i.pt_vcode_v1 = 0,            i.pt_verifysession_v1 = pt.plogin.pt_verifysession || $.cookie.get("verifysession");            var n = $("p").value;            pt.plogin.armSafeEdit.isSafe && (n = pt.plogin.armSafeEdit.safepwd),            i.p = $.Encryption.getEncryption(n, pt.plogin.salt, i.verifycode, pt.plogin.armSafeEdit.isSafe),            i.pt_randsalt = pt.plogin.isRandSalt || 0,            window.TDC && TDC.getInfo && TDC.getInfo().tokenid && (i.pt_jstoken = TDC.getInfo().tokenid)        }

p= $.Encryption.getEncryption(n, pt.plogin.salt, i.verifycode, pt.plogin.armSafeEdit.isSafe),其中n是输入的密码,pt.plogin.salts是特殊的字符串、i.verifycode是verifycode字段、pt.plogin.armSafeEdit.isSafe为空。

再看加密的函数

 $.Encryption = $pt.Encryption = function() {    function t(t) {        return e(t)    }    function e(t) {        return u(i(c(t), t.length * m))    }    function i(t, e) {        t[e >> 5] |= 128 << e % 32,        t[14 + (e + 64 >>> 9 << 4)] = e;        for (var i = 1732584193, n = -271733879, l = -1732584194, c = 271733878, u = 0; u < t.length; u += 16) {            var g = i              , d = n              , h = l              , f = c;            i = o(i, n, l, c, t[u + 0], 7, -680876936),            c = o(c, i, n, l, t[u + 1], 12, -389564586),            l = o(l, c, i, n, t[u + 2], 17, 606105819),            n = o(n, l, c, i, t[u + 3], 22, -1044525330),            i = o(i, n, l, c, t[u + 4], 7, -176418897),            c = o(c, i, n, l, t[u + 5], 12, 1200080426),            l = o(l, c, i, n, t[u + 6], 17, -1473231341),            n = o(n, l, c, i, t[u + 7], 22, -45705983),            i = o(i, n, l, c, t[u + 8], 7, 1770035416),            c = o(c, i, n, l, t[u + 9], 12, -1958414417),            l = o(l, c, i, n, t[u + 10], 17, -42063),            n = o(n, l, c, i, t[u + 11], 22, -1990404162),            i = o(i, n, l, c, t[u + 12], 7, 1804603682),            c = o(c, i, n, l, t[u + 13], 12, -40341101),            l = o(l, c, i, n, t[u + 14], 17, -1502002290),            n = o(n, l, c, i, t[u + 15], 22, 1236535329),            i = p(i, n, l, c, t[u + 1], 5, -165796510),            c = p(c, i, n, l, t[u + 6], 9, -1069501632),            l = p(l, c, i, n, t[u + 11], 14, 643717713),            n = p(n, l, c, i, t[u + 0], 20, -373897302),            i = p(i, n, l, c, t[u + 5], 5, -701558691),            c = p(c, i, n, l, t[u + 10], 9, 38016083),            l = p(l, c, i, n, t[u + 15], 14, -660478335),            n = p(n, l, c, i, t[u + 4], 20, -405537848),            i = p(i, n, l, c, t[u + 9], 5, 568446438),            c = p(c, i, n, l, t[u + 14], 9, -1019803690),            l = p(l, c, i, n, t[u + 3], 14, -187363961),            n = p(n, l, c, i, t[u + 8], 20, 1163531501),            i = p(i, n, l, c, t[u + 13], 5, -1444681467),            c = p(c, i, n, l, t[u + 2], 9, -51403784),            l = p(l, c, i, n, t[u + 7], 14, 1735328473),            n = p(n, l, c, i, t[u + 12], 20, -1926607734),            i = r(i, n, l, c, t[u + 5], 4, -378558),            c = r(c, i, n, l, t[u + 8], 11, -2022574463),            l = r(l, c, i, n, t[u + 11], 16, 1839030562),            n = r(n, l, c, i, t[u + 14], 23, -35309556),            i = r(i, n, l, c, t[u + 1], 4, -1530992060),            c = r(c, i, n, l, t[u + 4], 11, 1272893353),            l = r(l, c, i, n, t[u + 7], 16, -155497632),            n = r(n, l, c, i, t[u + 10], 23, -1094730640),            i = r(i, n, l, c, t[u + 13], 4, 681279174),            c = r(c, i, n, l, t[u + 0], 11, -358537222),            l = r(l, c, i, n, t[u + 3], 16, -722521979),            n = r(n, l, c, i, t[u + 6], 23, 76029189),            i = r(i, n, l, c, t[u + 9], 4, -640364487),            c = r(c, i, n, l, t[u + 12], 11, -421815835),            l = r(l, c, i, n, t[u + 15], 16, 530742520),            n = r(n, l, c, i, t[u + 2], 23, -995338651),            i = s(i, n, l, c, t[u + 0], 6, -198630844),            c = s(c, i, n, l, t[u + 7], 10, 1126891415),            l = s(l, c, i, n, t[u + 14], 15, -1416354905),            n = s(n, l, c, i, t[u + 5], 21, -57434055),            i = s(i, n, l, c, t[u + 12], 6, 1700485571),            c = s(c, i, n, l, t[u + 3], 10, -1894986606),            l = s(l, c, i, n, t[u + 10], 15, -1051523),            n = s(n, l, c, i, t[u + 1], 21, -2054922799),            i = s(i, n, l, c, t[u + 8], 6, 1873313359),            c = s(c, i, n, l, t[u + 15], 10, -30611744),            l = s(l, c, i, n, t[u + 6], 15, -1560198380),            n = s(n, l, c, i, t[u + 13], 21, 1309151649),            i = s(i, n, l, c, t[u + 4], 6, -145523070),            c = s(c, i, n, l, t[u + 11], 10, -1120210379),            l = s(l, c, i, n, t[u + 2], 15, 718787259),            n = s(n, l, c, i, t[u + 9], 21, -343485551),            i = a(i, g),            n = a(n, d),            l = a(l, h),            c = a(c, f)        }        return 16 == v ? Array(n, l) : Array(i, n, l, c)    }    function n(t, e, i, n, o, p) {        return a(l(a(a(e, t), a(n, p)), o), i)    }    function o(t, e, i, o, p, r, s) {        return n(e & i | ~e & o, t, e, p, r, s)    }    function p(t, e, i, o, p, r, s) {        return n(e & o | i & ~o, t, e, p, r, s)    }    function r(t, e, i, o, p, r, s) {        return n(e ^ i ^ o, t, e, p, r, s)    }    function s(t, e, i, o, p, r, s) {        return n(i ^ (e | ~o), t, e, p, r, s)    }    function a(t, e) {        var i = (65535 & t) + (65535 & e);        return (t >> 16) + (e >> 16) + (i >> 16) << 16 | 65535 & i    }    function l(t, e) {        return t << e | t >>> 32 - e    }    function c(t) {        for (var e = Array(), i = (1 << m) - 1, n = 0; n < t.length * m; n += m)            e[n >> 5] |= (t.charCodeAt(n / m) & i) << n % 32;        return e    }    function u(t) {        for (var e = _ ? "0123456789ABCDEF" : "0123456789abcdef", i = "", n = 0; n < 4 * t.length; n++)            i += e.charAt(t[n >> 2] >> n % 4 * 8 + 4 & 15) + e.charAt(t[n >> 2] >> n % 4 * 8 & 15);        return i    }    function g(t) {        for (var e = [], i = 0; i < t.length; i += 2)            e.push(String.fromCharCode(parseInt(t.substr(i, 2), 16)));        return e.join("")    }    function d(t, e) {        if (!(Math.random() > (e || 1)))            try {                var i = location.protocol + "//ui.ptlogin2.qq.com/cgi-bin/report?id=" + t;                document.createElement("img").src = i            } catch (t) {}    }    function h(e, i, n, o) {        n = n || "",        e = e || "";        for (var p = o ? e : t(e), r = g(p), s = t(r + i), a = TEA.strToBytes(n.toUpperCase(), !0), l = Number(a.length / 2).toString(16); l.length < 4; )            l = "0" + l;        TEA.initkey(s);        var c = TEA.encrypt(p + TEA.strToBytes(i) + l + a);        TEA.initkey("");        for (var u = Number(c.length / 2).toString(16); u.length < 4; )            u = "0" + u;        var h = $pt.RSA.rsa_encrypt(g(u + c));        return setTimeout(function() {            d(488358, 1)        }, 0),        btoa(g(h)).replace(/[\/\+=]/g, function(t) {            return {                "/": "-",                "+": "*",                "=": "_"            }[t]        })    }    function f(e, i, n) {        var o = n ? e : t(e)          , p = o + i.toUpperCase();        return $.RSA.rsa_encrypt(p)    }    var _ = 1      , m = 8      , v = 32;    return {        getEncryption: h,        getRSAEncryption: f,        md5: t    }}(),

主函数是h(e,i,n,o),当然该函数内部也调用了其他位置的函数,需要整理到一个js文件中,没有发现标准的加密函数名那么应该是自定义的加密函数,其中有个特殊字符参数" �½"需要注意。

以上是对该过程的简单分析。


ID:Python之战

|作|者|公(zhong)号:python之战

专注Python,专注于网络爬虫、RPA的学习-践行-总结

喜欢研究技术瓶颈并分享,欢迎围观,共同学习。

独学而无友,则孤陋而寡闻!


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容