Incapsula rbzid逆向分析

本文详细分析了一段JavaScript代码,涉及如何逆向处理自动发送GET请求的逻辑,包括参数加密(如SHA1)、随机字符串生成以及URL和headers的构造过程。作者通过debugger工具逐步追踪并揭示了关键变量的计算方法。
摘要由CSDN通过智能技术生成

此文章仅限学习使用. 如有侵权 请联系我删除. 谢谢.

开始今天愉快的分析

rbzid会自动请求domain/kramericaindustries.ac.lib.js执行一个js 自动去发送get请求

请求的headers会有一个x-zebra-********: 一段参数

这串东西就是今天我们要逆向分析的字段

那么直接用charles替换本地文件

之后在开头加入hook get请求代码 断住

// 保存原始的XMLHttpRequest.open方法
const originalXHROpen = XMLHttpRequest.prototype.open;

// 覆盖XMLHttpRequest的open方法
XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
    // 检查是否为GET请求
    if (method === 'GET') {
        debugger; // 当发出GET请求时触发
    }

    // 调用原始的open方法
    return originalXHROpen.apply(this, arguments);
};

成功进入debugger

这里的js我用了蔡老板星球里面的`代码结构调整`搞了下 如果需要学习js反混淆 可以加入蔡老板的星球

往上找看到e7参数里面已经有我们想要的东西了 且这个函数只接受了两个参数 那么继续往上找

直接分析这里的第一个参数 就是上面的x43

分析这段代码 单步跟进 T7[6] 的赋值

这里先将rbzns.seed字符后面加一个0

继续

这里我没解混淆.所以就在控制里面打出来这个参数是怎么来的

btoa(i7[7][s3S.l8(104)](Y7[18]))[s3S.w8(127)](/\u003d/g, s3S.w8(61))

那么就可以简化为

btoa(i7[7]).join(";$(hash);_xcalc(arguments.calle);").replace(/\=/g,"-")

直接分析i7[7]即可

i7[7]是一个5个长度的数组

开始分析第一个值 跟进去 发现是一串计算得来的数

先不管这一系列的计算 直接弯道超车 看返回值

这里我试着直接将整串代码丢进去chatgpt里面 进行分析得知有可能是sha1加密

二话不说直接验证 发现跟返回值是一样的 那么第一个值解决

第二个值固定是0

第三个值搜一下全局 Y7[7] 发现

Y7[7] = (new Date()[s3S.w8(132)]() * 123456789)[s3S.w8(54)]();

可以简化为

Y7[7] = (-480 * 123456789).toString()

第四个值固定值是"disabled"

第五个值其实就是最开始的window.rbzns.seed

至此 数组全部解决

继续分析headers的key和get请求的地址url的生成 根据debugger发现是这个b7[1]

那么整段代码拿出来

var e7 = [arguments];
                    e7[5] = P(8);
                    e7[2] = P(32);
                    e7[3] = {};
                    s3S.B7(18);
                    e7[7] = s3S.W2(18, 13, 6, 12);
                    e7[3][s3S.l8(e7[7]) + e7[5]] = e7[0][0];

                    function G5() {
                    }

                    console[s3S.w8(39)](s3S.w8(14), e7[3]);
                    1;
                    Y7[4](s3S.l8(63));
                    Y7[8][s3S.w8(124)](function () {
                        var b7 = [arguments];
                        b7[1] = {};
                        b7[1][s3S.l8(84)] = [s3S.w8(116), s3S.w8(101), e7[2]][s3S.l8(104)](s3S.l8(92));
                        b7[1][s3S.l8(91)] = e7[3];
                        s3S.n8S();
                        return b7[1];

通过debugger和分析;

得知url跟e7[2]有关

headers跟e7[5]有关 

那么这两个都是P函数生成的

看看P函数做了什么


比较简单 根据传参长度生成随机字符串的函数 期间使用charAt函数 

那么直接转成js代码

// 生成随机字符串的函数
function randomStr(length) {
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    let result = '';
    const charactersLength = characters.length;
    for (let i = 0; i < length; i++) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength));
    }
    return result;
}

那么一拼接 就得到最后的结果了

验证下 cookie 搞定.

代码就自己写了 不会提供成品 此分析比较简单.

在此谢谢cbb不不哥,挽风和蔡老板的星球.

接下来有空可以再带来incapsula的utmvc和reese84的分析.

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值