import base64 import json import re import requests def decrypt_tvbox_config(webp_url): """抓取 webp 加密文件并尝试自动解密""" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } print(f"正在从目标地址下载加密文件: {webp_url}...") try: res = requests.get(webp_url, headers=headers, timeout=15) if res.status_code != 200: print(f"❌ 下载文件失败,状态码: {res.status_code}") return None content = res.text.strip() except Exception as e: print(f"❌ 请求失败: {e}") return None print("文件下载成功,正在尝试解密...") # 1. 尝试直接作为 JSON 解析(防止根本没加密,只是换了后缀) try: return json.loads(content) except: pass # 2. 如果是 Base64 变体加密,或者包含特殊字符,先进行清洗 # 绝大多数 TVBox 工具的前端解密核心就是将数据剔除乱码后进行 Base64 解码 try: # 移除可能存在的伪装图片头等杂质,只保留合法 Base64 字符 base64_pattern = re.compile(r"[A-Za-z0-9+/=]+") blocks = base64_pattern.findall(content) if blocks: # 拼接最长的一段,或者尝试全拼接 longest_block = max(blocks, key=len) # 补齐 Base64 填充 missing_padding = len(longest_block) % 4 if missing_padding: longest_block += "=" * (4 - missing_padding) decoded_bytes = base64.b64decode(longest_block) decoded_str = decoded_bytes.decode("utf-8", errors="ignore") # 提取其中完整的 {} JSON 结构 json_match = re.search(r"\{.*\}", decoded_str, re.DOTALL) if json_match: return json.loads(json_match.group(0)) except Exception as e: print(f"⚠️ 自定义 Base64 解密尝试失败: {e},将尝试调用解密网站接口...") # 3. 如果本地算法没解开,直接调用 2015888.xyz 网站背后的通用 API 接口 # 模拟请求它的后台解密引擎 api_url = "https://master.2015888.xyz/api/jiemi" # 对应 /jiemi/ 页面的公共后台 # 如果抓包发现是直接请求另一个接口,也可以替换它 payload = {"url": webp_url, "content": content} try: api_res = requests.post( "https://master.2015888.xyz/jiemi/", data=payload, headers=headers ) # 如果网站是用传统的 Form 表单或者特定的参数,可以通过正则匹配它返回的 textarea 内容 match = re.search(r"]*>(.*?)", api_res.text, re.S) if match: return json.loads(match.group(1).strip()) except: pass # 4. 后备兜底:由于你在上一步截图里已经能完美显示了,说明目前该网站纯支持外部调用 # 如果遇到特殊魔改的 AES 加密,我们可以通过传入内容让它返回 print("❌ 无法自动还原,请检查该加密源是否更新了高强度的自定义Key。") return None if __name__ == "__main__": # 你的目标 webp 订阅源 target_url = "http://itv666.cc/aowu/config.webp" config_data = decrypt_tvbox_config(target_url) if config_data: # 规范化保存为本地 JSON 文件 output_file = "tvbox_config.json" with open(output_file, "w", encoding="utf-8") as f: json.dump(config_data, f, ensure_ascii=False, indent=2) print(f"🎉 成功!解密后的影视源已保存到本地: {output_file}") else: print("❌ 解密失败。")