跟的b站up学逆向——cookie加密

学习地址来源详解香港航空cookie加密_哔哩哔哩_bilibili

介绍

6818f62f3fcc419da4e6ba8c07327859.jpeg

我们要破解的是acw_sc_v2这个的cookie

这个cookie由两次加载进行

 

077709b689864328b5aefc8412cef4d5.jpeg

先是有第一个网址生成cookie,再把cookie传给第二个网页文件,用setcookie后再进行重加载

  • setCookie()函数设置一个名为"acw_sc__v2"的cookie,值就是传入的参数x。cookie主要用于在客户端存储不同请求之间的状态。
  • document.location.reload()函数会完全重新加载/刷新整个页面。它会触发新的服务器请求来加载一份新的页面。
  • 先设置cookie,然后重新加载页面,可以保证cookie值在后续请求中一直被携带发送给服务器。
  • 这种设置cookie值然后刷新页面的模式,用于存储某个客户端状态/值,并且在页面刷新后也能保留这个值。
  • 一些常见用途包括:重置/更新一些UI状态,刷新页面后触发UI变化,在页面加载之间传递数据而不是用URL参数。
  • 传入的x参数值很可能会在后续页面加载中被服务器或客户端代码使用,来实现函数重载原本意图的行为。

总之,它先通过cookie在客户端持久保存一个值,然后刷新页面,这样该值在下一个页面请求中就能包含并使用。实现了值在页面重载后也能保存和使用的效果。

分析

这两个网址返回的都是js代码,是用于生成cookie的,不能够直接看到,要通过断点调试找到规律,

7a27c69854e349af89cd2f4740555393.jpeg

发现在执行下一步的时候,进入preocss这个文件,里面有函数

48e2316686e0411e9d014efb75c66036.png

用了function reload(x),并且设置了setcookie为acw  为x

那么我们就通过堆栈的调用寻找到了

effaaec1064744b1855aab5dabaf4535.png

原来是传入了arg2.,那么arg2就是x,就是cookie,在通过堆栈查找

48a216def098481f88ddd03f421b722b.png

查找到了var _0x23a392 = arg1[_0x55f3('0x19', '\x50\x67\x35\x34')]();
            arg2 = _0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')](_0x5e8b26);
            setTimeout('\x72\x65\x6c\x6f\x61\x64\x28\x61\x72\x67\x32\x29', 0x2);

并且有个setimeout \x72\x65\x6c.....往控制台一打,是reload(arg2)

 

 

64218ff21cd045e19c2bab5102f76f9d.png

构建代码

  String[_0x55f3('0x5', '\x6e\x5d\x66\x52')][_0x55f3('0x6', '\x50\x67\x35\x34')] = function(_0x4e08d8) {
                var _0x5a5d3b = '';
                for (var _0xe89588 = 0x0; _0xe89588 < this[_0x55f3('0x8', '\x29\x68\x52\x63')] && _0xe89588 < _0x4e08d8[_0x55f3('0xa', '\x6a\x45\x26\x5e')]; _0xe89588 += 0x2) {
                    var _0x401af1 = parseInt(this[_0x55f3('0xb', '\x56\x32\x4b\x45')](_0xe89588, _0xe89588 + 0x2), 0x10);
                    var _0x105f59 = parseInt(_0x4e08d8[_0x55f3('0xd', '\x58\x4d\x57\x5e')](_0xe89588, _0xe89588 + 0x2), 0x10);
                    var _0x189e2c = (_0x401af1 ^ _0x105f59)[_0x55f3('0xf', '\x57\x31\x46\x45')](0x10);
                    if (_0x189e2c[_0x55f3('0x11', '\x4d\x47\x72\x76')] == 0x1) {
                        _0x189e2c = '\x30' + _0x189e2c;
                    }
                    _0x5a5d3b += _0x189e2c;
                }
                return _0x5a5d3b;
            }
            ;


_0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')]

  String['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65'][_0x55f3('0x14', '\x5a\x2a\x44\x4d')] = function() {
                var _0x4b082b = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19, 0xd, 0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c, 0x22, 0x25, 0xc, 0x24];
                var _0x4da0dc = [];
                var _0x12605e = '';
                for (var _0x20a7bf = 0x0; _0x20a7bf < this['\x6c\x65\x6e\x67\x74\x68']; _0x20a7bf++) {
                    var _0x385ee3 = this[_0x20a7bf];
                    for (var _0x217721 = 0x0; _0x217721 < _0x4b082b[_0x55f3('0x16', '\x61\x48\x2a\x4e')]; _0x217721++) {
                        if (_0x4b082b[_0x217721] == _0x20a7bf + 0x1) {
                            _0x4da0dc[_0x217721] = _0x385ee3;
                        }
                    }
                }
                _0x12605e = _0x4da0dc['\x6a\x6f\x69\x6e']('');
                return _0x12605e;
            }
            ;
            var _0x23a392 = arg1[_0x55f3('0x19', '\x50\x67\x35\x34')]();
            arg2 = _0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')](_0x5e8b26);
            setTimeout('\x72\x65\x6c\x6f\x61\x64\x28\x61\x72\x67\x32\x29', 0x2);
        };

['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']
String['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65'][_0x55f3('0x14', '\x5a\x2a\x44\x4d')]
arg1[_0x55f3('0x19', '\x50\x67\x35\x34')]
_0x55f3('0x19', '\x50\x67\x35\x34')
    var _0x23a392 = arg1[_0x55f3('0x19', '\x50\x67\x35\x34')]();
            arg2 = _0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')](_0x5e8b26);
            setTimeout('\x72\x65\x6c\x6f\x61\x64\x28\x61\x72\x67\x32\x29', 0x2);

arg2是通过这些生成的,然后我们就能够用python模拟这些代码。就能明白arg2的生成规律了

总结

cookie中的acw是由x传入setcookie后获得,x是有arg2获得。两个网页返回两端js代码

 

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值