吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6878|回复: 8
上一主题 下一主题
收起左侧

[Python 转载] coco漫画js逆向分析下载漫画

  [复制链接]
跳转到指定楼层
楼主
Amd794 发表于 2020-11-8 14:54 回帖奖励
本帖最后由 Amd794 于 2020-12-14 22:19 编辑

  • 网站分析

打开目标网站:https://www.cocomanhua.com/, 随便打开一部漫画: https://www.cocomanhua.com/10330/1/205.htmlF12 打开工具开始分析



先直接发送GET请求看是否可以拿到图片的下载链接


继续查看源代码, 找到突破口















一直重复解密,最后得到一个名为mh_info 的json数据
[JavaScript] 纯文本查看 复制代码
mh_info = {
  startimg: 1,
  enc_code1: "aVp6aWlITE1XcGJmSllMd0Z2NFhIZz09",
  mhid: "10330",
  enc_code2: "dzNaUXJ5SXFUangvNFZDQzZPdjRFSGpsMEVyYzdtTFdNMUsyR2pXcHIzWVRuTGxqZlVYTkFwenhxWENDajVrYXlvS0ZOQkV1T0w3N0pDTDFneHhkblpobkwyWWx4ank3c0tCZ3ZDUk05c1k9",
  mhname: "未婚爸爸",
  pageid: 2823662,
  pagename: "二十几个壮汉",
  pageurl: "1/205.html",
  readmode: 3,
  maxpreload: 5,
  defaultminline: 1,
  domain: "img.cocomanhua.com",
  manga_size: "",
  default_price: 0,
  price: 0
};

然后又发现两个加密的东西enc_code1enc_code2 ,这两个是啥?有什么用呢?
到这里线索好像就断了没什么头绪那怎么办?我们再往下看看,有没有新的发现。

再打个断点调试一下看看,发现有段字符串好像看到过。


两个字符串一模一样, 其中mh_info[__Oxa17db[0x1c3]]和mh_onfo联系起来了,好像有那么一点思路了。可以得到图片得地址就是:
[JavaScript] 纯文本查看 复制代码
' + mh_info['domain'] + '/comic/'+  __cdecrypt(_0xad15x7c, CryptoJS[__Oxa17db[0x4f]][__Oxa17db[0x52]][__Oxa17db[0x51]](mh_info[__Oxa17db[0x1c3]]).toString(CryptoJS[__Oxa17db[0x4f]].Utf8)) + 0001.jpg

我们点击翻页, 看一下下一张图片得url链接:

[JavaScript] 纯文本查看 复制代码
//img.cocomanhua.com/comic/10330/Z2hWczlBTFBwQzE2OW1hV2F3UW1LcnBrUzJiLzE2Wkw3YVdjc3FlOTZvYz0=/0002.jpg

只有后面得0001.jpg 变成了 0002.jpg , 可以得到规律,下一张图片得链接就是变成0003.jpg
回头再看看刚才获得得mh_info 里面的数据只有一个stratimg,但是发现并不知道每一章节漫画你一共有多少张图片?回到渲染好得页面看下, 找下突破口。





得到结论,总的图片页数就是
[JavaScript] 纯文本查看 复制代码
if (typeof mh_info[__Ox97c0e[0x0]] == __Ox97c0e[0x1]) {
                totalImageCount = mh_info[__Ox97c0e[0x2]]
            } else {
                totalImageCount = parseInt(eval(base64[__Ox97c0e[0x4]](__Ox97c0e[0x3])))
            }

获取图片下载链接
整理一下思路就是 详情页---->获取C_DATA---->mh_info, 通过enc_code2 获取img_path, 通过enc_code1获取到totalImageCount
开始扒mh_info的代码


按照分析时候的套路扒到底后得到以下代码
[JavaScript] 纯文本查看 复制代码
var __READKEY = 'fw12558899ertyui';
        var DECRIPT_DATA;
        try {
            DECRIPT_DATA = __cdecrypt(__READKEY, CryptoJS.enc.Base64.parse(C_DATA).toString(CryptoJS.enc.Utf8));
        } catch (error) {
            DECRIPT_DATA = __cdecrypt("JRUIFMVJDIWE569j", CryptoJS.enc.Base64.parse(C_DATA).toString(CryptoJS.enc.Utf8));
        }
        eval(DECRIPT_DATA);


整理一下得到最后的代码
[Python] 纯文本查看 复制代码
var __READKEY = 'fw12558899ertyui';

function __cdecrypt(key, word) {
  var key = CryptoJS.enc.Utf8.parse(key);
  var decrypt = CryptoJS.AES.decrypt(word, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  return CryptoJS.enc.Utf8.stringify(decrypt).toString()
};

function decode_data(C_DATA, key, default_key) {
  C_DATA = CryptoJS.enc.Base64.parse(C_DATA).toString(
      CryptoJS.enc.Utf8);
  try {
    C_DATA = __cdecrypt(key || __READKEY, C_DATA);
  } catch (e) {
    C_DATA = __cdecrypt(
        typeof default_key === 'string' ? default_key
            : "JRUIFMVJDIWE569j", C_DATA);
  }
  return C_DATA;
}
var image_info = eval(decode_data(C_DATA));

安装一下node环境,安装缺少解密需要的库文件,运行看下结果

获取img_path, 开始扒代码

上面的函数整理一下大概的意思就是
[JavaScript] 纯文本查看 复制代码
__cdecrypt( __READKEY,CryptoJS.enc.Base64.parse(enc_code2).toString(CryptoJS.enc.Utf8))

不难发现其实就是上面的decode_data函数, 所以最后就是
[Python] 纯文本查看 复制代码
decode_data(mh_info.enc_code2, "fw125gjdi9ertyui", "")

最后再扒一下获取totalImageCount的代码结束分析, 开始爬漫画。

[JavaScript] 纯文本查看 复制代码
var __READKEY = 'fw12558899ertyui';
                        var DECRIPT_DATA;
                        try {
                            DECRIPT_DATA = __cdecrypt(__READKEY, CryptoJS.enc.Base64.parse(mh_info.enc_code1).toString(CryptoJS.enc.Utf8));
                        } catch (error) {
                            DECRIPT_DATA = __cdecrypt("JRUIFMVJDIWE569j", CryptoJS.enc.Base64.parse(mh_info.enc_code1).toString(CryptoJS.enc.Utf8));
                        }
                        eval(DECRIPT_DATA);


整理一下就是
[JavaScript] 纯文本查看 复制代码
decode_data(mh_info.enc_code1)

最后就是合成完整的图片路径
[JavaScript] 纯文本查看 复制代码
var base_URL = 'https://www.cocomanhua.com/'
var chapter_image_base_path = base_URL.replace(/:\/\/.+/, '://')
    + mh_info.domain + "/comic/" + encodeURI(chapter_data .imgpath);
chapter_data.image_list = [];

for (; image_NO <= chapter_data.totalimg; image_NO++) {
  var image_url = chapter_image_base_path + (Array(4).join("0") + image_NO).slice(-4) + ".jpg";
  mh_info.image_list.push(image_url);
}

封装js代码完整运行一下代码看下结果

开始爬取漫画
[Python] 纯文本查看 复制代码
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# Time    : 2020/10/28 15:35
# Author  : Amd794
# Email   : [url=mailto:2952277346@qq.com]2952277346@qq.com[/url]
# Github  : https://github.com/Amd794

import re

import execjs

from threading_download_images import get_response


class CoCoManHua(object):
    @staticmethod
    def _cocomanhua(detail_url):
        response = get_response(detail_url)
        data = re.findall('var C_DATA.*?\'(.*?)\'', response.text)[0]
        ctx = execjs.get().compile(open('../js/_cocomanhua.js', encoding='utf-8').read(), cwd='../js/node_modules')
        images_url = ctx.eval(f'getArr("{data}")')
        return images_url


if __name__ == '__main__':
    print(CoCoManHua._cocomanhua('https://www.cocomanhua.com/11701/1/188.html'))

先运行下代码看下能不能得到链接

最后整合到主程序中运行看下效果

测试运行一下

&#8203;
完整代码:https://github.com/Amd794/kanleying
图片加载不出来可以看下:https://blog.amd794.com/blog/detail/12

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
1132978402 + 1 + 1 谢谢@Thanks!
深水夜藏 + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
xq2581 发表于 2020-11-8 16:27
能看什么 动
3#
小木曾雪菜 发表于 2020-11-8 17:03
头像被屏蔽
4#
麦子1995 发表于 2020-11-9 08:55
5#
 楼主| Amd794 发表于 2020-11-9 12:06 |楼主
麦子1995 发表于 2020-11-9 08:55
楼主,麻烦再次修改下帖子,好多图片都没有出来,想学习下

没有啊, 我看得挺正常的
6#
1132978402 发表于 2020-11-10 17:25
老哥, 文章真及时啊 刚刚也在分析到 初始化加载了 __cr.init , 然后发现mh_info变量, 后面看到加密的数据又追到了好像是加密的函数, 就晕了 百度一搜找到了你前两天刚刚发的文章,太及时了,多谢分享 多谢
7#
cjm612 发表于 2020-11-11 22:30
还算可以吧!!
8#
254682429 发表于 2021-5-6 08:45
你好 能帮我配置一下吗  加一下我   254682429
9#
冬日棉田 发表于 2021-5-11 10:38
感谢,正在学习爬虫中
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-21 15:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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