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(){};
相关推荐
Asum1ta33 分钟前
K8s 学习环境搭建:Python 与 PyCharm 开发环境配置指南
python·学习·kubernetes
知识汲取者35 分钟前
FastAPI 学习教程(写给想学 FastAPI 的 Java 工程师的)
python·学习·fastapi
飞Link1 小时前
动作方法中的分割与过度分割方法全解析(含代码实战与踩坑案例)
人工智能·python·算法·计算机视觉
小鹿的周先生1 小时前
第四章-SpringAI-函数调用&ToolCalling
开发语言·人工智能·python
方知我2 小时前
NumPy一小时速成
开发语言·python·numpy
IPdodo_2 小时前
静态 IP 访问异常排查:403/429 归因与迁移验收
服务器·网络·数据库·python·网络协议·php·性能测试
Zengs2 小时前
Python 脚本日志怎么分级落盘?排错时一次找准现场
python
baopixiaoz2 小时前
BeeQuant × BeeAgent:AI量化新范式
大数据·人工智能·python·区块链
IT毕设实战小研3 小时前
基于大数据的AI应用对就业与收入增长的区域差异分析及可视化
大数据·人工智能·python·随机森林·机器学习·课程设计
摆烂老大3 小时前
论文学习 | Expert Systems With Applications2026 | 可微分建模:S4D-HBV
python·学习·水文