Web Spider 某渣渣企业平台 表单参数逆向 Webpack

文章目录

知识点介绍

  • 协议头参数逆向
  • 表单参数逆向
  • Webpack扣代码调试技巧,nodejs调试Webpack打包代码的bug

一、login表单参数epass

1.1 逆向分析

1、POST https://www.qcc.com/api/auth/pass-login;

2、下面是login表单需要逆向出来的epass参数;

3、根据url的部分后缀在资源面板下一个XHR断点,以便堆栈跟值;

4、重新发起一个login请求,让XHR断点断住请求,可以发现数据已经全部生成完毕了,下面需要继续通过堆栈来跟值;

5、 epass: o.default.encrypt(a, "qcc")来到了epass参数加密处,继续跟进去,看看里面的具体加密代码;

6、可以看到o是由[t, n(251115), n(211163)]创建出来的,然后调用了o.default.encrypt(e, t).toString()加密方法;

7、在o = [t, n(251115), n(211163)]打下断点,进入至n(251115)看看,重点是mian主文件标红的方法体(webpack加载器);

8、如何扣下webpack的代码,方法1:复制main主文件的全部代码,然后继续跟入mian主文件需要调用的所有代码文件中,复制该文件全部代码,main.f571e618.js+vendor.76803501.js,共14w行代码;

9、如何扣下webpack的代码,方法2:复制main主文件的全部代码,然后继续跟入mian主文件需要调用的任意代码文件中,在控制台打印一个关键词webpackChunkpc_web,该关键词在不同的网站可能会发生变化,一般前面都包含webpack

10、方法1复杂点需要去调试跟入,不一定能解决问题,方法2比较稳但是代码量比较多,下面带着两个源码文件(main.f571e618.js+vendor.76803501.js)中的14w行代码去浏览器调试;

javascript 复制代码
window = this;  // 现在头部定义一个window
// 通过这段代码找到加载器 return r[e].call(a.exports, a, a.exports, d),
// 下边是加载器的代码,需要将该方法导出,window.xiaozhou = d;
function d(e) {
    var t = l[e];
    if (void 0 !== t)
        return t.exports;
    var a = l[e] = {
        id: e,
        loaded: !1,
        exports: {}
    };
    return r[e].call(a.exports, a, a.exports, d),
    a.loaded = !0,
    a.exports
}
window.xiaozhou = d;  // 这行代码是核心,导出

11、调试成功,创建对象,调用加密方法;

12、其实到了上面这一步还得脱离浏览器环境中调试,这里我推荐fiddler工具加入编程猫的插件,这里调试报错了,需要把self改成this;

13、代码修改好了,加载成功,调用加密方法,其实到了这一步除了代码量有点大其他的都到位了;

14、下面我说一下如何压缩代码,需要增加在加载器方法体中增加一条代码, window.xiaozhou_code += "\"" + e + "\":" + r[e] + ",";

javascript 复制代码
function d(e) {
    var t = l[e];
    if (void 0 !== t) return t.exports;
    var a = l[e] = {
        id: e,
        loaded: !1,
        exports: {}
    };
    window.xiaozhou_code += "\"" + e + "\":" + r[e] + ",";  // 注意这条代码,其实就是把方法体以字符串的形式累加起来;
    return r[e].call(a.exports, a, a.exports, d),
    a.loaded = !0,
    a.exports
}
window.xiaozhou = d;

15、添加好了就在fiddler的编程猫工具中去打印(window.xiaozhou_code)输出,复制打印出来的代码;

16、压缩(累加了调用到的代码),将webpack的子包7w行代码压缩了1k行,并且同样可以运行成功,这里推荐一个工具(Notepad++)分析代码用;

1.2 Webpack逆向注意事项

二、滑块验证&文字点选验证参数w

2.1 逆向分析

1、GET https://gcaptcha4.geetest.com/verify

2、下面是验证时提交的参数,除了w参数,其他的参数都能通过请求url(https://gcaptcha4.geetest.com/load)得到;

3、由于不是Fetch/XHR请求,所以不能下XHR断点,我这边通过启动器进入代码中下断点进行堆栈跟值;

4、通过堆栈跟值,来到了参数加密处;

5、核心加密代码就是下面这几行

javascript 复制代码
var s = (0, d[$_DGAHz(186)])();
var u = i[a][$_DGAHz(1243)][$_DGAIj(1288)](s);
var c = i[a][$_DGAIj(1260)][$_DGAHz(1288)](e, s);
var w = (0, d[$_DGAIj(130)])(c) + u;

6、接下来就是把当前文件的所有代码2w行扣下来,然后再浏览器里面调试运行,把需要创建的对象导出来即可;

javascript 复制代码
window = this;  // 现在顶部创建一个window对象
window.xiaozhou_n = r;  // 在184行左右添加此代码
window.xiaozhou_s = s;  // 在10932行左右添加此代码

// 最后自定义一个方法,创建导出的对象,然后调用加密方法
function get_w(){

    var e = '{"passtime":2700,"userresponse":[[4598,5208],[2747,1830],[1218,5691]],"device_id":"05c041505610c5f2ed1270b81ef83af6","lot_number":"a6c174b9470943fc9b6811144487f420","pow_msg":"1|0|md5|2023-07-29T13:38:42.520461+08:00|8daf8b2d78f74aea6a77c0d10da77d41|a6c174b9470943fc9b6811144487f420||10e9da824855c9e4","pow_sign":"3a768ce0d0d0608e716f9e5280f551da","geetest":"captcha","lang":"zh","ep":"123","uzfw":"433775853","yeg6":"d6w9","em":{"ph":0,"cp":0,"ek":"11","wd":1,"nt":0,"si":0,"sc":0}}';
    
    var h = window.xiaozhou_s(window.xiaozhou_n(33));
    var l = window.xiaozhou_s(window.xiaozhou_n(34));
    var d = window.xiaozhou_n(0);
    var i = {
        "1": {
            "symmetrical": h['default'],
            "asymmetric": new l["default"]()
        },
    };

    var s = (0, d["guid"])();
    var u = i['1']['asymmetric']["encrypt"](s);
    var c = i['1']['symmetrical']["encrypt"](e, s);
    var w = (0, d["arrayToHex"])(c) + u;
    console.log(w);
    return w;
}

7、在浏览器调试运行成功后,还得在无浏览器环境中调试成功,这里推荐fiddler插入编程猫的插件;

8、这里说一次,调试的注意事项

  • 如果无环境中调试出现报错,说某个属性不存在,可以根据报错的代码位置去浏览器环境定位打断点,查看浏览器环境给的属性是什么,然后复制浏览器的值去补环境;
  • 如果无环境中调试出现比较复杂的值,可以选择赋值一个{},或者把该代码删掉;
  • 补环境需要耐心和时间,这个2w行的代码大概需要补10处的环境代码,有耐心就能调试成功;
javascript 复制代码
window = this;

document = {'documentElement': ""}
location = {'protocol': "https:"}
navigator = {"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"}
window.document = {"createElement": function(a){return "<canvas></canvas>"}}
i = s[$_IBIm(310)] || s[$_IBIm(273)]($_IBIm(310))[0];  //  大概1850行,改为 i = "";
s && $_DEGHh(724)in s[$_DEGHh(115)]($_DEGIw(443)) ? function p() {  // 大概10470行,改为 s && false ? function p() {
var ue = setTimeout  // 大概在9854行, 改成var ue = function(){};
相关推荐
玫幽倩1 小时前
2026聚合獬豸杯决赛wp(手机取证)
python·电子取证·misc·取证·聚合·手机取证·獬豸杯
FlyWIHTSKY1 小时前
在智能体系统中,什么是多模态,举例详细说明
人工智能·python·langchain
zzzll11113 小时前
Loop Engineering:循环工程的原理、实践与应用
java·数据库·python
刘新洲3 小时前
别再只做会聊天的 Agent:我用 1 天把工具调用做成了可验证、可评测的工程系统
人工智能·python·openai
码云骑士3 小时前
102-向量数据增删改查-增量更新-过期策略-向量漂移重索引
python
Molecular_Chat3 小时前
Biotin SNA 生物素偶联凝集素结合特异性、生物素标记效率定量表征研究
javascript·python
WILLF3 小时前
Python vs JavaScript 异常处理对比
前端·python
问天_观心4 小时前
python之uv库的学习
开发语言·python