京东滑块分析

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

环境部分

const jsdom = require('jsdom');
const {JSDOM} = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`, {
    url: ''
});
window = dom.window;
XMLHttpRequest = window.XMLHttpRequest;
Storage=window.Storage
localStorage=window.localStorage
document = window.document;  //document对象:代表给定浏览器窗口中的HTML文档,

关键执行代码

function getJdeid() {
    m = y
    v = ""
    u = 99992
    b = _st['getSensorInfo'](devcInfo, "")
    w = {};
    w.si = jsid
    w.lang = s
// l=fp='8SMWKDn7NI2elX60'
    l = st
    w.tk = _l(i_RjUKT(i_FTYYY(i_Tkknm(g + i_ingrg(_C, jsid['length'], 4), jsid), a_ingrg(_C, l["length"], 4)) + l, a_ingrg(_C, "", 6)) + "" + JSON.stringify(m) + _k(x), u, v)
    w.ct = a_EFLCI(_l, i_Tkknm(i_Tkknm(i_HySvY(_k, i_PCmbJ(g, 19)), _C(jsid["length"], 4)), jsid) + b + g, u, v)
    w.version = 2
    w.client = "m"
    return w
}

function getVerify(new_track, jsid, st, fp,account) {
    t = {
        "ht": 179,
        "wt": 290,
        "bw": 50
    }
    t = JSON.stringify(t)
    c = jsid
    s = 1
    u = 99992
    devcInfo = d = _T(dddddddddddd)
    console.log(d)

    p = "m"
    console.log(t)
    v = ""
    t = encodeURI(t)
    g = Date.parse(new Date + "")
    clickTime = Date.now()
    touchTime = clickTime + getRandomNumber(3000, 4500)
    x = g % 41
    y = {}
    m = y
    b = _st['getSensorInfo'](d, "")
    w = {};
    w.si = jsid
    w.lang = s
    w.tk = _l(i_RjUKT(i_FTYYY(i_Tkknm(g + i_ingrg(_C, jsid['length'], 4), jsid), a_ingrg(_C, l["length"], 4)) + l, a_ingrg(_C, t.length, 6)) + t + JSON.stringify(m) + _k(x), u, v)
    w.ct = a_EFLCI(_l, i_Tkknm(i_Tkknm(i_HySvY(_k, i_PCmbJ(g, 19)), _C(jsid["length"], 4)), c) + b + g, u, v)
    w.version = 2
    w.client = "m"
// console.log(w)
    return w
}
function genUuid() {
    return (new Date).getTime() + "" + parseInt(2147483647 * Math.random())
}

function genHash(e) {
    var t, r = 1, i = 0;
    if (e)
        for (r = 0,
                 t = e.length - 1; t >= 0; t--)
            r = 0 !== (i = 266338304 & (r = (r << 6 & 268435455) + (i = e.charCodeAt(t)) + (i << 14))) ? r ^ i >> 21 : r;
    return r
}
function getWqmnx1() {
    e=(function(e, t, r) {
             p=[
    "QWYOREUOCDSIOHF)#U*HF&!(&)(H)RH)%",
    "HWYOREF)#U*Q)(H)RCDSHF&!(&)%UOIOH"
]
            for (var o = "", n = 0, i = 0; i < t.pick.length; i++) {
                var a = t.pick[i];
                n += Math.pow(2, a),
                o += e[a]
            }
            o += p[parseInt(r) - 1];
            for (var c = t.divisor, s = t.remainder, d = [r, n.toString().length, n, c, s], m = s; m < o.length; m += c)
                d.push(o[m]);
            return d.join("")
        }(n = [], function(e) {
            for (var t = [], r = 0; r < e; r++)
                t.push(r);
            var o = Math.floor(10 * Math.random());
            return o < 5 && (o += 5),
            {
                pick: t,
                divisor: o,
                remainder: Math.floor(Math.random() * o) % o
            }
        }(n.length), "01"))
            if (window.btoa)
                return window.btoa(e);
            for (var t, r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), o = [], n = 0; n < e.length; n += 3)
                3 === (t = e.substr(n, 3).split("").map(function(e) {
                    return e.charCodeAt()
                })).length ? o.push(r[63 & t[0] >>> 2], r[63 & (t[0] << 4 | t[1] >>> 4)], r[63 & (t[1] << 2 | t[2] >>> 6)], r[63 & t[2]]) : 2 === t.length ? o.push(r[63 & t[0] >>> 2], r[63 & (t[0] << 4 | t[1] >>> 4)], r[63 & t[1] << 2], "=") : 1 === t.length && o.push(r[63 & t[0] >>> 2], r[63 & t[0] << 4], "=", "=");
            return o.join("")
        }
function getJda_Jdb() {
    s = parseInt((new Date).getTime() / 1e3)
 i=genUuid()
e=t=s
r = genHash("jd.com")
l=c=1
    p="direct"
 jda=[r, i, e, t, s, c || 1].join(".")
    jdb=[r, l, i + "|" + c, s].join(".")
    jdc=r
    var I = [r, p || "direct", "-" || "-", 'none' || "none", '-' || "-", (new Date).getTime()].join("|");
    I=encodeURIComponent(I)
    return {'jda':jda,'jdb':jdb,'jdc':r,'jdv':I,"mba_muid":encodeURI([i].join(".")),'shshshfpx':encodeURIComponent(__0x1e511c()),"Wqmnx1":escape(getWqmnx1()),
    'jxsid':escape((new Date).getTime() + String(Math.random()).substr(2, 7)),"appCode":escape("ms0ca95114")}
}

结果

 

总结

1.出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来。 

### 回答1: 京东滑块验证码模拟登录是指通过编写PHP代码来模拟用户在京东网站登录时所遇到的滑块验证码验证过程。 首先,需要在PHP中使用curl库或者其他网络请求库来发送HTTP请求,模拟用户访问京东登录页面。在请求中包含必要的参数,如用户名和密码等。获得登录页面后,可以通过正则表达式或者其他方法提取出滑块验证码的相关信息,例如滑块图片的URL、滑块位置的坐标等。 然后,通过再次发送HTTP请求获取滑块图片,并将其保存。可以使用GD库或其他图片处理库在本地生成一张相同大小的背景图,并将滑块图片粘贴到背景图上。 接下来,需要通过OCR技术或者其他图像处理算法来识别滑块图片的位置。可能需要先对滑块图片进行降噪、二值化等预处理操作,然后使用图像识别算法找到滑块的位置。这个过程可能需要尝试不同的算法和参数来提高识别的准确度。 最后,将识别出的滑块位置信息作为参数,再次发送HTTP请求进行验证。如果验证通过,则模拟登录成功;否则需要重新进行滑块验证码的处理。 需要注意的是,京东滑块验证码的验证机制可能会不断更新和变化,所以以上方法只是一个基本的思路,具体实现可能需要根据京东的最新验证码机制进行调整和改进。此外,模拟登录有可能违反京东网站的使用规定,所以在实际应用过程中应该谨慎操作,并遵守相关法律和规定。 ### 回答2: 在使用PHP模拟京东滑块验证码登录时,我们需要以下步骤: 1. 获取登录页面:使用PHP的curl库发送GET请求,获取京东登录页面的HTML源代码。 2. 解析滑块验证码参数:从HTML源代码中解析滑块验证码的相关参数,例如:验证码图片URL、滑块位置等。 3. 下载验证码图片:使用curl库发送GET请求,下载验证码图片到本地。 4. 识别滑块拼图位置:使用图像处理库(如OpenCV)对下载的验证码图片进行处理,识别滑块拼图的位置。 5. 计算滑块移动距离:根据拼图位置计算滑块需要移动的距离。 6. 模拟滑块拖动动作:使用JavaScript动态生成一个模拟滑块滑动的脚本,并执行。 7. 处理登录验证:在第6步中,模拟滑块拖动动作后,可能需要处理滑块验证结果。可以通过检查返回的登录页面中是否包含登录成功的标志以确定是否登录成功。 8. 提交登录表单:如果登录成功的标志存在,说明滑块验证通过,我们可以使用PHP的curl库发送POST请求,提交登录表单中的用户名和密码等信息。 9. 处理登录结果:根据返回的登录结果,判断是否登录成功。如果登录成功,说明验证码模拟登录已经成功。 总之,通过以上步骤,我们可以使用PHP实现京东滑块验证码的模拟登录。这需要使用curl库获取页面,图像处理库识别验证码位置,生成JavaScript脚本模拟滑块拖动等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2766958292

wx a15018601872

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值