嗨皮漫画里的隐藏下载链接

目标分析

  1. 首先打开目标网站:嗨皮漫画

  2. 随便打开一部漫画:百炼成神漫画

  3. 再随便点开一章节:百炼成神-652话

  4. F12打开调试,开始分析。

    1. 打开源代码,大概浏览找到突破。

      ce2002d011ea7534dfb0da20b4ff57d1.png

    2. ed2af6dbbbb95fabe47d015f20c64fb0.png

    3. de2d842442cc646f02e9726c935157cb.png

    4. cf1834e395ac8a9bb0b3e8cf357daa0a.png

    5. 开始分析里面每一个变量所代表的含义

    6. 09c6b9f5c203f9d93e62ff50640a623c.png

    7. 总结以上分析就是, 我们只需要把ReadJs里面的dct方法扒下了就基本解决了问题。

    8. 在控制台双击以下最后的输出函数

    9. de6ef3610666932db6167b83fa932aa3.png

    10. function dct(_0x3056e8, _0xc88342) {
              var _0x445376 = {
                  'uoYan': function _0x3a05cb(_0x1eaf87, _0x26f548) {
                      return _0x1eaf87 / _0x26f548;
                  }
              };
              var _0x5570f2 = _0x492c('0x3e', 'aLXy')['split']('|')
                , _0x2e3990 = 0x0;
              while (!![]) {
                  switch (_0x5570f2[_0x2e3990++]) {
                  case '0':
                      var _0x2c1614 = _0xc88342;
                      continue;
                  case '1':
                      var _0x52c93f = CryptoJS[_0x492c('0x3f', '5a6s')](_0x3056e8, _0x3857a7, {
                          'hasher': CryptoJS[_0x492c('0x40', 'bLts')][_0x492c('0x41', 'vS2U')],
                          'keySize': _0x445376['uoYan'](0x40, 0x8),
                          'iterations': 0x3e7
                      });
                      continue;
                  case '2':
                      var _0x872444 = CryptoJS['AES'][_0x492c('0x42', 'jE0d')](_0x33163b, _0x52c93f, {
                          'iv': _0x1c5679
                      });
                      continue;
                  case '3':
                      var _0x33163b = _0x2c1614[_0x492c('0x43', 'qO)5')];
                      continue;
                  case '4':
                      var _0x1c5679 = CryptoJS[_0x492c('0x44', 'g[DF')]['Hex'][_0x492c('0x45', 'MQai')](_0x2c1614['iv']);
                      continue;
                  case '5':
                      return _0x872444[_0x492c('0x46', 'F6X1')](CryptoJS[_0x492c('0x47', '$nWG')]['Utf8']);
                  case '6':
                      var _0x3857a7 = CryptoJS['enc'][_0x492c('0x48', 'aq3w')]['parse'](_0x2c1614['salt']);
                      continue;
                  }
                  break;
              }
          },

       

    11. 分析以上代码, 把方法简化。把一些固定不变的结果替换掉。

    12. 首先执行ReadJs[_0x492c('0xda', 'MQai')](_0x16e8c8, ss)  ,本质上就是执行了dct(_0x16e8c8, ss) , 然而 _0x16e8c8又是一个固定值,最终就是dct('c1zbnttrabim', ss)

    13. 然后再分析下dct方法, 把dct方法简化下。由上至下把一些var定义的变量到控制台输出一些, 把其中的固定值替换掉

    14. var _0x5570f2 = _0x492c('0x3e', 'aLXy')['split']('|') ----> ["0", "3", "6", "4", "1", "2", "5"]
      _0x492c('0x3f', '5a6s')  ----> PBKDF2, 发现CryptoJS[]里面的东西其实就是加密函数里面的某个方法,换句话说就是一个固定

      通过观察不难发现,其实这个dct方法就是按照上面的列表里面的值的顺序把case里面的东西执行一遍,整理一下最终简化后就是

    15. var a = CryptoJS.PBKDF2('c1zbnttrabim', CryptoJS.enc.Hex.parse(ss['salt']), {
        'hasher': CryptoJS.algo.SHA512,
        'keySize': 8,
        'iterations': 999
      })
      var b = CryptoJS.AES.decrypt(ss['code'], a, {
        'iv': CryptoJS.enc.Hex.parse(ss['iv'])
      });
      // ReadJs['dct']('c1zbnttrabim', ss)
      data = JSON.parse(b['toString'](CryptoJS.enc.Utf8))
      console.log(data)

            现在测试以下代码有没有得到想要的

            ae6926f74d3f6f0a0d7b44b4bb0f986f.png

最终代码

# !/usr/bin/python3
# -*- coding: utf-8 -*-
# Time    : 2020/10/28 15:35
# Author  : Amd794
# Email   : 2952277346@qq.com
# Github  : https://github.com/Amd794
import re

import execjs

from threading_download_images import get_response


class Happymh(object):
    @staticmethod
    def _happymh(detail_url):
        response = get_response(detail_url)
        ss = re.findall('var ss = ({.*?});', response.text)[0].replace('\\', '')
        ctx = execjs.get().compile(open('../js/_m_happymh.js').read(), cwd='../js/node_modules')
        data = ctx.call('getArr', eval(ss))
        image_url = [d['url'] for d in data]
        return image_url


if __name__ == '__main__':
    import sys

    sys.path.append('../js')
    print(Happymh._happymh('https://m.happymh.com/manga/read/bailianchengshen/1021588'))

9ae0e3f9ee0e6b5b1e6858b0e1657070.png

posted @ 2021-07-01 19:51  Amd794  阅读(2231)  评论(0编辑  收藏  举报