import base64 import hashlib import json import random import time from pathlib import Path from urllib.parse import parse_qsl, urlsplit import requests from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from tabulate import tabulate from wasmer_compiler_cranelift import Compiler from wasmer import Store, Type, Function, Memory, Module, ImportObject, engine, Instance, Table from pywidevine.L3.cdm import deviceconfig from pywidevine.L3.decrypt.wvdecryptcustom import WvDecrypt from tools import rsa_dec, aes_decrypt, djb2Hash, b64decode, sha1withrsa, updata_yaml, dealck, get_size class Txckey: def __init__(self): appCodeName = 'Mozilla' appName = 'Netscape' appVersion = 'Win32' platform = 'Win32', self.appCodeName = appCodeName self.appName = appName self.appVersion = appVersion self.platform = platform self.userAgent = "mozilla/5.0 (windows nt 10.0; win64; x64) applewebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36" self.key = "2A5AA60178AA6C8DA662E443773A6C4E" self.iv = "CFAC216FAA2D396013575D4055C63350" self.ptrs = [] self.pr = None self.table = None self.memory = None self.func = None wasmBinaryFile = "data:application/octet-stream;base64," \ "AGFzbQEAAAABwgEbYAF/AX9gAn9/AGADf39/AGACf38Bf2ABfwBgA39/fwF/YAAAYAR/fn9/AX9gA39/fgF/YAZ/f35" \ "/fn8Bf2AFf39/f38AYAZ/fH9/f38Bf2ADf39+AGAEf39/fwBgAn9+AGAGf39/f39/AX9gAAF+YAR/f39+AGAEf39/fwF" \ "/YAABfGAAAX9gCn9/f39/f39/f38Bf2ACfH8BfGAIf39/f39/f38AYAl/f39/f39/f38Bf2AFf39" \ "/f38Bf2ACfn8BfwIpBANoYzIDNkdqAAYDaGMyA3h1WAACA2hjMgMyZmIAEwNoYzIDRWpXAAADV1YOAQAEAAoCAAEDAgACDwEAAwYAAQECAAQEAAAACwQDCAUMABABAAUCABESAQEAAAECAQACAA0BAhQVFgAAFwwDAgoBABgHAAACBgQZAAkCDRoBAgABAgQFAXABCQkFBgEBgAKAAgYIAX8BQcCUBAsHTw0DY3NwAgADSk9qAE0Db3RtAD0DZ0RwAAsDNHlUAQADdENqAB0DMnpRABwDYlc4ADwDWU9kAE4DWmhuAB8DSmpGAE8DWVRpABEDNTVCAEgJDgEAQQELCBQjDUlRIDMkCrCWAlbaAQEBfyMAQRBrIgIgADYCDCACIAE3AwAgAigCDCACKQMAPAAAIAIgAikDAEIIiDcDACACKAIMIAIpAwA8AAEgAiACKQMAQgiINwMAIAIoAgwgAikDADwAAiACIAIpAwBCCIg3AwAgAigCDCACKQMAPAADIAIgAikDAEIIiDcDACACKAIMIAIpAwA8AAQgAiACKQMAQgiINwMAIAIoAgwgAikDADwABSACIAIpAwBCCIg3AwAgAigCDCACKQMAPAAGIAIgAikDAEIIiDcDACACKAIMIAIpAwA8AAcLNQEBfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIAIoAgghACACKAIMEBYgADYCBCACQRBqJAALDQAgABATGkHv////Bws8AQF/IwBBEGsiASQAIAEgADYCDCABKAIMIgAgAUELaiABQQpqECsjAEEQayAANgIMIAAQISABQRBqJAALNwEBfyMAQRBrIgEkACABIAA2AgwCfyABKAIMIgAQP0EBcQRAIAAQJgwBCyAAEBoLIAFBEGokAAtvAQF/IwBBgAJrIgUkAAJAIAIgA0wNACAEQYDABHENACAFIAFB/wFxIAIgA2siA0GAAiADQYACSSIBGxAqGiABRQRAA0AgACAFQYACEFkgA0GAAmsiA0H/AUsNAAsLIAAgBSADEFkLIAVBgAJqJAALhAEBAX8jAEEQayIDJAAgAyAANgIMIAMgATYCCCADIAI2AgQgAygCBCgCAEEEakGAEEkEQCADKAIMIAMoAgQoAgBqIAMoAggiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AgAgAygCBCI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gACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALigEBAX8jAEEQayIDJAAgAyAANgIMIAMgATYCCCADIAI2AgQjAEEQayIAIAMoAgwiATYCCCAAKAIIGiMAQRBrIgAkACAAIAE2AgggACgCCCECIwBBEGsiASQAIAEgAjYCDCMAQRBrIgIgASgCDDYCDCACKAIMGiABQRBqJAAgAEEQaiQAIANBEGokAAsiAQF/IwBBEGsiASQAIAEgADYCDCABKAIMEDEgAUEQaiQAC5AcAQF/IwBB8AFrIgQkACAEIAA2AuwBIAQgATYC6AEgBCACNgLkASAEIAM3A9gBIARBADYCVCAEKQPYAUIAUgRAIAQpA9gBQsD/////B1YEQBAAAAsgBCAEKALsASgCADYClAEgBCAEKALsASgCBDYCkAEgBCAEKALsASgCCDYCjAEgBCAEKALsASgCDDYCiAEgBCAEKALsASgCEDYChAEgBCAEKALsASgCFDYCgAEgBCAEKALsASgCGDYCfCAEIAQoAuwBKAIcNgJ4IAQgBCgC7AEoAiA2AnQgBCAEKALsASgCJDYCcCAEIAQoAuwBKAIoNgJsIAQgBCgC7AEoAiw2AmggBCAEKALsASgCMDYCZCAEIAQoAuwBKAI0NgJgIAQgBCgC7AEoAjg2AlwgBCAEKALsASgCPDYCWANAIAQpA9gBQsAAVARAIARBEGoiAEIANwMAIABBOGpCADcDACAAQTBqQgA3AwAgAEEoakI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gBUL///////////8AgyIDQoCAgICAgMCAPH0gA0KAgICAgIDA/8MAfVQEQCAFQgSGIARCPIiEIQMgBEL//////////w+DIgRCgYCAgICAgIAIWgRAIANCgYCAgICAgIDAAHwhAgwCCyADQoCAgICAgICAQH0hAiAEQoCAgICAgICACFINASACIANCAYN8IQIMAQsgBFAgA0KAgICAgIDA//8AVCADQoCAgICAgMD//wBRG0UEQCAFQgSGIARCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiADQv///////7//wwBWDQBCACECIANCMIinIglBkfcASQ0AIABBEGohASAEIQIgBUL///////8/g0KAgICAgIDAAIQiAyEGAkAgCUGB9wBrIghBwABxBEAgAiAIQUBqrYYhBkIAIQIMAQsgCEUNACAGIAitIgeGIAJBwAAgCGutiIQhBiACIAeGIQILIAEgAjcDACABIAY3AwgCQEGB+AAgCWsiAUHAAHEEQCADIAFBQGqtiCEEQgAhAwwBCyABRQ0AIANBwAAgAWuthiAEIAGtIgKIhCEEIAMgAoghAwsgACAENwMAIAAgAzcDCCAAQQhqKQMAQgSGIAApAwAiBEI8iIQhAiAAKQMQIABBGGopAwCEQgBSrSAEQv//////////D4OEIgRCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyAEQoCAgICAgICACFINACACQgGDIAJ8IQILIABBIGokACACIAVCgICAgICAgICAf4OEvzkDAAvYAgEHfyMAQRBrIgYkACAGQQhqIQcjAEEgayIEJAAjAEEQayIDJAAjAEEQayIFIAE2AgwgAyAFKAIMNgIMIwBBEGsiBSABIAJqNgIMIAMgBSgCDDYCCCAEQRhqIgIgA0EMaigCADYCACACIANBCGooAgA2AgQgA0EQaiQAIAQoAhghAyAEKAIcIQgjAEEQayICIAA2AgwgAigCDCEJIAIkACAIIANrIQUgAyAIRwRAIAkgAyAFEFYLIAIgAyAFajYCDCACIAUgCWo2AgggBEEQaiIDIAJBDGooAgA2AgAgAyACQQhqKAIANgIEIAJBEGokACAEIAEgBCgCECMAQRBrIgIgATYCDCACKAIMa2o2AgwgBCAAIAQoAhQgAiAANgIMIAIoAgx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PCRBTIABBiBFqQgA3AwAgAEGAEWpCADcDACAAQgA3A/gQIABCADcD8BACQCAAKALYEUGAEEsEQCAEQa0IEDAgAEEBNgLcEQwBCyAAQUBrIgNBAEGAEBAqGiAAQegQaiIFQbAJKQAANwAAIABBwBBqIgFBGGpBhgkpAAA3AAAgAUEQakH+CCkAADcAACABQQhqQfYIKQAANwAAIAFB7ggpAAA3AAAgAEGUEWoiAhAsIQsgAhAerSEfIwBB0ABrIgIkACACIAM2AkwgAiAAQThqNgJIIAIgCzYCRCACIB83AzggAkG8CTYCNCACQhA3AyggAkEANgIkIAIgBTYCICACIAE2AhwgAkIANwMQIAIpAzhCb1YEQBAAAAsgAigCTCIBIQMgAikDOCIfpyABaiEFIAIoAkQhCyACKAI0IQwgAikDKCEgIAIoAiQhEiACKAIgIRMgAigCHCEUIwBBkANrIgEkACABIAM2AowDIAEgBTYCiAMgAUEANgKEAyABIAs2AoADIAEgHzcD+AIgASAMNgL0AiABICA3A+gCIAEgEjYC5AIgASATNgLgAiABIBQ2AtwCIAEoAuACIQUgASgC3AIhDCMAQSBrIgMkACADIAFBEGoiCzYCHCADQsAANwMQIAMgBTYCDCADIAw2AgggAygCHCADKQMQIAMoAgwgAygCCEH4DigCACgCABEHABogA0EgaiQAIwBBEGsiAyQAIAMgAUHQAGoiBTYCDCADIAs2AgggAygCDCADKAIIQewOKAIAKAIAEQMAGiADQRBqJAAgC0HAABAXIAUgASgC9AIgASkD6AIQJSABQQhqIgsgASkD6AIQBCAFIAtCCBAlIAEoAowDIQwgASgCgAMhEiABKQP4AiEfIAEoAuACIRMgASgC3AIhFCMAQTBrIgMkACADIAw2AiwgAyASNgIoIAMgHzcDICADIBM2AhwgA0IBNwMQIAMgFDYCDCADKAIsIAMoAiggAykDICADKAIcIAMpAxAgAygCDEH4DigCACgCBBEJABogA0EwaiQAIAUgASgCjAMgASkD+AIQJSALIAEpA/gCEAQgBSALQggQJSABKAKIAyELIwBBEGsiAyQAIAMgBTYCDCADIAs2AgggAygCDCADKAIIQewOKAIAKAIIEQMAGiADQRBqJAAgBUGAAhAXIAEoAoQDBEAgASgChANCEDc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" if wasmBinaryFile.startswith("data:application/octet-stream;base64,"): wasm_file = base64.b64decode(wasmBinaryFile.split(",")[1]) else: wasm_file = Path(wasmBinaryFile).read_bytes() self.wasm_file = wasm_file self.store = Store(engine.JIT(Compiler)) self.module = Module(self.store, self.wasm_file) self.import_object = ImportObject() self.register() self.asm = Instance(self.module, self.import_object) self.exports = self.asm.exports self.gen_export_object() self.gen_func() def gen_func(self): func = { "free": self.func["k"], "malloc": self.func["j"], } self.func.update(func) def gen_func(self): func = { "free": self.func["2zQ"], "malloc": self.func["tCj"], } self.func.update(func) def malloc(self, length): ptr = self.func["malloc"](length) self.ptrs.append(ptr) return ptr def free(self, ptr): if isinstance(ptr, list): for i in ptr: self.free(i) else: self.func['free'](ptr) def free_all(self): self.free(self.ptrs) self.ptrs = [] def ccall(self, func_name: str, returnType: 'type', *args): def convertReturnValue(_ptr: int): if returnType == str: return self.UTF8ToString(_ptr) elif returnType == bool: return bool(returnType) return _ptr stack = 0 _args = [] for arg in args: if isinstance(arg, str): max_write_length = len(arg) + 64 ptr = self.malloc(max_write_length) if len(arg) >= 30: self.pr = ptr self.stringToUTF8(arg, ptr, max_write_length) _args.append(ptr) elif isinstance(arg, list): max_write_length = len(arg) + 8 ptr = self.malloc(max_write_length) self.writeArrayToMemory(arg, ptr, max_write_length) _args.append(ptr) else: _args.append(arg) ptr = self.func[func_name](*_args) ret = convertReturnValue(ptr) return ret @staticmethod def _abort(): pass def _emscripten_memcpy_big(self, dest: int, src: int, num: int = None): if num is None: num = len(self.memory.uint8_view()) - 1 self.memory.uint8_view()[dest:dest + num] = self.memory.uint8_view()[src:src + num] def _emscripten_resize_heap(self, param_0: int) -> int: return 0 def gettm(self) -> 'f64': return float(time.time()) def EjW(self, param_0: int) -> int: return 0 def gen_import_object(self): a = { "6Gj": Function(self.store, self._abort), "xuX": Function(self.store, self._emscripten_memcpy_big), "2fb": Function(self.store, self.gettm), "EjW": Function(self.store, self.EjW), } tximport = { "hc2": a, } return tximport def gen_export_object(self): func = dict() for (k, v) in self.exports: if isinstance(v, Function): func[k] = v elif isinstance(v, Memory): setattr(self, "memory", v) elif isinstance(v, Table): setattr(self, "table", v) # print(k, v.type) self.func = func def register(self): for i in self.gen_import_object(): self.import_object.register(i, self.gen_import_object()[i]) def stringToUTF8(self, data: str, ptr: int, max_write_length: int): _data = data.encode('utf-8') write_length = len(_data) if write_length == 0: self.memory.uint8_view()[ptr] = 0 _data = _data + b'\0' * (max_write_length - write_length) uint8 = self.memory.uint8_view(offset=ptr) uint8[0:max_write_length] = _data def UTF8ToString(self, ptr: int) -> str: if ptr > 0: _memory = self.memory.uint8_view(offset=ptr) data = [] index = 0 while _memory[index] != 0: data.append(_memory[index]) index += 1 return bytes(data).decode('utf-8') else: return '' def writeArrayToMemory(self, array: list, ptr: int, max_write_length: int): array = array + [0] * (max_write_length - len(array)) self.memory.uint8_view()[ptr, ptr + max_write_length] = array def __del__(self): self.free_all() del self.ptrs def gen_key(self, *args): return self.ccall("otm", str, *args) def ckey(self, ): pass def aesenc(self, data: str): key = bytes.fromhex(self.key) iv = bytes.fromhex(self.iv) cipher = AES.new(key, AES.MODE_CBC, iv) data = pad(data.encode('utf-8'), 16) return cipher.encrypt(data).hex().upper() def aesdec(self, data: str, key=None, iv=None): key = bytes.fromhex(self.key) iv = bytes.fromhex(self.iv) cipher = AES.new(key, AES.MODE_CBC, iv) data = bytes.fromhex(data) return unpad(cipher.decrypt(data), 16).decode('utf-8') @staticmethod def get_hash(s): h = 0 for c in s: h = (h << 5) - h + ord(c) return str(h & 0xffffffff) def ckey81(self, vid, tm, appVer='3.5.57', guid='', platform="10201", url="https://v.qq.com/x/cover/mzc00200b4jsdq6/l00469csvi7.html"): url = url[0:48] navigator = self.userAgent[0:48] appCodeName = self.appCodeName appName = self.appName platforma = self.platform s = "|" + "|".join( [vid, tm, "mg3c3b04ba", appVer, guid, platform, url, navigator, url, appCodeName, appName, platforma, "00"]) + "|" s = "|" + self.get_hash(s) + s return s @staticmethod def roundstr(mun: int = 32): return ''.join(random.sample('ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba1234567890', mun)) @staticmethod def md5str(a: str): return hashlib.md5(a.encode()).hexdigest() def ckey85(self, vid, appVer="1.26.3", guid="", platform="10201", h38=""): data = { "vid": vid, "nonce": "", "rand": "", "appVer": appVer, "guid": guid, "platform": platform, } ts = str(int(time.time())) data["ts"] = ts nonce = self.roundstr(11) rand = self.md5str(nonce + "1234")[:8] data["rand"] = rand data["nonce"] = nonce ckey = json.dumps(data, separators=(',', ':')) enc = self.aesenc(ckey) ckey = "--01" + enc return ckey def ckey92(self, tm, vid, appVer="1.28.2", guid="", h38="", url="https://v.qq.com/x/cover/mzc002006w8m6hk/u0047t48n6f.html", platform=10201, l="{\"cp\":\"59zexbw7hg\",\"csal\":[\"m5h0zchrh5\"]}", r="{\"ea\":3,\"spa\":1,\"hwdrm\":4,\"hwacc\":1}"): url = url[0:48] s = url + "|mozilla/5.0 (windows nt 10.0; win64; x64) applew|https://v.qq.com/channel/tv|Mozilla|Netscape|Win32" data = [platform, appVer, vid, "", guid, s, l, r, h38, int(tm)] ckey = self.gen_key(*data).split('|') for i in ckey: if ckey.count(i) == 1: ckey = i break if i == ckey[-1]: ckey = ckey[5] return ckey class TX: def __init__(self, ck): self.ckey = Txckey() self.guid = None self.h38 = None self.ck = ck self.key = "-----BEGIN RSA PRIVATE KEY-----\n" + "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOG98XlIossYaXk4RHWOZutQEo1wvC4GHMNFBsYhGVbJgPVAF7SM6rPIkC/efoJ9qHYPcYGhh5LdB/FZkBkj8neeKT76+7CZkMYoolYS5gGLg4IgxTDS7uVoKMRLXQSKJxfEGLDlGKZ+oqQmW7hVUMTsYnsn+6WTk+P4FRTWO2uPAgMBAAECgYBKBbDS5mCLXFvppeu86I8TBlSvEJKEPPjdhxrriRr3/GdPBE9BoxurDE9LgxfUzkOZQwMjUMZWACiEmavIsqLkvM2Ld7WCQ6oiO739xZkQsgX/M0X7f1lcldLB2kHEsglWWexGoK68KD99HufHK+6QAnIL+AVhpE7cDXCmtK++AQJBAPGO6as8+3Vnm10ruCPt23FmrZlxpKA5LVzW9m0adPFWbPMJJFvI0oI9eJVhMYa9uFcRhdO0YSyrkUKvoAS7OIECQQDvPPWvy719Z5cIjE2yFh4DKS5JRZnPZZia2XGnOotbwEt6SFFFqASyR5xfh+1gjbaJ/6mQlli0YWvjWK8ylRwPAkEA4epkFffBwer1Pi0+WbQCcUuzfnfvnL389ABDloSQ7ImE+cQKEiF+57nwBd1RwY+8UQodXIMuAuYuw+yXPvWOgQJAJyPQBjzM+ZFTEmDx7SrVKis4mWA7s8SpXNwqTfO0DQS+1Hi0YzMD4a75lF+GpH9K1/Tt5uvSA2DU59MAhsQCXQJABelyNLFk6bf4n8CYAlOCZ7JCh3pUfbZ5mkuj6VmROzjXzRrT9B/tezNK7nEeUstVTiwl/DMXYCCwVXkLCvq9Bw==\n" + "-----END RSA PRIVATE KEY-----\n" self.logintoken = { "access_token": "", "appid": "", "vusession": "", "openid": "", "vuserid": "", "video_guid": "", "main_login": "" } self.headers = { "User-Agent": self.ckey.userAgent, "Referer": "https://v.qq.com", "Cookie": self.ck, } self.re = requests.session() self.re.headers.update(self.headers) self.login() def login(self): cookie = dealck(self.ck) for i in self.logintoken: self.logintoken[i] = cookie.get(i) or cookie.get("vqq_" + i) self.h38 = cookie.get("_qimei_h38", "") self.guid = cookie.get("video_guid", "") url = 'https://access.video.qq.com/user/auth_refresh' params = { "vappid": "11059694", "vsecret": "fdf61a6be0aad57132bc5cdf78ac30145b6cd2c1470b0cfe", "type": "qq", "g_tk": "", "g_vstk": djb2Hash(self.logintoken["vusession"]), "g_actk": djb2Hash(self.logintoken["access_token"]), "_": str(int(time.time() * 1000)), } data = self.re.get(url, params=params).text data = json.loads(data.split("=")[1]) access_token = data["access_token"] vusession = data["vusession"] self.ck = self.ck.replace(self.logintoken["access_token"], access_token) self.ck = self.ck.replace(self.logintoken["vusession"], vusession) ck=self.ck.replace("vqq_", "") self.logintoken["access_token"] = access_token self.logintoken["vusession"] = vusession self.headers = { "User-Agent": self.ckey.userAgent, "Referer": "https://v.qq.com", "Cookie": ck, } self.re.headers.update(self.headers) updata_yaml("txck", self.ck) def wv(self, pssh, lic_url): def ke(): wvdecrypt = WvDecrypt(init_data_b64=pssh, cert_data_b64="", device=deviceconfig.device_android_generic) bcert_b64 = wvdecrypt.get_challenge() lrs = sha1withrsa(self.key, bcert_b64) data = [ 10201, "1.28.2", "", "", self.guid, "https://v.qq.com/x/cover/v2098lbuihuqs11/u00315w|mozilla/5.0 (windows nt 10.0; win64; x64) applew|https://v.qq.com/|Mozilla|Netscape|Win32", '{"cp":"59zexbw7hg","csal":["m5h0zchrh5"],"lrs":"' + lrs + '"}', '{"ea":3,"spa":1}', self.h38, int(time.time()) ] ckey = self.ckey.gen_key(*data).split('|')[5] url = lic_url.split("?")[0] dic["ckey"] = ckey dic["encrypt_ver"] = "9.2" dic['app_ver'] = "1.28.2" self.re.headers["Referer"] = "https://v.qq.com/" widevine_license = self.re.post(url=url, data=bcert_b64, params=dic) data = widevine_license.json() code = data["code"] if code != 0: print(data) return None data = data["anc"] data = self.dec_res(data, 2) ke(data) dic = dict(parse_qsl(urlsplit(lic_url).query)) dic["version"] = "1" ke() def dec_res(self, data: str, c=1): data = json.loads(b64decode(data)) rc = b64decode(data["rc"]) aanc = b64decode(data["aanc"]) anc = b64decode(data["anc"]) key, iv = eval(rsa_dec(self.key, rc))["algo_params"] algo_list = eval(aes_decrypt(key.encode(), aanc, iv.encode()).decode())["algo_list"] key, iv = algo_list[0]["algo_params"] if c == 1: data = json.loads(aes_decrypt(key.encode(), anc, iv.encode()).decode()) else: data = base64.b64encode(aes_decrypt(key.encode(), anc, iv.encode())).decode() return data def get(self, vid=None, url="https://v.qq.com/x/cover/mzc002007qle9m2/x0047r3k6wy.html", defn="hdr10"): vid = url.split("/")[-1].split(".")[0] if vid is None else vid tm = int(time.time()) ckey = self.ckey.ckey92(tm=tm, vid=vid, guid=self.guid, h38=self.h38, url=url) params = { "vid": vid, "defn": defn, "ehost": url, "refer": url, "guid": self.guid, "cKey": ckey, "logintoken": json.dumps(self.logintoken, separators=(',', ':')), "tm": tm, "charge": "0", "otype": "ojson", "spau": "1", "spwm": "1", "sphls": "2", "host": "v.qq.com", "sphttps": "1", "encryptVer": "9.2", "clip": "4", "flowid": "", "sdtfrom": "v1010", "appVer": "1.28.2", "unid": "", "auth_from": "", "auth_ext": "", "fhdswitch": "0", "spsrt": "2", "lang_code": "0", "spvvpay": "1", "spadseg": "3", "spm3u8tag": "67", "spmasterm3u8": "3", "drm": "40", "platform": "10201", "dtype": 3, "spav1": 15, "hevclv": 28, "spsfrhdr": 100, "spvideo": 1044, "spaudio": 70, "defnpayver": 7 } response = self.re.get("https://h5vv6.video.qq.com/getinfo", params=params) data = response.json() if "anc" in data: anc = data["anc"] data = self.dec_res(anc) return data @staticmethod def get_list(url): def get_video_data(data, ret=[]): cookies = { "appid": "wxa75efa648b60994b", "vversion_name": "8.2.95.1", "video_bucketid": "4", "video_omgid": "" } params = { "video_appid": "3000002", "guid": "", "vplatform": "5", "callerid": "3000002" } headers = { "Accept-Encoding": "gzip,compress,br,deflate", "Connection": "keep-alive", "Host": "pbaccess.video.qq.com", "Referer": "https://servicewechat.com/wxa75efa648b60994b/629/page-frame.html", "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.42(0x18002a2e) NetType/WIFI Language/zh_CN", "content-type": "application/json" } url = "https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData" response = requests.post(url, headers=headers, cookies=cookies, params=params, data=data) response_data = response.json() module_list_datas = response_data['data']['module_list_datas'] for module_list_data in module_list_datas: module_data = module_list_data['module_datas'][0] if module_data['module_params']['module_type'] == "episode_list": has_next = module_data['module_params']['has_next'] item_datas = module_data['item_data_lists']['item_datas'] for item_data in item_datas: item_type = item_data['item_type'] if int(item_type) == 23: print(item_data['item_params']['sub_title']) continue item_params = item_data['item_params'] play_type = item_params['play_type'] if int(play_type) != 1: continue cover_c_title = item_params['cover_c_title'] play_title = item_params['play_title'] vid = item_params['vid'] # defn = eval(item_params['defn']) # defn = sorted(defn.items(), key=lambda x: x[1], reverse=True) ret.append([cover_c_title, play_title, vid]) if has_next == "true": next_page_context = module_data['module_params']['next_page_context'] data = { "page_params": { "page_type": "detail_operation", "cid": "", "page_id": "vsite_episode_list", "page_context": next_page_context, } } get_video_data(json.dumps(data, separators=(',', ':')), ret) else: break return ret cid = url.split("/")[5].split(".")[0] data = { "page_params": { "page_type": "video_detail", "cid": cid } } data = get_video_data(json.dumps(data, separators=(',', ':'))) return data def run(self, url=None): url = input("输入url:") if url is None else url list = self.get_list(url) print(tabulate(list, headers=['cover_c_title', 'play_title', 'vid'], tablefmt="grid", showindex=range(1, len(list) + 1))) c = input("选择清晰度,多个用逗号隔开:") c = c.split(",") for i in c: viddeodata = list[int(i) - 1] c_title, title, vid = viddeodata data = self.get(vid=vid, url=url) fi = data['fl']['fi'] defn = [] for f in fi: cname = f['cname'] name = f['name'] fs = f['fs'] size = get_size(fs) fn = f['id'] defn.append([fn, name, cname, size, fs]) defn.sort(key=lambda x: x[-1], reverse=True) print(tabulate(defn, headers=['id', 'fn', 'cname', 'size', "rsize"], tablefmt="grid", showindex=range(1, len(defn) + 1))) c = input("选择清晰度,多个用逗号隔开:") c = c.split(",") for i in c: fn = defn[int(i) - 1][1] rr = self.get(vid, url, fn) if fn != "hdr10" else data vi = rr['vl']['vi'][0] ui = vi['ul']['ui'] enc = vi.get("enc") if enc == "1": if "ckc" in vi: lic_url = vi['ckc'] m3u8 = rr['play']['audiolist'][0]['m3u8'] pssh = m3u8.split("base64,")[1].split('",')[0] print(pssh) print("不支持wv") #key = self.wv(pssh, lic_url) elif "base" in vi: tm = data['tm'] base = vi['base'] linkvid = vi['lnk'] appVer = "1.28.2" platform = 10201 print("不支持chacha20") ''' ckey = {"ChaCha20KeyBase64":"AAAAAA==","ChaCha20NonceBase64":"AAAAAA=="} ChaCha20KeyBase64 = ckey["ChaCha20KeyBase64"] ChaCha20NonceBase64 = ckey["ChaCha20NonceBase64"] if ChaCha20KeyBase64.find("AAAAAA") != -1: return None ''' continue m3u8url = "" for a in ui: m3u8url = a['url'] m3u8url = m3u8url if not m3u8url.endswith("/") else m3u8url + a['hls']['pt'] break savepath = f"./download/tx/{c_title}/" cmd = f"N_m3u8DL-RE.exe \"{m3u8url} \" --tmp-dir ./cache --save-name \"{title}\" --save-dir \"{savepath}\" --thread-count 16 --download-retry-count 30 --auto-select --check-segments-count " with open("{}.bat".format(c_title), "a", encoding="utf-8") as f: f.write("chcp 65001\n") f.write(cmd) f.write("\n") print(f"已生成下载脚本{c_title}.bat 请运行下载") if __name__ == '__main__': ck = '' tx = TX(ck) tx.run()