ainio 发表于 2022-5-27 22:07

【JS逆向】樱花动漫下载器

想看一个动漫,因为是2018年的,所以比较难搜,搜到的下载速度也上不去,通过js逆向解密下载地址,写了个m3u8直接下载樱花在线动漫。
【樱花动漫下载器视频演示说明】https://pan.baidu.com/s/1xJj5ugBMROHSlXE3ZOy4CQ?pwd=cskx 提取码: cskx
【樱花动漫下载器下载】https://pan.baidu.com/s/1J3_srEti6GU6-8iocE1UBQ?pwd=9ufm 提取码: 9ufm


使用本程序需要安装Nodejs【Nodejs下载地址】http://nodejs.cn/download/


以下为源码:
import requests
import execjs as js
import re
import json
import os
import subprocess as proc


def get_js_data(url):
    res = requests.get(url)
    data = re.findall(
      r'<script type="text/javascript">var player_aaaa=(.*\d})?</script>', res.text)
    result = json.loads(data)
    url = result['url']
    encrty = result['encrypt']
    return url, encrty


def decode_jsurl(url):
    encodeurl, encrty = get_js_data(url)
    with open(os.path.join(os.path.dirname(__file__), 'jsencrypt.js'), 'r', encoding='utf8') as f:
      code = f.read()
    func = js.compile(code)
    url_result = func.call('get_url', encodeurl, encrty)
    return url_result


def mkdir(path):
    if not os.path.exists(path):
      os.makedirs(path)
    return path


def download(url, num):
    msg = proc.check_call([os.path.join(os.path.dirname(__file__),'download_m3u8.exe'), decode_jsurl(url), '--workDir', mkdir(
      os.path.join(os.path.dirname(__file__), 'download')), '--saveName', num, '--enableDelAfterDone'])
    print(msg)


if __name__ == '__main__':
    # 地址入口
    for num in range(2,13):
      url = 'https://www.xyhdm.cc/vodplay/8052-3-{num}.html'.format(num=num)
      download(url,str(num))

var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);
//函数解密
function base64decode(str) {
    var c1, c2, c3, c4;
    var i, len, out;
    len = str.length;
    i = 0;
    out = "";
    while (i < len) {
      do {
            c1 = base64DecodeChars
      } while (i < len && c1 == -1);
      if (c1 == -1)
            break;
      do {
            c2 = base64DecodeChars
      } while (i < len && c2 == -1);
      if (c2 == -1)
            break;
      out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
      do {
            c3 = str.charCodeAt(i++) & 0xff;
            if (c3 == 61)
                return out;
            c3 = base64DecodeChars
      } while (i < len && c3 == -1);
      if (c3 == -1)
            break;
      out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
      do {
            c4 = str.charCodeAt(i++) & 0xff;
            if (c4 == 61)
                return out;
            c4 = base64DecodeChars
      } while (i < len && c4 == -1);
      if (c4 == -1)
            break;
      out += String.fromCharCode(((c3 & 0x03) << 6) | c4)
    }
    return out
}

// 关键代码
get_url = function (url,encrypt) {
    this.Status = true;
    this.Parse = '';
    if (encrypt == '1') {
      playurl = unescape(url);
      return playurl
    } else if (encrypt == '2') {
      playurl = unescape(base64decode(url));
      return playurl
}}
// data = "JTY4JTc0JTc0JTcwJTczJTNBJTJGJTJGJTYzJTY0JTZFJTJFJTdBJTZGJTc1JTYyJTc1JTc0JTY5JTZFJTY3JTJFJTYzJTZGJTZEJTJGJTMyJTMwJTMyJTMxJTMwJTM3JTMxJTM4JTJGJTZGJTcxJTUxJTc5JTU3JTQ1JTM5JTMxJTJGJTY5JTZFJTY0JTY1JTc4JTJFJTZEJTMzJTc1JTM4";
// encrypt = '2';
// console.log(get_url(data,encrypt))

哎呀哎呀 发表于 2022-5-27 22:07

谢谢@Thanks!

js3251867 发表于 2022-5-27 22:29

谢谢大佬分享

猕猴桃 发表于 2022-5-27 22:33

感谢楼主分享

炽热 发表于 2022-5-27 23:04

谢谢分享!

pistacia 发表于 2022-5-27 23:16

多谢楼主分享

ws1443 发表于 2022-5-28 00:09

感谢楼主分享!大牛有你更精彩!

笑东风丶 发表于 2022-5-28 05:29

感谢大佬分享,大佬666666

123hiha 发表于 2022-5-28 06:49

顶帖是一种态度,也是一种尊重。

今心 发表于 2022-5-28 09:21

谢谢分享,必须支持
页: [1]
查看完整版本: 【JS逆向】樱花动漫下载器