鱼C论坛

 找回密码
 立即注册
查看: 6158|回复: 29

[已解决]爬虫返回状态码521

[复制链接]
发表于 2020-11-18 22:21:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这问题卡我一周了朋友们,救命啊!!!!!
网页就  https://www.yidaiyilu.gov.cn/xwzx/gnxw/87373.htm  这个网页
然后老规矩,上requests
i
  1. mport requests

  2. url = "https://www.yidaiyilu.gov.cn/xwzx/gnxw/87373.htm"
  3. res = requests.get(url)
  4. print(res.status_code)   #这里返回521


  5. print(res.text)   
  6. ##################
  7. <script>document.cookie=('_')+('_')+('j')+('s')+('l')+('_')+('c')+('l')+('e')+('a')+('r')+('a')+('n')+('c')+('e')+('_')+('s')+('=')+(-~[]+'')+(3+3+'')+(~~[]+'')+((1+[0])/[2]+'')+(3+4+'')+(~~{}+'')+(7+'')+(2+4+'')+(1+4+'')+(([2]+0>>2)+'')+('.')+(2+3+'')+(([2]+0>>2)+'')+(3+3+'')+('|')+('-')+(-~false+'')+('|')+('u')+('g')+('D')+('L')+('x')+('A')+('W')+('M')+('l')+('h')+('q')+((1<<3)+'')+('Z')+('g')+('s')+('%')+(2+'')+('B')+('D')+('f')+(-~[7]+'')+('r')+(-~1+'')+('J')+('z')+('R')+('f')+('C')+('s')+('%')+((2^1)+'')+('D')+(';')+('m')+('a')+('x')+('-')+('a')+('g')+('e')+('=')+(3+'')+(-~[5]+'')+(~~[]+'')+((+false)+'')+(';')+('p')+('a')+('t')+('h')+('=')+('/');location.href=location.pathname+location.search</script>
复制代码


网上搜出来的结果都是带var 带function的,我这返回的是啥???
这可咋整???(另外,selenium也试过了,没成功,难受,想哭)
最佳答案
2020-11-19 17:03:27
闲来无事分析了一下,这个cookie生成方式不难,从浏览器分析来看,总共进行了三次请求,前两次都是为了生成cookie,最后一次才是正确响应:
1、第一次响应得到一段js代码,这段js代码执行后为浏览器添加了一个cookie;
  1. <script>document.cookie=('_')+('_')+('j')+('s')+('l')+('_')+('c')+('l')+('e')+('a')+('r')+('a')+('n')+('c')+('e')+('_')+('s')+('=')+(-~false+'')+([2]*(3)+'')+(~~''+'')+(([2]+0>>2)+'')+(-~[6]+'')+((1+[2])/[2]+'')+(([2]+0>>2)+'')+(1+1+'')+((2^1)+'')+(-~[7]+'')+('.')+([2]*(3)+'')+(-~0+'')+(1+3+'')+('|')+('-')+((+true)+'')+('|')+('w')+('Q')+('z')+('u')+(-~false+'')+('M')+('i')+('b')+('l')+('V')+('B')+(4+5+'')+('e')+('K')+('b')+('%')+(1+1+'')+('B')+('V')+('o')+('J')+('B')+('y')+('A')+('Q')+('A')+((2)*[2]+'')+('h')+((1<<2)+'')+('%')+((1|2)+'')+('D')+(';')+('m')+('a')+('x')+('-')+('a')+('g')+('e')+('=')+(-~[2]+'')+(-~[5]+'')+(~~[]+'')+(~~{}+'')+(';')+('p')+('a')+('t')+('h')+('=')+('/');location.href=location.pathname+location.search</script>
复制代码

分析及实现:利用正则将js代码取出,再利用execjs模块执行这段代码,得到一段名为__jsl_clearance_s的cookie(这个不是最终cookie值),同时获取该请求的set-cookie,作为下次请求附带使用
  1. # 获取cookie参数jsluid
  2.     jsluid = response.headers.get('set-cookie').split(';')[0]
  3.     # 提取js代码
  4.     js_clearance = re.findall('cookie=(.*?);location.href=', response.text)[0]
  5.     # 执行后获得cookie参数js_clearance
  6.     result = execjs.eval(js_clearance).split(';')[0]
复制代码

2、第二次通过携带上一个请求得到的两个cookie参数请求并得到响应第二段js代码,这段js代码是经过混淆的代码,利用解混淆工具将js代码解混淆后代码如下;
  1. function hash(_0x1b66b8) {
  2.   function _0x35c6e5(_0x268dd8, _0xea5bd4) {
  3.     return _0x268dd8 << _0xea5bd4 | _0x268dd8 >>> 32 - _0xea5bd4;
  4.   }

  5.   function _0x1eaf4b(_0x31d866, _0x14e06e) {
  6.     var _0x157f3b, _0x51ff9a, _0x2bf573, _0x434e16, _0x3f57f0;

  7.     _0x2bf573 = _0x31d866 & 2147483648;
  8.     _0x434e16 = _0x14e06e & 2147483648;
  9.     _0x157f3b = _0x31d866 & 1073741824;
  10.     _0x51ff9a = _0x14e06e & 1073741824;
  11.     _0x3f57f0 = (_0x31d866 & 1073741823) + (_0x14e06e & 1073741823);

  12.     if (_0x157f3b & _0x51ff9a) {
  13.       return _0x3f57f0 ^ 2147483648 ^ _0x2bf573 ^ _0x434e16;
  14.     }

  15.     if (_0x157f3b | _0x51ff9a) {
  16.       if (_0x3f57f0 & 1073741824) {
  17.         return _0x3f57f0 ^ 3221225472 ^ _0x2bf573 ^ _0x434e16;
  18.       } else {
  19.         return _0x3f57f0 ^ 1073741824 ^ _0x2bf573 ^ _0x434e16;
  20.       }
  21.     } else {
  22.       return _0x3f57f0 ^ _0x2bf573 ^ _0x434e16;
  23.     }
  24.   }

  25.   function _0x296d1d(_0x3ec120, _0x19f2dd, _0x5c9060) {
  26.     return _0x3ec120 & _0x19f2dd | ~_0x3ec120 & _0x5c9060;
  27.   }

  28.   function _0x2e22ab(_0x1b4bee, _0x5b3ded, _0x1f786e) {
  29.     return _0x1b4bee & _0x1f786e | _0x5b3ded & ~_0x1f786e;
  30.   }

  31.   function _0x9c1e12(_0x583030, _0x2fb4b0, _0x1e223e) {
  32.     return _0x583030 ^ _0x2fb4b0 ^ _0x1e223e;
  33.   }

  34.   function _0x21943e(_0x507d21, _0x593ceb, _0x12d837) {
  35.     return _0x593ceb ^ (_0x507d21 | ~_0x12d837);
  36.   }

  37.   function _0x30c4a8(_0x11c9c5, _0x2d92d7, _0x5443b6, _0xf48f8, _0x224d79, _0x640128, _0x4788bf) {
  38.     _0x11c9c5 = _0x1eaf4b(_0x11c9c5, _0x1eaf4b(_0x1eaf4b(_0x296d1d(_0x2d92d7, _0x5443b6, _0xf48f8), _0x224d79), _0x4788bf));
  39.     return _0x1eaf4b(_0x35c6e5(_0x11c9c5, _0x640128), _0x2d92d7);
  40.   }

  41.   function _0x2145f8(_0x53d7e0, _0xf63c6, _0x1eddd0, _0x5af86a, _0x4e89ac, _0x42dfbd, _0x4e866b) {
  42.     _0x53d7e0 = _0x1eaf4b(_0x53d7e0, _0x1eaf4b(_0x1eaf4b(_0x2e22ab(_0xf63c6, _0x1eddd0, _0x5af86a), _0x4e89ac), _0x4e866b));
  43.     return _0x1eaf4b(_0x35c6e5(_0x53d7e0, _0x42dfbd), _0xf63c6);
  44.   }

  45.   function _0x311b76(_0x39b6f5, _0x5a7109, _0x3a29c6, _0x4fb375, _0xcadb59, _0x508c0e, _0x234182) {
  46.     _0x39b6f5 = _0x1eaf4b(_0x39b6f5, _0x1eaf4b(_0x1eaf4b(_0x9c1e12(_0x5a7109, _0x3a29c6, _0x4fb375), _0xcadb59), _0x234182));
  47.     return _0x1eaf4b(_0x35c6e5(_0x39b6f5, _0x508c0e), _0x5a7109);
  48.   }

  49.   function _0x361b6d(_0x3d0c62, _0x300099, _0x537e35, _0x6f09e1, _0x45e6a4, _0x1d7856, _0x2506bc) {
  50.     _0x3d0c62 = _0x1eaf4b(_0x3d0c62, _0x1eaf4b(_0x1eaf4b(_0x21943e(_0x300099, _0x537e35, _0x6f09e1), _0x45e6a4), _0x2506bc));
  51.     return _0x1eaf4b(_0x35c6e5(_0x3d0c62, _0x1d7856), _0x300099);
  52.   }

  53.   function _0x57b771(_0x3c91e6) {
  54.     var _0x10f282;

  55.     var _0xc362bc = _0x3c91e6["length"];

  56.     var _0x41aff5 = _0xc362bc + 8;

  57.     var _0x24fc0a = (_0x41aff5 - _0x41aff5 % 64) / 64;

  58.     var _0x1c8987 = (_0x24fc0a + 1) * 16;

  59.     var _0x281eac = Array(_0x1c8987 - 1);

  60.     var _0x11a5cc = 0;
  61.     var _0x3f48ef = 0;

  62.     while (_0x3f48ef < _0xc362bc) {
  63.       _0x10f282 = (_0x3f48ef - _0x3f48ef % 4) / 4;
  64.       _0x11a5cc = _0x3f48ef % 4 * 8;
  65.       _0x281eac[_0x10f282] = _0x281eac[_0x10f282] | _0x3c91e6["charCodeAt"](_0x3f48ef) << _0x11a5cc;
  66.       _0x3f48ef++;
  67.     }

  68.     _0x10f282 = (_0x3f48ef - _0x3f48ef % 4) / 4;
  69.     _0x11a5cc = _0x3f48ef % 4 * 8;
  70.     _0x281eac[_0x10f282] = _0x281eac[_0x10f282] | 128 << _0x11a5cc;
  71.     _0x281eac[_0x1c8987 - 2] = _0xc362bc << 3;
  72.     _0x281eac[_0x1c8987 - 1] = _0xc362bc >>> 29;
  73.     return _0x281eac;
  74.   }

  75.   function _0x1b0e3e(_0x1bc183) {
  76.     var _0x2d342c = "",
  77.         _0x486522 = "",
  78.         _0x45875a,
  79.         _0x2a3b5e;

  80.     for (_0x2a3b5e = 0; _0x2a3b5e <= 3; _0x2a3b5e++) {
  81.       _0x45875a = _0x1bc183 >>> _0x2a3b5e * 8 & 255;
  82.       _0x486522 = "0" + _0x45875a["toString"](16);
  83.       _0x2d342c = _0x2d342c + _0x486522["substr"](_0x486522["length"] - 2, 2);
  84.     }

  85.     return _0x2d342c;
  86.   }

  87.   var _0x198c42 = Array();

  88.   var _0x556dd6, _0x3e947b, _0x217e9f, _0x8545c6, _0x3ed023, _0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7;

  89.   var _0x5153e3 = 7,
  90.       _0xa71763 = 12,
  91.       _0x509ea6 = 17,
  92.       _0x4288bc = 22;
  93.   var _0x7ad2f4 = 5,
  94.       _0x45d017 = 9,
  95.       _0x41614c = 14,
  96.       _0x354464 = 20;
  97.   var _0x307adc = 4,
  98.       _0x1cc902 = 11,
  99.       _0x5bb242 = 16,
  100.       _0x4ed1a4 = 23;
  101.   var _0x418318 = 6,
  102.       _0xb85eab = 10,
  103.       _0x2a7231 = 15,
  104.       _0x5cca29 = 21;
  105.   _0x198c42 = _0x57b771(_0x1b66b8);
  106.   _0x244b3a = 1732584193;
  107.   _0x47e9c7 = 4023233417;
  108.   _0x4f689f = 2562383102;
  109.   _0x27bcf7 = 271733878;

  110.   for (_0x556dd6 = 0; _0x556dd6 < _0x198c42["length"]; _0x556dd6 += 16) {
  111.     _0x3e947b = _0x244b3a;
  112.     _0x217e9f = _0x47e9c7;
  113.     _0x8545c6 = _0x4f689f;
  114.     _0x3ed023 = _0x27bcf7;
  115.     _0x244b3a = _0x30c4a8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 0], _0x5153e3, 3614090360);
  116.     _0x27bcf7 = _0x30c4a8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 1], _0xa71763, 3905402710);
  117.     _0x4f689f = _0x30c4a8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 2], _0x509ea6, 606105819);
  118.     _0x47e9c7 = _0x30c4a8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 3], _0x4288bc, 3250441966);
  119.     _0x244b3a = _0x30c4a8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 4], _0x5153e3, 4118548399);
  120.     _0x27bcf7 = _0x30c4a8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 5], _0xa71763, 1200080426);
  121.     _0x4f689f = _0x30c4a8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 6], _0x509ea6, 2821735955);
  122.     _0x47e9c7 = _0x30c4a8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 7], _0x4288bc, 4249261313);
  123.     _0x244b3a = _0x30c4a8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 8], _0x5153e3, 1770035416);
  124.     _0x27bcf7 = _0x30c4a8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 9], _0xa71763, 2336552879);
  125.     _0x4f689f = _0x30c4a8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 10], _0x509ea6, 4294925233);
  126.     _0x47e9c7 = _0x30c4a8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 11], _0x4288bc, 2304563134);
  127.     _0x244b3a = _0x30c4a8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 12], _0x5153e3, 1804603682);
  128.     _0x27bcf7 = _0x30c4a8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 13], _0xa71763, 4254626195);
  129.     _0x4f689f = _0x30c4a8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 14], _0x509ea6, 2792965006);
  130.     _0x47e9c7 = _0x30c4a8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 15], _0x4288bc, 1236535329);
  131.     _0x244b3a = _0x2145f8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 1], _0x7ad2f4, 4129170786);
  132.     _0x27bcf7 = _0x2145f8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 6], _0x45d017, 3225465664);
  133.     _0x4f689f = _0x2145f8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 11], _0x41614c, 643717713);
  134.     _0x47e9c7 = _0x2145f8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 0], _0x354464, 3921069994);
  135.     _0x244b3a = _0x2145f8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 5], _0x7ad2f4, 3593408605);
  136.     _0x27bcf7 = _0x2145f8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 10], _0x45d017, 38016083);
  137.     _0x4f689f = _0x2145f8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 15], _0x41614c, 3634488961);
  138.     _0x47e9c7 = _0x2145f8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 4], _0x354464, 3889429448);
  139.     _0x244b3a = _0x2145f8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 9], _0x7ad2f4, 568446438);
  140.     _0x27bcf7 = _0x2145f8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 14], _0x45d017, 3275163606);
  141.     _0x4f689f = _0x2145f8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 3], _0x41614c, 4107603335);
  142.     _0x47e9c7 = _0x2145f8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 8], _0x354464, 1163531501);
  143.     _0x244b3a = _0x2145f8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 13], _0x7ad2f4, 2850285829);
  144.     _0x27bcf7 = _0x2145f8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 2], _0x45d017, 4243563512);
  145.     _0x4f689f = _0x2145f8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 7], _0x41614c, 1735328473);
  146.     _0x47e9c7 = _0x2145f8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 12], _0x354464, 2368359562);
  147.     _0x244b3a = _0x311b76(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 5], _0x307adc, 4294588738);
  148.     _0x27bcf7 = _0x311b76(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 8], _0x1cc902, 2272392833);
  149.     _0x4f689f = _0x311b76(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 11], _0x5bb242, 1839030562);
  150.     _0x47e9c7 = _0x311b76(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 14], _0x4ed1a4, 4259657740);
  151.     _0x244b3a = _0x311b76(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 1], _0x307adc, 2763975236);
  152.     _0x27bcf7 = _0x311b76(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 4], _0x1cc902, 1272893353);
  153.     _0x4f689f = _0x311b76(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 7], _0x5bb242, 4139469664);
  154.     _0x47e9c7 = _0x311b76(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 10], _0x4ed1a4, 3200236656);
  155.     _0x244b3a = _0x311b76(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 13], _0x307adc, 681279174);
  156.     _0x27bcf7 = _0x311b76(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 0], _0x1cc902, 3936430074);
  157.     _0x4f689f = _0x311b76(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 3], _0x5bb242, 3572445317);
  158.     _0x47e9c7 = _0x311b76(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 6], _0x4ed1a4, 76029189);
  159.     _0x244b3a = _0x311b76(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 9], _0x307adc, 3654602809);
  160.     _0x27bcf7 = _0x311b76(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 12], _0x1cc902, 3873151461);
  161.     _0x4f689f = _0x311b76(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 15], _0x5bb242, 530742520);
  162.     _0x47e9c7 = _0x311b76(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 2], _0x4ed1a4, 3299628645);
  163.     _0x244b3a = _0x361b6d(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 0], _0x418318, 4096336452);
  164.     _0x27bcf7 = _0x361b6d(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 7], _0xb85eab, 1126891415);
  165.     _0x4f689f = _0x361b6d(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 14], _0x2a7231, 2878612391);
  166.     _0x47e9c7 = _0x361b6d(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 5], _0x5cca29, 4237533241);
  167.     _0x244b3a = _0x361b6d(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 12], _0x418318, 1700485571);
  168.     _0x27bcf7 = _0x361b6d(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 3], _0xb85eab, 2399980690);
  169.     _0x4f689f = _0x361b6d(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 10], _0x2a7231, 4293915773);
  170.     _0x47e9c7 = _0x361b6d(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 1], _0x5cca29, 2240044497);
  171.     _0x244b3a = _0x361b6d(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 8], _0x418318, 1873313359);
  172.     _0x27bcf7 = _0x361b6d(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 15], _0xb85eab, 4264355552);
  173.     _0x4f689f = _0x361b6d(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 6], _0x2a7231, 2734768916);
  174.     _0x47e9c7 = _0x361b6d(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 13], _0x5cca29, 1309151649);
  175.     _0x244b3a = _0x361b6d(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 4], _0x418318, 4149444226);
  176.     _0x27bcf7 = _0x361b6d(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 11], _0xb85eab, 3174756917);
  177.     _0x4f689f = _0x361b6d(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 2], _0x2a7231, 718787259);
  178.     _0x47e9c7 = _0x361b6d(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 9], _0x5cca29, 3951481745);
  179.     _0x244b3a = _0x1eaf4b(_0x244b3a, _0x3e947b);
  180.     _0x47e9c7 = _0x1eaf4b(_0x47e9c7, _0x217e9f);
  181.     _0x4f689f = _0x1eaf4b(_0x4f689f, _0x8545c6);
  182.     _0x27bcf7 = _0x1eaf4b(_0x27bcf7, _0x3ed023);
  183.   }

  184.   var _0x35900a = _0x1b0e3e(_0x244b3a) + _0x1b0e3e(_0x47e9c7) + _0x1b0e3e(_0x4f689f) + _0x1b0e3e(_0x27bcf7);

  185.   return _0x35900a["toLowerCase"]();
  186. }

  187. function go(_0x30b50d) {
  188.   function _0x3dbf67() {
  189.     var _0x5f1114 = window["navigator"]["userAgent"],
  190.         _0x2ed046 = ["Phantom"];

  191.     for (var _0x1869b0 = 0; _0x1869b0 < _0x2ed046["length"]; _0x1869b0++) {
  192.       if (_0x5f1114["indexOf"](_0x2ed046[_0x1869b0]) != -1) {
  193.         return true;
  194.       }
  195.     }

  196.     if (window["callPhantom"] || window["_phantom"] || window["Headless"] || window["navigator"]["webdriver"] || window["navigator"]["__driver_evaluate"] || window["navigator"]["__webdriver_evaluate"]) {
  197.       return true;
  198.     }
  199.   }

  200.   if (_0x3dbf67()) {
  201.     return;
  202.   }

  203.   var _0x26a47f = new Date();

  204.   function _0x3df5bc(_0x5da4a3, _0x2d77c8) {
  205.     var _0xad821a = _0x30b50d["chars"]["length"];

  206.     for (var _0x42a4ac = 0; _0x42a4ac < _0xad821a; _0x42a4ac++) {
  207.       for (var _0x250ad6 = 0; _0x250ad6 < _0xad821a; _0x250ad6++) {
  208.         var _0x5f1c4c = _0x2d77c8[0] + _0x30b50d["chars"]["substr"](_0x42a4ac, 1) + _0x30b50d["chars"]["substr"](_0x250ad6, 1) + _0x2d77c8[1];

  209.         if (hash(_0x5f1c4c) == _0x5da4a3) {
  210.           return [_0x5f1c4c, new Date() - _0x26a47f];
  211.         }
  212.       }
  213.     }
  214.   }

  215.   var _0x1d6c97 = _0x3df5bc(_0x30b50d["ct"], _0x30b50d["bts"]);

  216.   if (_0x1d6c97) {
  217.     var _0x5c31f9;

  218.     if (_0x30b50d["wt"]) {
  219.       _0x5c31f9 = parseInt(_0x30b50d["wt"]) > _0x1d6c97[1] ? parseInt(_0x30b50d["wt"]) - _0x1d6c97[1] : 500;
  220.     } else {
  221.       _0x5c31f9 = 1500;
  222.     }

  223.     setTimeout(function () {
  224.       document["cookie"] = _0x30b50d["tn"] + "=" + _0x1d6c97[0] + ";Max-age=" + _0x30b50d["vt"] + "; path = /";
  225.       location["href"] = location["pathname"] + location["search"];
  226.     }, _0x5c31f9);
  227.   } else {
  228.     alert("\u8BF7\u6C42\u9A8C\u8BC1\xE5\xA4\xB1\xE8\xB4\xA5");
  229.   }
  230. }

  231. go({
  232.   "bts": ["1605770555.059|0|DGK", "s4dADq0wDGWCiURT3yX7ds%3D"],
  233.   "chars": "AdFF3xaKjaNVFXqbiTdKR4",
  234.   "ct": "40ed0871cd9830417eda6370eef68d78",
  235.   "ha": "md5",
  236.   "tn": "__jsl_clearance_s",
  237.   "vt": "3600",
  238.   "wt": "1500"
  239. });
复制代码

分析及实现:简单解读后发现这段代码是调用了go方法并传入了一段参数,这段参数作用就是用于第二次生成cookie的,接下来就简单了,先利用正则将这段参数提取出来,再修改一下js代码;
下面这段代码目测应该是判断是否是爬虫用的,经过测试可以删除,不影响;
  1. function _0x3dbf67() {
  2.     var _0x5f1114 = window["navigator"]["userAgent"],
  3.         _0x2ed046 = ["Phantom"];

  4.     for (var _0x1869b0 = 0; _0x1869b0 < _0x2ed046["length"]; _0x1869b0++) {
  5.       if (_0x5f1114["indexOf"](_0x2ed046[_0x1869b0]) != -1) {
  6.         return true;
  7.       }
  8.     }

  9.     if (window["callPhantom"] || window["_phantom"] || window["Headless"] || window["navigator"]["webdriver"] || window["navigator"]["__driver_evaluate"] || window["navigator"]["__webdriver_evaluate"]) {
  10.       return true;
  11.     }
  12.   }

  13.   if (_0x3dbf67()) {
  14.     return;
  15.   }
复制代码

再将这段设置cookie的代码修改,调用go方法后直接返回cookie
  1. //原代码
  2. setTimeout(function () {
  3.       document["cookie"] = _0x30b50d["tn"] + "=" + _0x1d6c97[0] + ";Max-age=" + _0x30b50d["vt"] + "; path = /";
  4.       location["href"] = location["pathname"] + location["search"];
  5.     }, _0x5c31f9);
  6.   } else {
  7.     alert("\u8BF7\u6C42\u9A8C\u8BC1\xE5\xA4\xB1\xE8\xB4\xA5");

  8. //修改为
  9. return _0x30b50d["tn"] + "=" + _0x1d6c97[0] + ";Max-age=" + _0x30b50d["vt"] + "; path = /";
复制代码

最后删除js代码中的go方法调用,将js代码保存(另外需要注意的是网站第二次生成cookie的js代码有三种生成方式,需要用相同的方法将三段js代码分别修改保存);
先将之前得到的参数转为字典,再通过判断其中的参数ha,来使用对应的cookie生成代码
利用execjs模块传参执行js代码后得到最终的cookie,把前面已经获得的jsluid和最后得到的cookie参数携带去请求,得到响应正确内容。
  1. import re
  2. import execjs
  3. import requests
  4. import json
  5. from requests.packages.urllib3.exceptions import InsecureRequestWarning
  6. # 关闭ssl验证提示
  7. requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

  8. headers = {
  9.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
  10.                   '(KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
  11. }
  12. url = 'https://www.yidaiyilu.gov.cn/xwzx/gnxw/87373.htm'


  13. def get_page():
  14.     response = requests.get(url, headers=headers, verify=False)
  15.     return response


  16. def get_parameter(response):
  17.     # 获取cookie参数jsluid
  18.     jsluid = response.headers.get('set-cookie').split(';')[0]
  19.     # 提取js代码
  20.     js_clearance = re.findall('cookie=(.*?);location.href=', response.text)[0]
  21.     # 执行后获得cookie参数js_clearance
  22.     result = execjs.eval(js_clearance).split(';')[0]
  23.     global headers
  24.     headers.update({'cookie': jsluid + '; ' + result})
  25.     response = get_page()
  26.     # 提取参数并转字典
  27.     parameter = json.loads(re.findall(r'};go\((.*?)\)</script>', response.text)[0])
  28.     js_file = ''
  29.     # 判断cookie生成方式
  30.     if parameter['ha'] == 'sha1':
  31.         js_file = 'sha1.js'
  32.     elif parameter['ha'] == 'sha256':
  33.         js_file = 'sha256.js'
  34.     elif parameter['ha'] == 'md5':
  35.         js_file = 'md5.js'
  36.     return parameter, js_file, jsluid


  37. def get_cookie(param, file):
  38.     parameter = {
  39.         "bts": param['bts'],
  40.         "chars": param['chars'],
  41.         "ct": param['ct'],
  42.         "ha": param['ha'],
  43.         "tn": param['tn'],
  44.         "vt": param['vt'],
  45.         "wt": param['wt']
  46.     }
  47.     with open(file, 'r') as f:
  48.         js = f.read()
  49.     cmp = execjs.compile(js)
  50.     # 执行js代码传入参数
  51.     clearance = cmp.call('go', parameter)
  52.     return clearance


  53. def run():
  54.     response = get_page()
  55.     parameter, js_file, jsluid = get_parameter(response)
  56.     clearance = get_cookie(parameter, js_file)
  57.     global headers
  58.     headers.update({'cookie': jsluid + '; ' + clearance})
  59.     html = requests.get(url, headers=headers, verify=False)
  60.     print(html.content.decode())


  61. run()
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-18 22:25:25 | 显示全部楼层


网站反爬虫,返回的内容被加密了

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 22:41:58 | 显示全部楼层
Twilight6 发表于 2020-11-18 22:25
网站反爬虫,返回的内容被加密了

嗐,我知道,就是不知道咋整,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 22:49:22 | 显示全部楼层
用编程搞垮道盟 发表于 2020-11-18 22:41
嗐,我知道,就是不知道咋整,




抱歉 ,我爬虫只会些基础,只知道返回的被加密了


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 22:50:56 | 显示全部楼层
Twilight6 发表于 2020-11-18 22:49
抱歉 ,我爬虫只会些基础,只知道返回的被加密了

好吧,谢谢,也就你能理理我了嗐
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 22:53:22 | 显示全部楼层
用编程搞垮道盟 发表于 2020-11-18 22:50
好吧,谢谢,也就你能理理我了嗐



没事,蹲蹲看有没大佬~

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 08:52:46 | 显示全部楼层
用编程搞垮道盟 发表于 2020-11-18 22:50
好吧,谢谢,也就你能理理我了嗐

加个Cookie应该就没问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 08:53:50 | 显示全部楼层
反加密的话 大部分的用cookie或IP池基本上都能解决了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 09:25:02 | 显示全部楼层
这个页面需要cookie包含两个参数:
__jsluid_s:从521的response的header里可以看到:
  1. import requests

  2. headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0'}
  3. url = "https://www.yidaiyilu.gov.cn/xwzx/gnxw/87373.htm"
  4. r = requests.get(url, headers=headers)
  5. r.encoding = 'utf-8'
  6. for k, v in r.cookies.items():
  7.     print(k, '=', v)
复制代码

__jsl_clearance_s:这个主要用js算出来,js不熟,找到一篇,可以参考一下:https://blog.csdn.net/qq_39138295/article/details/100705405

如果不想研究如何生成的,也可以直接用浏览器的:
  1. import requests

  2. headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0', 'cookie': '__jsluid_s=b37d6e95fe6d3b0d462eb76b2ab93002; __jsl_clearance_s=1605747177.992|0|EnIyB0bctVOOAs8Tklgeghe%2Bx44%3D'}
  3. url = "https://www.yidaiyilu.gov.cn/xwzx/gnxw/87373.htm"
  4. r = requests.get(url, headers=headers)
  5. r.encoding = 'utf-8'
  6. print(r.status_code)
  7. print(r.text)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 09:37:20 | 显示全部楼层
楼上说的方法都是没有用的,我测试了下,这个是js加密

微信图片_20201119093615.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 09:49:04 | 显示全部楼层
笨鸟学飞 发表于 2020-11-19 09:37
楼上说的方法都是没有用的,我测试了下,这个是js加密

我这可以爬到啊 5.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 17:03:27 | 显示全部楼层    本楼为最佳答案   
闲来无事分析了一下,这个cookie生成方式不难,从浏览器分析来看,总共进行了三次请求,前两次都是为了生成cookie,最后一次才是正确响应:
1、第一次响应得到一段js代码,这段js代码执行后为浏览器添加了一个cookie;
  1. <script>document.cookie=('_')+('_')+('j')+('s')+('l')+('_')+('c')+('l')+('e')+('a')+('r')+('a')+('n')+('c')+('e')+('_')+('s')+('=')+(-~false+'')+([2]*(3)+'')+(~~''+'')+(([2]+0>>2)+'')+(-~[6]+'')+((1+[2])/[2]+'')+(([2]+0>>2)+'')+(1+1+'')+((2^1)+'')+(-~[7]+'')+('.')+([2]*(3)+'')+(-~0+'')+(1+3+'')+('|')+('-')+((+true)+'')+('|')+('w')+('Q')+('z')+('u')+(-~false+'')+('M')+('i')+('b')+('l')+('V')+('B')+(4+5+'')+('e')+('K')+('b')+('%')+(1+1+'')+('B')+('V')+('o')+('J')+('B')+('y')+('A')+('Q')+('A')+((2)*[2]+'')+('h')+((1<<2)+'')+('%')+((1|2)+'')+('D')+(';')+('m')+('a')+('x')+('-')+('a')+('g')+('e')+('=')+(-~[2]+'')+(-~[5]+'')+(~~[]+'')+(~~{}+'')+(';')+('p')+('a')+('t')+('h')+('=')+('/');location.href=location.pathname+location.search</script>
复制代码

分析及实现:利用正则将js代码取出,再利用execjs模块执行这段代码,得到一段名为__jsl_clearance_s的cookie(这个不是最终cookie值),同时获取该请求的set-cookie,作为下次请求附带使用
  1. # 获取cookie参数jsluid
  2.     jsluid = response.headers.get('set-cookie').split(';')[0]
  3.     # 提取js代码
  4.     js_clearance = re.findall('cookie=(.*?);location.href=', response.text)[0]
  5.     # 执行后获得cookie参数js_clearance
  6.     result = execjs.eval(js_clearance).split(';')[0]
复制代码

2、第二次通过携带上一个请求得到的两个cookie参数请求并得到响应第二段js代码,这段js代码是经过混淆的代码,利用解混淆工具将js代码解混淆后代码如下;
  1. function hash(_0x1b66b8) {
  2.   function _0x35c6e5(_0x268dd8, _0xea5bd4) {
  3.     return _0x268dd8 << _0xea5bd4 | _0x268dd8 >>> 32 - _0xea5bd4;
  4.   }

  5.   function _0x1eaf4b(_0x31d866, _0x14e06e) {
  6.     var _0x157f3b, _0x51ff9a, _0x2bf573, _0x434e16, _0x3f57f0;

  7.     _0x2bf573 = _0x31d866 & 2147483648;
  8.     _0x434e16 = _0x14e06e & 2147483648;
  9.     _0x157f3b = _0x31d866 & 1073741824;
  10.     _0x51ff9a = _0x14e06e & 1073741824;
  11.     _0x3f57f0 = (_0x31d866 & 1073741823) + (_0x14e06e & 1073741823);

  12.     if (_0x157f3b & _0x51ff9a) {
  13.       return _0x3f57f0 ^ 2147483648 ^ _0x2bf573 ^ _0x434e16;
  14.     }

  15.     if (_0x157f3b | _0x51ff9a) {
  16.       if (_0x3f57f0 & 1073741824) {
  17.         return _0x3f57f0 ^ 3221225472 ^ _0x2bf573 ^ _0x434e16;
  18.       } else {
  19.         return _0x3f57f0 ^ 1073741824 ^ _0x2bf573 ^ _0x434e16;
  20.       }
  21.     } else {
  22.       return _0x3f57f0 ^ _0x2bf573 ^ _0x434e16;
  23.     }
  24.   }

  25.   function _0x296d1d(_0x3ec120, _0x19f2dd, _0x5c9060) {
  26.     return _0x3ec120 & _0x19f2dd | ~_0x3ec120 & _0x5c9060;
  27.   }

  28.   function _0x2e22ab(_0x1b4bee, _0x5b3ded, _0x1f786e) {
  29.     return _0x1b4bee & _0x1f786e | _0x5b3ded & ~_0x1f786e;
  30.   }

  31.   function _0x9c1e12(_0x583030, _0x2fb4b0, _0x1e223e) {
  32.     return _0x583030 ^ _0x2fb4b0 ^ _0x1e223e;
  33.   }

  34.   function _0x21943e(_0x507d21, _0x593ceb, _0x12d837) {
  35.     return _0x593ceb ^ (_0x507d21 | ~_0x12d837);
  36.   }

  37.   function _0x30c4a8(_0x11c9c5, _0x2d92d7, _0x5443b6, _0xf48f8, _0x224d79, _0x640128, _0x4788bf) {
  38.     _0x11c9c5 = _0x1eaf4b(_0x11c9c5, _0x1eaf4b(_0x1eaf4b(_0x296d1d(_0x2d92d7, _0x5443b6, _0xf48f8), _0x224d79), _0x4788bf));
  39.     return _0x1eaf4b(_0x35c6e5(_0x11c9c5, _0x640128), _0x2d92d7);
  40.   }

  41.   function _0x2145f8(_0x53d7e0, _0xf63c6, _0x1eddd0, _0x5af86a, _0x4e89ac, _0x42dfbd, _0x4e866b) {
  42.     _0x53d7e0 = _0x1eaf4b(_0x53d7e0, _0x1eaf4b(_0x1eaf4b(_0x2e22ab(_0xf63c6, _0x1eddd0, _0x5af86a), _0x4e89ac), _0x4e866b));
  43.     return _0x1eaf4b(_0x35c6e5(_0x53d7e0, _0x42dfbd), _0xf63c6);
  44.   }

  45.   function _0x311b76(_0x39b6f5, _0x5a7109, _0x3a29c6, _0x4fb375, _0xcadb59, _0x508c0e, _0x234182) {
  46.     _0x39b6f5 = _0x1eaf4b(_0x39b6f5, _0x1eaf4b(_0x1eaf4b(_0x9c1e12(_0x5a7109, _0x3a29c6, _0x4fb375), _0xcadb59), _0x234182));
  47.     return _0x1eaf4b(_0x35c6e5(_0x39b6f5, _0x508c0e), _0x5a7109);
  48.   }

  49.   function _0x361b6d(_0x3d0c62, _0x300099, _0x537e35, _0x6f09e1, _0x45e6a4, _0x1d7856, _0x2506bc) {
  50.     _0x3d0c62 = _0x1eaf4b(_0x3d0c62, _0x1eaf4b(_0x1eaf4b(_0x21943e(_0x300099, _0x537e35, _0x6f09e1), _0x45e6a4), _0x2506bc));
  51.     return _0x1eaf4b(_0x35c6e5(_0x3d0c62, _0x1d7856), _0x300099);
  52.   }

  53.   function _0x57b771(_0x3c91e6) {
  54.     var _0x10f282;

  55.     var _0xc362bc = _0x3c91e6["length"];

  56.     var _0x41aff5 = _0xc362bc + 8;

  57.     var _0x24fc0a = (_0x41aff5 - _0x41aff5 % 64) / 64;

  58.     var _0x1c8987 = (_0x24fc0a + 1) * 16;

  59.     var _0x281eac = Array(_0x1c8987 - 1);

  60.     var _0x11a5cc = 0;
  61.     var _0x3f48ef = 0;

  62.     while (_0x3f48ef < _0xc362bc) {
  63.       _0x10f282 = (_0x3f48ef - _0x3f48ef % 4) / 4;
  64.       _0x11a5cc = _0x3f48ef % 4 * 8;
  65.       _0x281eac[_0x10f282] = _0x281eac[_0x10f282] | _0x3c91e6["charCodeAt"](_0x3f48ef) << _0x11a5cc;
  66.       _0x3f48ef++;
  67.     }

  68.     _0x10f282 = (_0x3f48ef - _0x3f48ef % 4) / 4;
  69.     _0x11a5cc = _0x3f48ef % 4 * 8;
  70.     _0x281eac[_0x10f282] = _0x281eac[_0x10f282] | 128 << _0x11a5cc;
  71.     _0x281eac[_0x1c8987 - 2] = _0xc362bc << 3;
  72.     _0x281eac[_0x1c8987 - 1] = _0xc362bc >>> 29;
  73.     return _0x281eac;
  74.   }

  75.   function _0x1b0e3e(_0x1bc183) {
  76.     var _0x2d342c = "",
  77.         _0x486522 = "",
  78.         _0x45875a,
  79.         _0x2a3b5e;

  80.     for (_0x2a3b5e = 0; _0x2a3b5e <= 3; _0x2a3b5e++) {
  81.       _0x45875a = _0x1bc183 >>> _0x2a3b5e * 8 & 255;
  82.       _0x486522 = "0" + _0x45875a["toString"](16);
  83.       _0x2d342c = _0x2d342c + _0x486522["substr"](_0x486522["length"] - 2, 2);
  84.     }

  85.     return _0x2d342c;
  86.   }

  87.   var _0x198c42 = Array();

  88.   var _0x556dd6, _0x3e947b, _0x217e9f, _0x8545c6, _0x3ed023, _0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7;

  89.   var _0x5153e3 = 7,
  90.       _0xa71763 = 12,
  91.       _0x509ea6 = 17,
  92.       _0x4288bc = 22;
  93.   var _0x7ad2f4 = 5,
  94.       _0x45d017 = 9,
  95.       _0x41614c = 14,
  96.       _0x354464 = 20;
  97.   var _0x307adc = 4,
  98.       _0x1cc902 = 11,
  99.       _0x5bb242 = 16,
  100.       _0x4ed1a4 = 23;
  101.   var _0x418318 = 6,
  102.       _0xb85eab = 10,
  103.       _0x2a7231 = 15,
  104.       _0x5cca29 = 21;
  105.   _0x198c42 = _0x57b771(_0x1b66b8);
  106.   _0x244b3a = 1732584193;
  107.   _0x47e9c7 = 4023233417;
  108.   _0x4f689f = 2562383102;
  109.   _0x27bcf7 = 271733878;

  110.   for (_0x556dd6 = 0; _0x556dd6 < _0x198c42["length"]; _0x556dd6 += 16) {
  111.     _0x3e947b = _0x244b3a;
  112.     _0x217e9f = _0x47e9c7;
  113.     _0x8545c6 = _0x4f689f;
  114.     _0x3ed023 = _0x27bcf7;
  115.     _0x244b3a = _0x30c4a8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 0], _0x5153e3, 3614090360);
  116.     _0x27bcf7 = _0x30c4a8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 1], _0xa71763, 3905402710);
  117.     _0x4f689f = _0x30c4a8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 2], _0x509ea6, 606105819);
  118.     _0x47e9c7 = _0x30c4a8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 3], _0x4288bc, 3250441966);
  119.     _0x244b3a = _0x30c4a8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 4], _0x5153e3, 4118548399);
  120.     _0x27bcf7 = _0x30c4a8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 5], _0xa71763, 1200080426);
  121.     _0x4f689f = _0x30c4a8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 6], _0x509ea6, 2821735955);
  122.     _0x47e9c7 = _0x30c4a8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 7], _0x4288bc, 4249261313);
  123.     _0x244b3a = _0x30c4a8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 8], _0x5153e3, 1770035416);
  124.     _0x27bcf7 = _0x30c4a8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 9], _0xa71763, 2336552879);
  125.     _0x4f689f = _0x30c4a8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 10], _0x509ea6, 4294925233);
  126.     _0x47e9c7 = _0x30c4a8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 11], _0x4288bc, 2304563134);
  127.     _0x244b3a = _0x30c4a8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 12], _0x5153e3, 1804603682);
  128.     _0x27bcf7 = _0x30c4a8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 13], _0xa71763, 4254626195);
  129.     _0x4f689f = _0x30c4a8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 14], _0x509ea6, 2792965006);
  130.     _0x47e9c7 = _0x30c4a8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 15], _0x4288bc, 1236535329);
  131.     _0x244b3a = _0x2145f8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 1], _0x7ad2f4, 4129170786);
  132.     _0x27bcf7 = _0x2145f8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 6], _0x45d017, 3225465664);
  133.     _0x4f689f = _0x2145f8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 11], _0x41614c, 643717713);
  134.     _0x47e9c7 = _0x2145f8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 0], _0x354464, 3921069994);
  135.     _0x244b3a = _0x2145f8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 5], _0x7ad2f4, 3593408605);
  136.     _0x27bcf7 = _0x2145f8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 10], _0x45d017, 38016083);
  137.     _0x4f689f = _0x2145f8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 15], _0x41614c, 3634488961);
  138.     _0x47e9c7 = _0x2145f8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 4], _0x354464, 3889429448);
  139.     _0x244b3a = _0x2145f8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 9], _0x7ad2f4, 568446438);
  140.     _0x27bcf7 = _0x2145f8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 14], _0x45d017, 3275163606);
  141.     _0x4f689f = _0x2145f8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 3], _0x41614c, 4107603335);
  142.     _0x47e9c7 = _0x2145f8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 8], _0x354464, 1163531501);
  143.     _0x244b3a = _0x2145f8(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 13], _0x7ad2f4, 2850285829);
  144.     _0x27bcf7 = _0x2145f8(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 2], _0x45d017, 4243563512);
  145.     _0x4f689f = _0x2145f8(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 7], _0x41614c, 1735328473);
  146.     _0x47e9c7 = _0x2145f8(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 12], _0x354464, 2368359562);
  147.     _0x244b3a = _0x311b76(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 5], _0x307adc, 4294588738);
  148.     _0x27bcf7 = _0x311b76(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 8], _0x1cc902, 2272392833);
  149.     _0x4f689f = _0x311b76(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 11], _0x5bb242, 1839030562);
  150.     _0x47e9c7 = _0x311b76(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 14], _0x4ed1a4, 4259657740);
  151.     _0x244b3a = _0x311b76(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 1], _0x307adc, 2763975236);
  152.     _0x27bcf7 = _0x311b76(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 4], _0x1cc902, 1272893353);
  153.     _0x4f689f = _0x311b76(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 7], _0x5bb242, 4139469664);
  154.     _0x47e9c7 = _0x311b76(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 10], _0x4ed1a4, 3200236656);
  155.     _0x244b3a = _0x311b76(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 13], _0x307adc, 681279174);
  156.     _0x27bcf7 = _0x311b76(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 0], _0x1cc902, 3936430074);
  157.     _0x4f689f = _0x311b76(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 3], _0x5bb242, 3572445317);
  158.     _0x47e9c7 = _0x311b76(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 6], _0x4ed1a4, 76029189);
  159.     _0x244b3a = _0x311b76(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 9], _0x307adc, 3654602809);
  160.     _0x27bcf7 = _0x311b76(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 12], _0x1cc902, 3873151461);
  161.     _0x4f689f = _0x311b76(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 15], _0x5bb242, 530742520);
  162.     _0x47e9c7 = _0x311b76(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 2], _0x4ed1a4, 3299628645);
  163.     _0x244b3a = _0x361b6d(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 0], _0x418318, 4096336452);
  164.     _0x27bcf7 = _0x361b6d(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 7], _0xb85eab, 1126891415);
  165.     _0x4f689f = _0x361b6d(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 14], _0x2a7231, 2878612391);
  166.     _0x47e9c7 = _0x361b6d(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 5], _0x5cca29, 4237533241);
  167.     _0x244b3a = _0x361b6d(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 12], _0x418318, 1700485571);
  168.     _0x27bcf7 = _0x361b6d(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 3], _0xb85eab, 2399980690);
  169.     _0x4f689f = _0x361b6d(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 10], _0x2a7231, 4293915773);
  170.     _0x47e9c7 = _0x361b6d(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 1], _0x5cca29, 2240044497);
  171.     _0x244b3a = _0x361b6d(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 8], _0x418318, 1873313359);
  172.     _0x27bcf7 = _0x361b6d(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 15], _0xb85eab, 4264355552);
  173.     _0x4f689f = _0x361b6d(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 6], _0x2a7231, 2734768916);
  174.     _0x47e9c7 = _0x361b6d(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 13], _0x5cca29, 1309151649);
  175.     _0x244b3a = _0x361b6d(_0x244b3a, _0x47e9c7, _0x4f689f, _0x27bcf7, _0x198c42[_0x556dd6 + 4], _0x418318, 4149444226);
  176.     _0x27bcf7 = _0x361b6d(_0x27bcf7, _0x244b3a, _0x47e9c7, _0x4f689f, _0x198c42[_0x556dd6 + 11], _0xb85eab, 3174756917);
  177.     _0x4f689f = _0x361b6d(_0x4f689f, _0x27bcf7, _0x244b3a, _0x47e9c7, _0x198c42[_0x556dd6 + 2], _0x2a7231, 718787259);
  178.     _0x47e9c7 = _0x361b6d(_0x47e9c7, _0x4f689f, _0x27bcf7, _0x244b3a, _0x198c42[_0x556dd6 + 9], _0x5cca29, 3951481745);
  179.     _0x244b3a = _0x1eaf4b(_0x244b3a, _0x3e947b);
  180.     _0x47e9c7 = _0x1eaf4b(_0x47e9c7, _0x217e9f);
  181.     _0x4f689f = _0x1eaf4b(_0x4f689f, _0x8545c6);
  182.     _0x27bcf7 = _0x1eaf4b(_0x27bcf7, _0x3ed023);
  183.   }

  184.   var _0x35900a = _0x1b0e3e(_0x244b3a) + _0x1b0e3e(_0x47e9c7) + _0x1b0e3e(_0x4f689f) + _0x1b0e3e(_0x27bcf7);

  185.   return _0x35900a["toLowerCase"]();
  186. }

  187. function go(_0x30b50d) {
  188.   function _0x3dbf67() {
  189.     var _0x5f1114 = window["navigator"]["userAgent"],
  190.         _0x2ed046 = ["Phantom"];

  191.     for (var _0x1869b0 = 0; _0x1869b0 < _0x2ed046["length"]; _0x1869b0++) {
  192.       if (_0x5f1114["indexOf"](_0x2ed046[_0x1869b0]) != -1) {
  193.         return true;
  194.       }
  195.     }

  196.     if (window["callPhantom"] || window["_phantom"] || window["Headless"] || window["navigator"]["webdriver"] || window["navigator"]["__driver_evaluate"] || window["navigator"]["__webdriver_evaluate"]) {
  197.       return true;
  198.     }
  199.   }

  200.   if (_0x3dbf67()) {
  201.     return;
  202.   }

  203.   var _0x26a47f = new Date();

  204.   function _0x3df5bc(_0x5da4a3, _0x2d77c8) {
  205.     var _0xad821a = _0x30b50d["chars"]["length"];

  206.     for (var _0x42a4ac = 0; _0x42a4ac < _0xad821a; _0x42a4ac++) {
  207.       for (var _0x250ad6 = 0; _0x250ad6 < _0xad821a; _0x250ad6++) {
  208.         var _0x5f1c4c = _0x2d77c8[0] + _0x30b50d["chars"]["substr"](_0x42a4ac, 1) + _0x30b50d["chars"]["substr"](_0x250ad6, 1) + _0x2d77c8[1];

  209.         if (hash(_0x5f1c4c) == _0x5da4a3) {
  210.           return [_0x5f1c4c, new Date() - _0x26a47f];
  211.         }
  212.       }
  213.     }
  214.   }

  215.   var _0x1d6c97 = _0x3df5bc(_0x30b50d["ct"], _0x30b50d["bts"]);

  216.   if (_0x1d6c97) {
  217.     var _0x5c31f9;

  218.     if (_0x30b50d["wt"]) {
  219.       _0x5c31f9 = parseInt(_0x30b50d["wt"]) > _0x1d6c97[1] ? parseInt(_0x30b50d["wt"]) - _0x1d6c97[1] : 500;
  220.     } else {
  221.       _0x5c31f9 = 1500;
  222.     }

  223.     setTimeout(function () {
  224.       document["cookie"] = _0x30b50d["tn"] + "=" + _0x1d6c97[0] + ";Max-age=" + _0x30b50d["vt"] + "; path = /";
  225.       location["href"] = location["pathname"] + location["search"];
  226.     }, _0x5c31f9);
  227.   } else {
  228.     alert("\u8BF7\u6C42\u9A8C\u8BC1\xE5\xA4\xB1\xE8\xB4\xA5");
  229.   }
  230. }

  231. go({
  232.   "bts": ["1605770555.059|0|DGK", "s4dADq0wDGWCiURT3yX7ds%3D"],
  233.   "chars": "AdFF3xaKjaNVFXqbiTdKR4",
  234.   "ct": "40ed0871cd9830417eda6370eef68d78",
  235.   "ha": "md5",
  236.   "tn": "__jsl_clearance_s",
  237.   "vt": "3600",
  238.   "wt": "1500"
  239. });
复制代码

分析及实现:简单解读后发现这段代码是调用了go方法并传入了一段参数,这段参数作用就是用于第二次生成cookie的,接下来就简单了,先利用正则将这段参数提取出来,再修改一下js代码;
下面这段代码目测应该是判断是否是爬虫用的,经过测试可以删除,不影响;
  1. function _0x3dbf67() {
  2.     var _0x5f1114 = window["navigator"]["userAgent"],
  3.         _0x2ed046 = ["Phantom"];

  4.     for (var _0x1869b0 = 0; _0x1869b0 < _0x2ed046["length"]; _0x1869b0++) {
  5.       if (_0x5f1114["indexOf"](_0x2ed046[_0x1869b0]) != -1) {
  6.         return true;
  7.       }
  8.     }

  9.     if (window["callPhantom"] || window["_phantom"] || window["Headless"] || window["navigator"]["webdriver"] || window["navigator"]["__driver_evaluate"] || window["navigator"]["__webdriver_evaluate"]) {
  10.       return true;
  11.     }
  12.   }

  13.   if (_0x3dbf67()) {
  14.     return;
  15.   }
复制代码

再将这段设置cookie的代码修改,调用go方法后直接返回cookie
  1. //原代码
  2. setTimeout(function () {
  3.       document["cookie"] = _0x30b50d["tn"] + "=" + _0x1d6c97[0] + ";Max-age=" + _0x30b50d["vt"] + "; path = /";
  4.       location["href"] = location["pathname"] + location["search"];
  5.     }, _0x5c31f9);
  6.   } else {
  7.     alert("\u8BF7\u6C42\u9A8C\u8BC1\xE5\xA4\xB1\xE8\xB4\xA5");

  8. //修改为
  9. return _0x30b50d["tn"] + "=" + _0x1d6c97[0] + ";Max-age=" + _0x30b50d["vt"] + "; path = /";
复制代码

最后删除js代码中的go方法调用,将js代码保存(另外需要注意的是网站第二次生成cookie的js代码有三种生成方式,需要用相同的方法将三段js代码分别修改保存);
先将之前得到的参数转为字典,再通过判断其中的参数ha,来使用对应的cookie生成代码
利用execjs模块传参执行js代码后得到最终的cookie,把前面已经获得的jsluid和最后得到的cookie参数携带去请求,得到响应正确内容。
  1. import re
  2. import execjs
  3. import requests
  4. import json
  5. from requests.packages.urllib3.exceptions import InsecureRequestWarning
  6. # 关闭ssl验证提示
  7. requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

  8. headers = {
  9.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
  10.                   '(KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
  11. }
  12. url = 'https://www.yidaiyilu.gov.cn/xwzx/gnxw/87373.htm'


  13. def get_page():
  14.     response = requests.get(url, headers=headers, verify=False)
  15.     return response


  16. def get_parameter(response):
  17.     # 获取cookie参数jsluid
  18.     jsluid = response.headers.get('set-cookie').split(';')[0]
  19.     # 提取js代码
  20.     js_clearance = re.findall('cookie=(.*?);location.href=', response.text)[0]
  21.     # 执行后获得cookie参数js_clearance
  22.     result = execjs.eval(js_clearance).split(';')[0]
  23.     global headers
  24.     headers.update({'cookie': jsluid + '; ' + result})
  25.     response = get_page()
  26.     # 提取参数并转字典
  27.     parameter = json.loads(re.findall(r'};go\((.*?)\)</script>', response.text)[0])
  28.     js_file = ''
  29.     # 判断cookie生成方式
  30.     if parameter['ha'] == 'sha1':
  31.         js_file = 'sha1.js'
  32.     elif parameter['ha'] == 'sha256':
  33.         js_file = 'sha256.js'
  34.     elif parameter['ha'] == 'md5':
  35.         js_file = 'md5.js'
  36.     return parameter, js_file, jsluid


  37. def get_cookie(param, file):
  38.     parameter = {
  39.         "bts": param['bts'],
  40.         "chars": param['chars'],
  41.         "ct": param['ct'],
  42.         "ha": param['ha'],
  43.         "tn": param['tn'],
  44.         "vt": param['vt'],
  45.         "wt": param['wt']
  46.     }
  47.     with open(file, 'r') as f:
  48.         js = f.read()
  49.     cmp = execjs.compile(js)
  50.     # 执行js代码传入参数
  51.     clearance = cmp.call('go', parameter)
  52.     return clearance


  53. def run():
  54.     response = get_page()
  55.     parameter, js_file, jsluid = get_parameter(response)
  56.     clearance = get_cookie(parameter, js_file)
  57.     global headers
  58.     headers.update({'cookie': jsluid + '; ' + clearance})
  59.     html = requests.get(url, headers=headers, verify=False)
  60.     print(html.content.decode())


  61. run()
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2020-11-19 23:04:17 | 显示全部楼层

??????你这怎么成功的amazing
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-19 23:14:27 | 显示全部楼层
YunGuo 发表于 2020-11-19 17:03
闲来无事分析了一下,这个cookie生成方式不难,从浏览器分析来看,总共进行了三次请求,前两次都是为了生成 ...

巨牛逼,谢谢大佬,不过二次的js代码后面我就不太懂了,还得参悟下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-19 23:39:14 | 显示全部楼层
本帖最后由 用编程搞垮道盟 于 2020-11-19 23:40 编辑
YunGuo 发表于 2020-11-19 17:03
闲来无事分析了一下,这个cookie生成方式不难,从浏览器分析来看,总共进行了三次请求,前两次都是为了生成 ...


大佬那几个js文件(md5.js  sha1.js   sha256.js)是什么?另外就是那个go函数的调用怎么判断它该带的参数就是js代码最后那个go(())里面的东西的呀大佬不嫌弃的话就拜托解答一下啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 23:42:28 | 显示全部楼层
用编程搞垮道盟 发表于 2020-11-19 23:14
巨牛逼,谢谢大佬,不过二次的js代码后面我就不太懂了,还得参悟下

这段js代码也不是很复杂,就是要先把代码解混淆,不然就看不懂,既然知道这段代码是用来生成cookie的,那肯定就有为浏览器设置cookie的代码段(可以在代码中直接搜索cookie),找到这段代码就差不多成功了一半了,不需要知道js具体生成方式,将设置cookie的代码改为调用后返回结果就行了。只需要懂一点js就行。其他的就是需要注意网站有三套cookie生成方式,需要多次请求分别得到这三套js代码,至于怎样知道代码不同,可以通过代码最后的go方法传入的参数ha值判断使用的是哪一套代码,有三个值,分别是md5/sha1/sha256,代表三套不同的cookie生成代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-19 23:54:20 | 显示全部楼层
YunGuo 发表于 2020-11-19 23:42
这段js代码也不是很复杂,就是要先把代码解混淆,不然就看不懂,既然知道这段代码是用来生成cookie的,那 ...

大佬用的啥解混淆工具?我咋解不出来呢啥cookie这个单词啥的在我这儿根本就还是看不懂的一堆代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 00:01:08 | 显示全部楼层
用编程搞垮道盟 发表于 2020-11-19 23:54
大佬用的啥解混淆工具?我咋解不出来呢啥cookie这个单词啥的在我这儿根本就还是看不懂的一堆代码

ob混淆专解测试版V0.1
http://tool.yuanrenxue.com/decode_obfuscator
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 00:26:38 | 显示全部楼层
用编程搞垮道盟 发表于 2020-11-19 23:54
大佬用的啥解混淆工具?我咋解不出来呢啥cookie这个单词啥的在我这儿根本就还是看不懂的一堆代码

一个在线解混淆的,发了网址还在审核。关于你问的怎么知道带的参数就是go里面的东西,很简单,首先懂一点js的就知道最后面的这个go就是调用了go方法并传入了一个参数(这个参数在js中的数据类型属于object对象),如果实在不确定,可以看看上面的go函数代码,这个函数传入的只有一个_0x30b50d,通过搜索_0x30b50d,就能发现第一次用到这个参数的地方var _0xad821a = _0x30b50d["chars"]["length"]; 这段代码定义了一个_0xad821a,并获取了_0x30b50d中chars的长度,你再回到代码最后看看,传入的参数中是不是有一个chars,你再继续找其他的也能找到,包括最后设置cookie的那段代码,也用到了这个参数_0x30b50d["tn"]、_0x30b50d["vt"],由此得知传入的肯定是生成cookie用到的参数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-20 00:34:43 | 显示全部楼层
YunGuo 发表于 2020-11-20 00:26
一个在线解混淆的,发了网址还在审核。关于你问的怎么知道带的参数就是go里面的东西,很简单,首先懂一点 ...

其实这个解混淆不完整,这段代码还是混淆的,不过不影响解读后面的设置cookie的代码,只是变量名和函数名是混淆的(每次得到的代码变量名和函数名不一样)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表