【js逆向入门】图灵爬虫练习平台第九题

题九:webpack调试

该题使用了webpack技术打包并配有轻度OB混淆、适合模块化扣JavaScript代码练习

这个采用了基础的webpack调试

打开开发者模式开始调试,首先就是复制curl,然后到网站进行请求是什么加密

可以看到加密的'm': '1f284f2cc0aa0c4621d8cee0fb7fcd6a51661bd9', 'tt': 'MTc0NDQzNjIyNDU4Mg==',

然后就是hook一下m

var code = function(){
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function (method, url, async){
    if (url.indexOf("m")>-1){
        debugger;
    }
    return open.apply(this, arguments);
};
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

 

然后就会发现断住了,然后往上找

到这里就会发现,m的值实在这里生成的,很明显这里经过了混淆,发现这里没有显示m的生成位置,往上找,你就会发现

这里就有一个n.data.m = t.MqmaW(c, t[r(1881)](t[r(489)], f)),还有一个n[r(1939)].tt = btoa(f);,可以确定了,这里就是m还有tt的加密位置

这里用的是case,肯定是经过排序的,在上面找到排序的,把代码扣出来,

function main123() {
    let time = (new Date)['getTime']().toString();
    let m = c('9527' + time);
    let tt = btoa(time);
    return {
        'f': time,
        'm': m,
        'tt': tt
    }
}

console.log(main123());

这里面缺的就是这个c函数,打上断点,调试一下,就找到了这个 c函数

function c(n) {
                var r = i
                  , t = {
                    RjdKj: function(n, r) {
                        return n % r
                    },
                    DBjOO: function(n, r) {
                        return n + r
                    },
                    BByPb: function(n, r) {
                        return n ^ r
                    },
                    KIZHi: function(n, r) {
                        return n | r
                    },
                    HAGBT: function(n, r) {
                        return n >>> r
                    },
                    pUtQl: function(n, r) {
                        return n < r
                    },
                    UwUnt: function(n, r) {
                        return n * r
                    },
                    WdUAe: function(n, r) {
                        return n + r
                    },
                    VDcvU: "debu",
                    PwEDm: r(2874),
                    KWaPS: r(1672),
                    BjniW: r(488),
                    ztPZi: function(n, r) {
                        return n === r
                    },
                    RaGFx: r(894),
                    bnqLR: r(2645)
                };
                if (n) {
                    if (t[r(2257)] !== t[r(697)])
                        return dd.aa[r(2897)](n, "xxxooo")[r(1049)]();
                    var u = _0x17006a[t[r(2743)](t[r(1811)](_0x219937, 4), 5)]
                      , e = _0x388b65[t[r(2743)](_0x416ac4 + 1, 5)]
                      , c = e[r(2756)]
                      , f = e[r(487)];
                    for (_0x1e7dc0 = t[r(2767)](u[r(2756)], t.KIZHi(c << 1, f >>> 31)),
                    _0x4d8156 = u[r(487)] ^ t.KIZHi(f << 1, t.HAGBT(c, 31)),
                    _0x680b88 = 0; t[r(2417)](_0x2a74ec, 5); _0xba8375++)
                        (_0x1c98da = _0x410975[t[r(1811)](_0x106157, t[r(1454)](5, _0x94eeb7))])[r(2756)] ^= _0x336535,
                        _0x26218e[r(487)] ^= _0x2ba16c
                } else {
                    if (t.ztPZi(t[r(1938)], t.RaGFx))
                        return t[r(2406)];
                    (function() {
                        return !1
                    }
                    )[r(2726)](lnDKWR[r(1703)](lnDKWR[r(882)], "gger"))[r(2173)](lnDKWR[r(2933)])
                }
            }

然后就是把他解一下,这里就不解了,解完之后

function c(n) {
    if (n) {
        return dd.aa.HmacSHA1(n, "xxxooo").toString();
    }
}

发现没有dd.aa,全局搜索一下

 dd = {
                aa: CryptoJS
            }

然后就全部解完了

const CryptoJS = require('crypto-js');

function c(n) {
    if (n) {
        return CryptoJS.HmacSHA1(n, "xxxooo").toString();
    }
}


function main123() {
    let time = (new Date)['getTime']().toString();
    let m = c('9527' + time);
    let tt = btoa(time);
    return {
        'f': time,
        'm': m,
        'tt': tt
    }
}

console.log(main123());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值