豆瓣逆向登录【补环境协议逆向某讯验证码】(一)登录流程

389 阅读3分钟

 逆向网址

aHR0cHM6Ly9hcHAuZGlhbmRpYW4uY29tL3JhbmsvYW5kcm9pZA==

登录流程分析

首先我们进入指定的网址中,打开开发者工具并刷新网页,得到如下页面

​编辑

接下来,我们需要把浏览器的所有应用程序信息给清除掉(主要是cookie)

​编辑

随后我们点击登录(注意切换到账号密码登录)

​编辑

第一步:请求basic接口,返回腾讯验证码的接口参数appId

携带的参数为redir:网址,name:账户,password:密码

​编辑

响应体如下图所示,其中tc_app_id是我们请求下一个prehandle接口的参数

​编辑

第二步:请求prehandle接口,返回验证码的详细信息

​编辑

具体参数的含义:

sess:验证码错误第二次验证码的信息

tdc_path:注册window.TDC对象的立即执行函数的url地址

prefix:最终请求powAnswer参数的nonce和target

md5:最终请求powAnswer参数的nonce和target

登录流程中该接口返回的最需要注意的参数如上

第三步:请求tdc.js接口,返回注册window.TDC对象的立即执行函数

​编辑

该函数笔者采用补环境的方法执行于node中

第四步:通过注册的window.TDC函数获取破解腾讯验证码的参数collect,esk,tlg

具体调用方法如下

window.TDC.setData({
    "ft": "q__7Pf__H"
});
function getCollectAndTlg() {
    collect = decodeURIComponent(window.TDC.getData(!0))
    return {
        collect: collect,
        tlg: collect.length
    }
};
function getEsk() {
    return window.TDC.getInfo().info
}
function getAns(coordinates) {
    return JSON.stringify([
        {
            "elem_id": 1,
            "type": "DynAnswerType_POS",
            "data": coordinates
        }
    ])
}


window.TDC.setData({
    "ft": "q__7Pf__H"
});
function getCollectAndTlg() {
    collect = decodeURIComponent(window.TDC.getData(!0))
    return {
        collect: collect,
        tlg: collect.length
    }
};
function getEsk() {
    return window.TDC.getInfo().info
}
function getAns(coordinates) {
    return JSON.stringify([
        {
            "elem_id": 1,
            "type": "DynAnswerType_POS",
            "data": coordinates
        }
    ])
}

第五步:前端powAnswer和calTime参数的加密

第六步:缺口验证码识别

本次采用captcha_recognizer.recognizer的Recognizer函数对缺口验证码识别,缩放比例大致为

data = str(round(box[0] * 374 / 397.5)) + "," + str(round(box[1] * 107 / 129))

第七步:ans参数的生成,其中coordinates是验证码的缺口位置

function getAns(coordinates) {
    return JSON.stringify([
        {
            "elem_id": 1,
            "type": "DynAnswerType_POS",
            "data": coordinates
        }
    ])
}

第八步:携带collect以及如下参数请求turing.captcha.qcloud.com/cap_union_n…,得到返回的ticket参数以及randstr参数

​编辑

第九步:携带ticket参数以及randstr参数重新请求basic接口,即可完成登录

​编辑

​编辑

上述即是豆瓣逆向登录的具体流程,接下来的几天时间我将一步一步带着大家如何补环境,如何逆向powAnswer参数以及calTime参数,实现上述流程

所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用,并严格遵守相关法律法规,如《中华人民共和国网络安全法》。作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。

文章中涉及的程序或方法仅供安全研究与教学之用,严禁用于非法目的,如未经授权的入侵、破解等。若读者将信息用于其他非法用途,由读者承担全部法律及连带责任,相关方不承担任何责任。

未经授权使用文章中的技术资料对任何计算机系统进行非法操作,由此产生的直接或间接后果和损失,均由使用者本人负责。