找回密码
  注册[Register]
查看: 299|回复: 9

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

[复制链接]
发表于 2022-5-27 22:07 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

想看一个动漫,因为是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/


以下为源码:
[Python] 纯文本查看 复制代码
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[0])
    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))


[JavaScript] 纯文本查看 复制代码
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[str.charCodeAt(i++) & 0xff]
        } while (i < len && c1 == -1);
        if (c1 == -1)
            break;
        do {
            c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
        } 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[c3]
        } 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[c4]
        } 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!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-27 22:29 | 显示全部楼层
谢谢大佬分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-27 22:33 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-27 23:04 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-27 23:16 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 00:09 | 显示全部楼层
感谢楼主分享!大牛有你更精彩!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 05:29 来自手机 | 显示全部楼层
感谢大佬分享,大佬666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 06:49 | 显示全部楼层
顶帖是一种态度,也是一种尊重。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-5-28 09:21 | 显示全部楼层
谢谢分享,必须支持
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|大牛论坛 |我的广告

GMT+8, 2024-5-5 00:22 , Processed in 0.044297 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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