游铛铛-技术方案-客户端.md 3.3 KB

游铛铛客户端技术方案

一、技术栈

  • 语言:Python 3.10+
  • UI框架:PyQt6
  • 浏览器:Playwright + 内置Chrome
  • 加密:cryptography (RSA)
  • 打包:PyInstaller
  • 保护:PyArmor + Nuitka

二、界面设计

2.1 登录界面

  • Logo、产品名称、底部版权信息
  • 产品公告展示
  • 登录表单(用户名、密码)
  • 注册表单(用户名、密码、邮箱、卡密)
  • 机器解绑功能

2.2 操作界面

头部区域

  • Logo、产品名称
  • 有效期显示
  • 用户名
  • 退出按钮

内容区域

  • 左侧菜单:充值、Steam账号绑定、选品、扫货、公告
  • 右侧Tab页:点击菜单打开对应Tab,已存在则定位到该Tab

三、核心功能

3.1 登录注册

  • 登录:用户名+密码,验证机器码
  • 注册:用户名+密码+邮箱+卡密,首次绑定机器码
  • 机器码绑定:注册时绑定,登录时验证
  • 机器解绑:输入用户名+密码解绑
  • 免登录:登录成功后保存,卡密到期或手动退出后失效

3.2 扫货模块(核心难点)

  • 内置Chrome浏览器(~120MB)
  • 支持安装Chrome插件
  • Playwright自动化操作
  • 数据抓取和处理

3.3 Steam集成

  • Steam账号绑定
  • Steam Guard验证码生成
  • 交易确认

3.4 心跳检测

  • 定时请求后端API(如每30秒)
  • 检测卡密是否过期
  • 过期后自动退出登录

四、安全机制

4.1 接口加密

  • 所有API请求使用RSA加密
  • 客户端使用公钥加密
  • 服务端使用私钥解密

4.2 密钥轮换

  • 每10天自动获取新公钥
  • 支持密钥平滑切换

4.3 机器码绑定

  • 获取硬件信息生成唯一机器码
  • 注册/登录时验证机器码
  • 防止多机使用

4.4 代码保护

  • PyArmor混淆Python代码
  • Nuitka编译核心模块为二进制
  • 防止逆向工程

五、技术实现要点

5.1 窗口管理

# 窗口可拖拽调整大小
self.setWindowFlags(Qt.Window)
self.setMinimumSize(800, 600)

# 一键全屏/最小尺寸
def toggle_fullscreen(self):
    if self.isFullScreen():
        self.showNormal()
    else:
        self.showFullScreen()

5.2 Tab页管理

# Tab页去重逻辑
def open_tab(self, menu_name):
    for i in range(self.tab_widget.count()):
        if self.tab_widget.tabText(i) == menu_name:
            self.tab_widget.setCurrentIndex(i)
            return
    # 创建新Tab
    new_tab = self.create_tab(menu_name)
    self.tab_widget.addTab(new_tab, menu_name)

5.3 内置浏览器

# 使用Playwright启动内置Chrome
from playwright.sync_api import sync_playwright

playwright = sync_playwright().start()
browser = playwright.chromium.launch(
    executable_path="./chrome/chrome.exe",
    headless=False
)
context = browser.new_context()
page = context.new_page()

5.4 机器码生成

import hashlib
import platform
import uuid

def get_machine_code():
    # 获取硬件信息
    mac = uuid.getnode()
    cpu = platform.processor()
    machine = platform.machine()
    
    # 生成唯一机器码
    info = f"{mac}{cpu}{machine}"
    return hashlib.md5(info.encode()).hexdigest()

六、数据存储

  • 配置文件:用户信息、免登录凭证(加密存储)
  • 缓存:浏览器数据、插件数据
  • 日志:操作日志、错误日志