更新某糖破解版忘记保存二维码,于是复活了自动化刷会员金币脚本,并做了个可视化界面

这些应用很少做覆盖更新的,都是全新APP 不过更新之后连用户数据都丢失了还是第一次见,大部分都是绑定设备ID的 别问是什么网站,去代码里找 破解版没有破解 只能靠咱们手搓 界面参考: 复制以下代码,直接到powershell运行就可以安装到桌面了 如果电脑不匹配,用不了的,可以让AI直接帮你把Pyt...
更新某糖破解版忘记保存二维码,于是复活了自动化刷会员金币脚本,并做了个可视化界面
更新某糖破解版忘记保存二维码,于是复活了自动化刷会员金币脚本,并做了个可视化界面

这些应用很少做覆盖更新的,都是全新APP 不过更新之后连用户数据都丢失了还是第一次见,大部分都是绑定设备ID的
别问是什么网站,去代码里找 :melting_face:
破解版没有破解 :melting_face:
只能靠咱们手搓
界面参考:

image

复制以下代码,直接到powershell运行就可以安装到桌面了 如果电脑不匹配,用不了的,可以让AI直接帮你把Python代码写出来 :melting_face:

$path = "$HOME\Desktop\invite_tool.py"; $code = @'
import os
import sys
import subprocess

def bootstrap_dependencies():
    required_libs = {"requests": "requests", "Crypto": "pycryptodome"}
    missing_libs = []
    for module_name, pip_name in required_libs.items():
        try:
            __import__(module_name)
        except ImportError:
            missing_libs.append(pip_name)
    if missing_libs:
        if "pycryptodome" in missing_libs and sys.platform.startswith("win"):
            subprocess.run([sys.executable, "-m", "pip", "uninstall", "-y", "crypto"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
            subprocess.run([sys.executable, "-m", "pip", "uninstall", "-y", "pycryptodome"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
        for lib in missing_libs:
            try:
                subprocess.run([sys.executable, "-m", "pip", "install", "--upgrade", "pip"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
                subprocess.run([sys.executable, "-m", "pip", "install", lib], check=True)
            except Exception:
                sys.exit(1)

bootstrap_dependencies()


import base64
import hashlib
import json
import random
import threading
import time
import tkinter as tk
from tkinter import messagebox, ttk
from concurrent.futures import ThreadPoolExecutor, as_completed
from dataclasses import dataclass
from typing import Any

import requests
import urllib3
from Crypto.Cipher import AES, PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Util.Padding import unpad

urllib3.disable_warnings()
requests.packages.urllib3.disable_warnings()


PUBLIC_KEY_RAW = (
    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgsH82stbCUaE1fTsotU0E2HWU9uQz496NFKgjjHBn"
    "Bzqk9YtYcowNFxaOz6G5Q3bw5j/+0+iAD58/n99ENjFkipiulu30eRiUpHUVFyc+EJ14FLKIXNksQWTu"
    "AivCkIYcDNP42in1nyjdXrpps7klCMm9MeAz8Mm+k9r1MGVJsQIDAQAB"
)

class AtomicCounter:
    def __init__(self) -> None:
        self._value = 0
        self._lock = threading.Lock()
    def inc(self) -> int:
        with self._lock:
            self._value += 1
            return self._value
    @property
    def value(self) -> int:
        with self._lock:
            return self._value

@dataclass(slots=True)
class ApiConfig:
    base_url: str = "https://34.81.42.86:2242"
    macct: str = "sf42"
    ver: str = "1.0"
    os: str = "2"
    user_agent: str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"
    accept: str = "application/json,*/*"
    content_type: str = "application/json; charset=UTF-8"
    timeout: float = 8.0
    aes_key: str = "GcgzsKdDZTumABNz7uujrCfPIk9TQ355"

@dataclass(slots=True)
class ApiResult:
    code: int
    msg: str
    data: Any

class ApiClient:
    def __init__(self, config: ApiConfig, public_key: str) -> None:
        self.config = config
        self.session = requests.Session()
        self.session.verify = False
        self._aes_key = config.aes_key.encode("utf-8")
        self._public_key = RSA.import_key(self._load_public_key(public_key))
        self.session.headers.update({
            "user-agent": config.user_agent,
            "accept": config.accept,
            "content-type": config.content_type,
            "ver": config.ver,
            "os": config.os,
            "macct": config.macct,
        })
    def close(self) -> None:
        self.session.close()
    def set_token(self, token: str | None) -> None:
        if token is None:
            self.session.headers.pop("token", None)
        else:
            self.session.headers.update({"token": token})
    def post_plain(self, path: str, payload: dict[str, Any], params: dict[str, Any] | None = None) -> ApiResult:
        return self._post(path, payload, params=params)
    def post_rsa(self, path: str, payload: dict[str, Any]) -> ApiResult:
        return self._post(path, {"encrypt": self.rsa_encrypt_payload(payload)})
    def rsa_encrypt_payload(self, payload: dict[str, Any]) -> str:
        plain = json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode("utf-8")
        cipher = PKCS1_v1_5.new(self._public_key)
        chunk_size = self._public_key.size_in_bytes() - 11
        encrypted = bytearray()
        for i in range(0, len(plain), chunk_size):
            encrypted.extend(cipher.encrypt(plain[i : i + chunk_size]))
        return base64.b64encode(bytes(encrypted)).decode("ascii")
    def decrypt_response_text(self, raw_text: str) -> dict[str, Any]:
        text = raw_text.strip()
        if text.startswith('"') and text.endswith('"'):
            text = json.loads(text)
        cipher = AES.new(self._aes_key, AES.MODE_ECB)
        plain = unpad(cipher.decrypt(base64.b64decode(text)), AES.block_size).decode("utf-8")
        return json.loads(plain)
    def _post(self, path: str, payload: dict[str, Any], params: dict[str, Any] | None = None) -> ApiResult:
        response = self.session.post(
            f"{self.config.base_url.rstrip('/')}/{path.lstrip('/')}",
            params=params, json=payload, timeout=self.config.timeout,
        )
        response.raise_for_status()
        result = self.decrypt_response_text(response.text)
        return ApiResult(code=result["code"], msg=result["msg"], data=result["data"])
    @staticmethod
    def _load_public_key(raw: str) -> str:
        if "BEGIN PUBLIC KEY" in raw or "BEGIN RSA PUBLIC KEY" in raw:
            return raw
        b64 = "".join(raw.split())
        lines = [b64[i : i + 64] for i in range(0, len(b64), 64)]
        return "-----BEGIN PUBLIC KEY-----\n" + "\n".join(lines) + "\n-----END PUBLIC KEY-----\n"

class ApiService:
    def __init__(self, client: ApiClient) -> None:
        self.client = client
    def login(self, mac: str) -> ApiResult:
        payload = {
            "mac": mac,
            "tips": hashlib.md5(f"{self.client.config.macct}{mac}1".encode("utf-8")).hexdigest(),
            "os": "1",
        }
        return self.client.post_rsa("/front/cluser/c/user/mac/login", payload)
    def bind_refer(self, code: str) -> ApiResult:
        return self.client.post_plain("/front/cluser/c/user/bind/refer", {}, params={"code": code})

def make_uid() -> str:
    raw = f"{time.time()}{random.random()}{threading.get_ident()}"
    uid = hex(hash(raw))[2:]
    return uid if len(uid) == 16 else f"1{uid[:15]}"

def do_invite(refer_code: str, counter: AtomicCounter, total: int, log_callback) -> tuple[bool, str]:
    client = None
    try:
        client = ApiClient(ApiConfig(), PUBLIC_KEY_RAW)
        api = ApiService(client)
        uid = make_uid()
        data = api.login(uid).data
        client.set_token(data["token"])
        result = api.bind_refer(refer_code)
        success = result.code == 0
        msg = result.msg
    except Exception as ex:
        success = False
        msg = str(ex)
    finally:
        if client is not None:
            client.close()
    n = counter.inc()
    log_callback(n, total, success, msg)
    return success, msg

class App:
    def __init__(self, root: tk.Tk) -> None:
        self.root = root
        self.root.title("琉璃暗匣 - 极速推广控制台")
        self.root.geometry("540x440")
        self.root.resizable(False, False)
        self.root.configure(bg="#F5F7FA")
        
        self.style = ttk.Style()
        self.style.theme_use("clam")
        
        # 现代化视觉样式配置
        self.style.configure("TFrame", background="#F5F7FA")
        self.style.configure("Card.TFrame", background="#FFFFFF", relief="flat")
        self.style.configure("TLabel", background="#FFFFFF", font=("Microsoft YaHei", 10), foreground="#2C3E50")
        self.style.configure("Title.TLabel", background="#F5F7FA", font=("Microsoft YaHei", 12, "bold"), foreground="#34495E")
        self.style.configure("Warning.TLabel", background="#F5F7FA", font=("Microsoft YaHei", 9), foreground="#E74C3C")
        
        self.style.configure("TButton", font=("Microsoft YaHei", 10, "bold"), padding=10, background="#E0E6ED", foreground="#2C3E50", borderwidth=0)
        self.style.map("TButton", background=[("active", "#D4DBE4")])
        
        self.style.configure("VIP.TButton", background="#FF4757", foreground="white")
        self.style.map("VIP.TButton", background=[("active", "#FF6B81")])
        
        self.style.configure("Gold.TButton", background="#2ED573", foreground="white")
        self.style.map("Gold.TButton", background=[("active", "#7BED9F")])

        self.running = False
        self.create_widgets()

    def create_widgets(self) -> None:
        # 顶部标题与提示
        header_frame = ttk.Frame(self.root)
        header_frame.pack(fill="x", padx=20, pady=(15, 5))
        ttk.Label(header_frame, text="✨ 极速推广控制台", style="Title.TLabel").pack(anchor="w")
        ttk.Label(header_frame, text="💡 温馨提示:由于网络非对称延迟,当前进度与实际可能存在微小偏差\n具体奖励到账情况,请以 APP 或网页端实际显示为准~", style="Warning.TLabel").pack(anchor="w", pady=(5, 0))

        # 核心卡片区 (白色背景,增加呼吸感)
        card_frame = ttk.Frame(self.root, style="Card.TFrame")
        card_frame.pack(fill="x", padx=20, pady=10, ipadx=15, ipady=15)
        
        # 邀请码输入
        ttk.Label(card_frame, text="专属邀请码:").grid(row=0, column=0, sticky="w", pady=(0, 15))
        self.code_var = tk.StringVar(value="")
        self.entry_code = ttk.Entry(card_frame, textvariable=self.code_var, font=("Consolas", 12, "bold"), width=20, justify="center")
        self.entry_code.grid(row=0, column=1, sticky="w", pady=(0, 15), padx=10)
        
        # 线程设置
        ttk.Label(card_frame, text="并发线程数:").grid(row=1, column=0, sticky="w")
        self.workers_var = tk.StringVar(value="10")
        self.workers_spin = ttk.Spinbox(card_frame, from_=1, to=50, width=5, textvariable=self.workers_var, font=("Consolas", 11))
        self.workers_spin.grid(row=1, column=1, sticky="w", padx=10)

        # 按钮区
        btn_frame = ttk.Frame(self.root)
        btn_frame.pack(fill="x", padx=20, pady=5)
        
        self.btn_vip = ttk.Button(btn_frame, text="💎 刷 180天会员 (100人)", style="VIP.TButton", command=lambda: self.start_task(100))
        self.btn_vip.pack(side="left", expand=True, fill="x", padx=(0, 5))
        
        self.btn_gold = ttk.Button(btn_frame, text="💰 刷 1000金币 (200人)", style="Gold.TButton", command=lambda: self.start_task(200))
        self.btn_gold.pack(side="right", expand=True, fill="x", padx=(5, 0))

        # 进度与日志区
        log_frame = ttk.Frame(self.root)
        log_frame.pack(fill="both", expand=True, padx=20, pady=10)
        
        self.progress_bar = ttk.Progressbar(log_frame, orient="horizontal", mode="determinate")
        self.progress_bar.pack(fill="x", pady=(0, 5))
        
        self.lbl_status = ttk.Label(log_frame, text="就绪。请输入邀请码后点击按钮开始", background="#F5F7FA", font=("Microsoft YaHei", 9), foreground="#7F8C8D")
        self.lbl_status.pack(pady=(0, 5))
        
        self.txt_log = tk.Text(log_frame, font=("Consolas", 9), wrap="word", height=8, bg="#2C3E50", fg="#ECF0F1", insertbackground="white", relief="flat", padx=10, pady=10)
        self.txt_log.pack(side="left", fill="both", expand=True)
        
        scrollbar = ttk.Scrollbar(log_frame, command=self.txt_log.yview)
        scrollbar.pack(side="right", fill="y")
        self.txt_log.config(yscrollcommand=scrollbar.set)

    def write_log(self, text: str) -> None:
        self.txt_log.insert(tk.END, text + "\n")
        self.txt_log.see(tk.END)

    def update_progress(self, current: int, total: int, success: bool, msg: str) -> None:
        self.root.after(0, self._update_ui, current, total, success, msg)

    def _update_ui(self, current: int, total: int, success: bool, msg: str) -> None:
        pct = (current / total) * 100
        self.progress_bar["value"] = pct
        status_text = "OK" if success else "FAIL"
        self.lbl_status.config(text=f"执行中: {current}/{total} | 进度: {pct:.1f}%")
        self.write_log(f"[{current:>3}/{total}] {status_text:4s} | {msg}")

    def start_task(self, count: int) -> None:
        if self.running:
            return
            
        refer_code = self.code_var.get().strip()
        if not refer_code:
            messagebox.showwarning("提示", "请先输入您要推广的专属邀请码!")
            self.entry_code.focus()
            return
            
        try:
            workers = int(self.workers_var.get())
        except ValueError:
            workers = 10
            
        self.running = True
        self.btn_vip.state(["disabled"])
        self.btn_gold.state(["disabled"])
        self.entry_code.state(["disabled"])
        self.workers_spin.state(["disabled"])
        
        self.txt_log.delete("1.0", tk.END)
        self.progress_bar["value"] = 0
        self.lbl_status.config(text="正在初始化线程池...")
        self.write_log(f">>> 开始执行任务:邀请 {count} 人,目标码: {refer_code}")
        
        threading.Thread(target=self._run_backend, args=(refer_code, count, workers), daemon=True).start()

    def _run_backend(self, refer_code: str, count: int, workers: int) -> None:
        counter = AtomicCounter()
        start_time = time.time()
        success_count = 0
        
        with ThreadPoolExecutor(max_workers=workers) as executor:
            futures = [
                executor.submit(do_invite, refer_code, counter, count, self.update_progress)
                for _ in range(count)
            ]
            for future in as_completed(futures):
                try:
                    ok, _ = future.result()
                    if ok:
                        success_count += 1
                except Exception:
                    pass
                    
        elapsed = time.time() - start_time
        self.running = False
        self.root.after(0, self._task_finished, success_count, count, elapsed)

    def _task_finished(self, success: int, total: int, elapsed: float) -> None:
        self.btn_vip.state(["!disabled"])
        self.btn_gold.state(["!disabled"])
        self.entry_code.state(["!disabled"])
        self.workers_spin.state(["!disabled"])
        self.lbl_status.config(text="执行完成!")
        self.write_log("\n" + "=" * 45)
        self.write_log(f" 任务已结束!")
        self.write_log(f" 成功: {success} | 失败: {total - success} | 耗时: {elapsed:.1f}s")
        self.write_log("=" * 45 + "\n")
        messagebox.showinfo("完成", f"刷量任务已完成!\n成功:{success}/{total}\n耗时:{elapsed:.1f}s\n(若出现 FAIL 可能是假失败,请去 APP 刷新查看实际奖励~)")

if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    root.mainloop()
'@; Set-Content -Path $path -Value $code -Encoding utf8

之前刷200人至少要一两分钟,现在最快只需要5秒,成功率仍然不高,并发调小一点可能会好一些
等大家玩儿上了,估计就慢下来了 :melting_face:

6 个帖子 - 4 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文