本文档中的信息仅用于学术研究和交流学习之目的,不涉及任何商业或非法用途。我们已对可能涉及的敏感信息,如抓包数据、特定网址、数据接口等,进行了必要的脱敏处理,以确保信息安全。任何未经授权的转载或修改后的二次传播均被严格禁止。

若擅自使用本文所述技术而引发的任何不良后果或意外,本文作者不承担任何责任。若认为本文内容涉及侵权,请通过公众号【小马哥逆向】与我们取得联系,我们将立即进行处理。感谢您的理解和配合。

网站:aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0=
字段:dlnfo.sessionld,info,responseld,data
加密方式:AES

滑块部分我们通过滑动产生的接口为解析入口
image.png
如图:data,dlnfo.sessionld,responseld都是加密字段
其中我们先对值进行搜索
sessionld是在页面源码就有的值
image.png

其中
responseld是在getInfoTp中得到
image.png

我们先去逆向getInfoTp接口
我们先处理字符dlnfo,进行搜索处理,
发现都是在一个js文件中,共四处,直接全部下断点,进行测试,清除cookie,刷新页面
image.png
断点信息得到_0x9yl[67]是AESEncrypt
image.png
,基本确认加密是AES,并且(0, _nRa)()方法执行后是,可以写成固定的;_wwj[_0x9yl[64]]就是sessionIdimage.png

AESEncrypt = function(_Ala, _hly) {

        _hly = _hly['split']('')['reduce'](function(_V3Y, _cwX, _G3W) {
            if (8 * 564 << 5 > 0)
                return _G3W % 2 == 0 ? _V3Y + '' : _V3Y + _cwX;

        }, ''),
        _hly = CryptoJS.enc.Utf8.parse(_hly),
        _Ala = 'string'  == typeof _Ala ? _Ala : JSON['stringify'](_Ala),
        _Ala = CryptoJS.AES['encrypt'](_Ala, _hly, {
            iv: _hly,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        }),
        _hly = _cHG[_0x9yl[108]](_Ala[_0x9yl[169]]);
    if (0 * (3 >> 2 > 0) + (405 % 8 / 7 <= 1))
        return (0,
        encodeURIComponent)(_hly);
    else {
        var _0xjv1mra = {
            _0xq88qhs: function(_0xmvvmdh, _0x6r4ljl) {
                return _0xmvvmdh | _0x6r4ljl;
            }
        };
        var _0xy0px = _0xjv1mra._0xq88qhs(409 << 532, 52);
    }
}

我们对关键代码进行处理,例如:iv,mode,padding
然后将函数放在标准算法继续计算,如果结果一样,那么就是标准算法,我们就得到了代码;如不是那就继续扣
得到responseId

var CryptoJS = require('crypto-js')

function AESEncrypt(_Ala, _hly) {

        _hly = _hly['split']('')['reduce'](function(_V3Y, _cwX, _G3W) {
            if (8 * 564 << 5 > 0)
                return _G3W % 2 == 0 ? _V3Y + '' : _V3Y + _cwX;

        }, ''),
        _hly = CryptoJS.enc.Utf8.parse(_hly),
        _Ala = 'string'  == typeof _Ala ? _Ala : JSON['stringify'](_Ala),
        _Ala = CryptoJS.AES['encrypt'](_Ala, _hly, {
            iv: _hly,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        return encodeURIComponent(_Ala.toString())


}

function u() {
    return {
        "sdkv": "3.0.1",
        "busurl": "https://www.anjuke.com/captcha-verify/?callback=shield&from=antispam",
        "useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
        "clienttype": "1"
    }
}

function getDInfo(sessionId){
    return AESEncrypt(u(), sessionId)
}

// 测试样例
var sessionId = "69035526a9094716a54f56088f114ebc"
console.log(getDInfo(sessionId))

data传值是在_5Fj,进行跟栈
image.png
得到_5Fj,轨迹,sessionId进行AES加密
image.png
_zTb有三个值组成x是水平滑动距离,track轨迹里分别为x,y,时间间隔,p为定值
image.png
那么我们伪造一个轨迹就可以了。

结果:

本文由mdnice多平台发布


小马哥逆向
1 声望1 粉丝