Commit Graph
117 Commits
Author SHA1 Message Date
yml2213 05b1325a04 清理虎牙登录旧数据依赖并统一动态环境 2026-08-31 17:27:18 +08:00
yml2213 76b14b69b7 修复虎牙手机号登录并统一部署项目名 2026-08-31 16:11:08 +08:00
yml2213 09ab80e062 完成 Ruff 全量清理 2026-08-31 10:55:44 +08:00
yml2213 840af3108e 清理未使用导入和局部变量 2026-08-31 10:31:32 +08:00
yml2213 b58c6b4357 执行 Ruff 安全自动修复 2026-08-31 10:28:14 +08:00
yml2213 2a1d27f953 补充设备画像兜底说明 2026-08-30 23:05:20 +08:00
yml2213 f4ed518b50 统一虎牙 App 登录设备画像 2026-08-30 23:04:28 +08:00
yml2213 47e19ed7b2 style: 统一 Ruff 代码格式 2026-08-30 21:04:52 +08:00
yml2213 c891ac982e type: 收敛测试 schemas 与协议层类型 2026-08-30 20:35:08 +08:00
yml2213 92dc461e52 type: 收窄虎牙 OCR 与登录类型 2026-08-30 20:24:25 +08:00
yml2213 3f97dbe525 type: 收窄虎牙验证与设备注册类型 2026-08-30 20:07:12 +08:00
yml2213 563477fde8 type: 修复虎牙信封解析偏移类型 2026-08-30 20:05:06 +08:00
yml2213 6439dc1942 type: 收窄虎牙 HTTP 与 WSS 客户端类型 2026-08-30 20:04:08 +08:00
yml2213 40e6f482b4 type: 收窄活动客户端响应类型 2026-08-30 19:52:55 +08:00
yml2213 6a16d561d2 type: 收窄豆鱼服务层类型 2026-08-30 19:48:41 +08:00
yml2213 8fe9fdfd8b feat(douyu): 斗鱼任务接入代理 — 应对兑换 IP 频控 (精英手册火爆)
配置源 = 代理配置页 (与 CK 检测/虎牙注册同款), 开关在代理配置页:
- 静态模式: 手填 http/https → 全任务同一代理
- API 模式: 每任务取新代理 (ProxyFetcher, 白名单同步, 1.5s 间隔限速),
  失败降级直连并推送告警
- DouyuActivityClient 支持 proxies (session 级, 覆盖全部请求点;
  trust_env=False 维持不变, 不受环境变量影响)

按拆分后新结构落在 douyu_runner_core.py; 触及精英手册/和平小店/电竞等
全部斗鱼任务出网。三种模式行为断言 + 94 单测通过
2026-08-30 11:19:15 +08:00
yml2213 39b202bc3f refactor(douyu): runner 按功能域拆分 Mixin + 精英手册兑换对齐真机流程 (HAR 审核通过)
拆分: douyu_runner.py (-3186行) → core/bind/manual/gold/donate/goods/xpd 七个
Mixin + 入口聚合类, douyu_batch_registry 供 routers 重导出

精英手册兑换对齐 HAR 抓包 (activity_client +379 行):
- csrf 复用 Cookie 值不再每次 generateCsrf (HAR 实测全程零 csrf 请求),
  仅服务端报 csrf 错误时 force_refresh 重试一次
- pay Referer 补 roomId 对齐浏览器
- 新增手册链路接口: elite_user_info/storedetail/pre_exchange check+confirm/
  subscribe/batch_limit/赠品兑换/自动转换
- resolve_exchange_plan: 浏览器兑换按钮状态机路由 (normal/subscribe/
  pre_exchange/wait/blocked)
- 兑换执行: 人类节奏抖动 → 锁单(火爆重试1次) → 支付分级退避
  (频控 30/60/90s 4次上限, 普错 2/5/10/20s 5次上限, 300s 锁单期 15s 余量,
  可中断睡眠)

测试: 新增 17 项 (csrf 复用语义/状态机路由/Referer), 全量 94 通过;
未夹带代理改动
2026-08-30 11:05:18 +08:00
yml2213 6e17a575dd Revert "fix(douyu): 精英宝典兑换等斗鱼任务接入代理 — 此前全部裸连"
This reverts commit a05ae245bf.
2026-08-30 10:26:17 +08:00
yml2213 a05ae245bf fix(douyu): 精英宝典兑换等斗鱼任务接入代理 — 此前全部裸连
问题: DouyuBatchRunner/_client 创建的 DouyuActivityClient 无 proxies,
trust_env=False 下斗鱼任务(精英宝典兑换/和平小店/电竞/送礼等全部 45 个
请求点)直连本机出口 IP, 代理配置页形同虚设。

- activity_client: __init__ 支持 proxies (session 级, 一次覆盖全部请求)
- douyu_runner: 装载全局代理配置 (与 CK 检测/虎牙注册同源 代理配置页):
  · 静态模式: 配置页手填 http/https → 全任务同一代理
  · API 模式: 每任务从代理 API 取新代理 (ProxyFetcher, 含白名单同步,
    1.5s 最小间隔防打爆), 失败降级直连并推送告警日志
- 验证: 77 单测 OK; 三种模式(静态/API/关闭)行为断言通过
2026-08-30 10:25:16 +08:00
yml2213 239ef91c56 fix(web): 设备绑定页『最后登录』修复 — 登录时间记录下沉到 App 登录本体
- device_profile.record_login(): 登录成功/失败均写 last_login (bound_at 首次绑定)
- HuyaAppPasswordLogin.login() 包装 _login_impl, GUI 批量/行内/CLI 全覆盖
  (此前只有 account_env CLI 路径写元数据, GUI 登录该列全为 '-')
- 修复 _enrich_profile 原地修改导致回写判断失效 (存量 hebe/guid32 被旧代码
  整体回写冲掉后无法自动补齐) — 改为返回新字典
- 存量 6 账号画像已全部补齐 hebe/guid32
2026-08-29 16:59:16 +08:00
yml2213 4f099cc196 fix(huya): 一号一设备补完 — hydevice 设备参数跟随账号画像 + 画像一致性字段下沉
用户实弹测试暴露两个缺口:
1. Hebe/GUID32 全空: 登录路径走 get_profile, 未经过 account_env 补字段
   → _enrich_profile 下沉到 get_profile (幂等, 存量账号自动补齐)
2. sdid 前缀跨账号同源 (0UnHUgv0_qmfD4KAKlwzh...): env.js 是静态设备仿真
   (写死 M2102J2SC), 状态目录隔离只改了'存储', 没改'采集输入'
   → env.js makeEnv(overrides) 支持按画像覆盖 UA/屏幕/机型/Android版本;
     runner 接收 device.json; get_huya_sdid(device_hint=画像);
     下次登录每账号 hydevice 采集输入=各自绑定机型 → sdid 彻底分家
2026-08-29 16:51:41 +08:00
yml2213 bf6dee1850 fix(huya): 🔒 一号一设备缺口修复 — hydevice 指纹状态按账号隔离
日志证据: 两账号 sdid 前缀相同 (0UnHUgv0_qmfD4KAKlwzh...) — get_huya_sdid
默认用全局临时目录, 所有账号共享同一份 hydevice 设备采集状态 → 服务端可
跨账号关联设备, 违背一号一环境。

- device_fingerprint: 新增 account_state_dir(account) → data/huya_fp_states/<账号>/
  (持久化, 同账号多次登录=同一台'设备')
- app_login 扫码绑定四步流 + login.prepare_device: 传入账号级 state_dir
2026-08-29 16:27:35 +08:00
yml2213 9653dbe3ba feat(core/huya): 🎯 一号一环境生产模块 account_env (绑定+登录CLI) + 修复 device_profile HDID NameError
- core/huya/account_env.py: 账号↔设备环境一对一绑定 (幂等画像 + guid32/Hebe_D1-D5
  每账号终身一致字段, 来源 R36 解密真实指纹 JSON), 主流程 bind_and_login +
  CLI (python -m core.huya.account_env 账号 密码)
- device_profile.py: 修复 generate_profile 引用未定义 HDID 的 NameError; HDID32
  注释补 R15/R39 来源 (md5('5008_ver_'+k1), k1=datadiv 常量)
- 实弹验证: 环境指纹走注册链, 服务端签发 t2(180B)/t5(40hex) 
2026-08-29 12:53:58 +08:00
yml2213 9b259537c0 docs(dfp_register): 更正过时警告 — t1.t0 已由 R15 公式破解(ed0db8), 注册链不依赖响应t1 2026-08-29 11:59:25 +08:00
yml2213 eccc00e090 docs/code(huya): 设备标识符命名规范落地 - 全库HDID32/GUID32/DEVID40前缀化去混
- docs/HUYA_ID_NOMENCLATURE.md: 规范总表 + 三条强制规则 + 代码变量对应
- 4 篇主文档头部去混声明 + §11.x 被证伪假设行标注更正
- 代码: GOLDEN_HDID→GOLDEN_HDID32, device_profile.HDID→HDID32, wup_encoder/app_login 注释前缀化
- 后续所有表述必须以 GUID32(doLaunch) / HDID32(登录t1.t0) / DEVID40(t5) 前缀书写
2026-08-28 23:02:21 +08:00
yml2213 6ded82ac8b fix(douyu): reject invalid activity cookies 2026-08-28 15:51:59 +08:00
yml2213 9ee4e49a50 feat(douyu): support elite handbook lock orders 2026-08-28 14:06:11 +08:00
yml2213 45b5e9128c docs(huya): 新增总览去困惑地图 + 代码风险标记 + 真机 Frida 稳定注入通道
- docs/HUYA_APP_OVERVIEW.md: 整体流程/三形态hdid区分/登录入口盘点/随机化矩阵/风险清单/真机Frida现状
- core/huya 各模块 docstring 加风险标记与 hdid 名称混淆提示, 指向总览
- tools/app_login_flow 标注已过时(未接注册链), tools/huya_device_profile 标注与 core 策略关系
- scripts/phone_stable_capture.py + diag_phone_lifecycle.py: 真机 spawn+art_callsite 稳定抓帧/四组诊断
- evidence/diag_phone/: 真机基线/attach/稳定抓帧实验证据 (90s 存活无 EGL 崩)
2026-08-28 10:44:56 +08:00
yml2213 0c86e182b0 feat(huya): 零设备 dfpReport 注册链迁入 core/huya 并接入生产登录
- 新增 core/huya/dfp_register: 随机 4146B cw 生成 + 注册响应解析 (t1/t2/t5),
  修复 JSON 模板 %s 数不匹配的 TypeError bug
- app_login 每次 WUP 登录前执行注册链取新 safedeviceid/device_id,
  不再读取画像旧固定值; 注册失败抛 HuyaAppLoginError 终止, 不静默回退旧链
- device_profile 移除固定 SAFEDEVICEID_DEFAULT, 画像只承载 soft 字段
- tools/huya_device_register 同步零设备生成链路 (--gen/--gen-login)
- 新增 tests/test_huya_dfp_register (9 项), 扩展 test_huya_app_login 注册接线 (4 项)
2026-08-27 17:47:53 +08:00
yml2213 da2cf5a61d feat(huya): 整合 App 协议登录获取 Cookie 全链路并与 Web 登录解耦
- core/huya: 新增 app_login, wup_encoder, nonce_forge, cert_forge, envelope_forge, device_profile, udb_aes
- core/huya/__init__.py: 导出 login_huya_app_password 与 HuyaAppPasswordLogin
- web/backend: 新增 /accounts/app-password-login 与 /accounts/app-password-login/selected 路由及 Schema,与原 Web 密码登录独立分开
- web/frontend: 增加 App 登录 API 与前端界面“App 登录选中”操作,弹窗结果明确区分
- tests: 新增 test_huya_app_login.py 单元测试覆盖全链路
2026-08-26 15:51:30 +08:00
yml2213 c2d578a3e0 hdid 溯源实测: libhydeviceid.so设备ID, 纯代码不可铸造; 共用登录无碍仅设备维度关联风险
- df/collect 响应含40hex hdid(每次新值)但 WUP 登录拒绝(652B) -> 非同一体系
- runner.js 输出 __HDID__, get_huya_sdid 一并返回
- 文档: hdid 来源/可铸造性/共用风险评估 + 设备池方案
2026-08-26 11:01:50 +08:00
yml2213 705c51bf48 feat(huya): 密码登录appId透传修正+风控换IP重试
- _password_payload 改用 self.app_id/self.app_sign(原先硬编码5002,
  导致5008实例静默发错appId)
- app_id=5008 时自动切换 Android WebView UA
- login() 增加换IP重试循环: 扫码/短信风控时经 proxy_fetcher 换代理重试,
  上限 max_ip_retries, 耗尽后返回 code=risk
2026-08-25 11:50:48 +08:00
yml2213 0a060bb777 fix(huya): 风控判定改为按URL路径, strategy=64不再误判为扫码
矩阵实测: 不存在账号/错误密码下发 pt_auth.html(滑块), 正确密码才下发
qr_auth.html(扫码)。旧逻辑把 strategy==64 硬编码当扫码, 把可自动化的
滑块误杀成死路。现仅按 URL 路径 qr_auth 判定。
2026-08-25 11:50:40 +08:00
yml2213 06a0a1e7d3 虎牙登录: 接入hydevice高信任设备指纹与App场景验证支持
- 新增 fingerprint/: node仿真Android WebView运行官方hydevice.js(含WASM加密), 产出与真机同构的高信任sdid
- 新增 device_fingerprint.py: py编排node runner获取sdid, 失败自动降级旧无指纹流程
- login.py: prepare_device优先高信任指纹; 增加App场景常量(appId=5008, appSign=md5(appId+verCode+appKey)[:8], 逆向自APK UdbNetHelper)
- solver: 支持appId/page_url/use_touch_events参数化(App模式); get3使用csid会话id; 识别qr_auth扫码(冷却)与dx_auth短信策略并抛专用异常
2026-08-23 17:32:34 +08:00
yml2213 e2a45b7893 优化斗鱼充值日志与配置 2026-08-14 11:27:53 +08:00
yml2213 0bf69c1240 优化斗鱼充值 2026-08-13 21:43:27 +08:00
yml2213 902e669614 功能: 接入鱼翅供应商直充渠道 2026-08-13 21:11:20 +08:00
yml2213 420ee3d95c 功能: 增加鱼翅直充接口基础层 2026-08-13 16:44:20 +08:00
yml2213 ba35ac5c0d fix: preserve xpd role platform in wallet queries 2026-08-09 10:06:57 +08:00
yml2213 a342dddcb6 feat: add xpd purchase records view 2026-08-08 21:41:44 +08:00
yml2213 de23d87087 和平小店可以返回所有商品 2026-08-08 00:30:58 +08:00
yml2213 ec5eb637bb feat(douyu): 支持和平小店商品兑换 2026-08-07 22:47:13 +08:00
yml2213 a67d144b78 支持跳过斗鱼手机号绑定并优化标签筛选 2026-08-07 22:07:39 +08:00
yml2213 a515ea6e0a feat(douyu): 和平小店扭蛋碎片查询 + 深色模式修复 + 任务状态 WS 即时推送
- 碎片: 新增 query_xpd_fragments 任务, 复用 e语言 gamecoin 接口取扭蛋币 jb2,
  账号已存角色回退(规避 Livelink 风控), accounts.xpd_fragments 字段与迁移
- 列表: 和平小店移除鱼翅/限制兑换/换绑时间列, 新增扭蛋碎片列;
  操作区硬编码白底改用 theme token, 深色模式适配(三个手册共用)
- 轮询: 任务状态经 WS(level=task)即时推送(二维码/绑定进度即时展示),
  pending/running/终态全覆盖, REST/WS 载荷统一 douyu_task_payload,
  raw 快照递归剥离, HTTP 轮询降频 5s/30s 兜底
2026-08-06 20:21:28 +08:00
yml2213 5f63d77dc3 feat(douyu): 和平小店绑定功能(生成绑定二维码/查询绑定信息)
- activity_client: xpd_bind_qr(roleParam 签发 livelink 绑定链接, 微信扫码进小程序绑定)
  + xpd_bind_info(bindInfo 查询绑定状态/角色/平台), gameRole 非 dict 边界防护
- runner/service: 注册 get_xpd_bind_qr / query_xpd_bind_info 任务, 回写
  xpd_game_name / xpd_bind_status
- router: get_xpd_bind_qr 的 url 加入列表接口保留白名单(二维码展示)
- 前端: 和平小店面板新增两个按钮, 二维码列支持 get_xpd_bind_qr 展示/放大
2026-08-06 17:33:11 +08:00
yml2213 fdc74eba8c feat(douyu): 新增和平小店查询模块(绑定角色/商品列表/点券余额)
- activity_client: getIframeUrl 签发 code/sig,道聚城 getrole.out/recommend/balance 接口
  (2026-08 起需 isCode=1 + authType=delegate + sAnchorId 才能通过 Livelink 校验)
- 迁移 0016: accounts xpd_* 字段、douyu_config 小店配置(actAlias/actId/rid)、
  douyu_xpd_goods_snapshot 商品快照表
- runner/service/router/schema 注册 query_xpd_role/refresh_xpd_goods/query_xpd_balance
  三个任务,任务结果剥离 role.raw 防 openid 泄露
- 前端: 和平小店路由/菜单/DouyuTasksPage 三态/商品下拉/配置弹窗
2026-08-06 17:23:59 +08:00
yml2213 de2e53748d fix(douyu): 修复未换绑成功时角色信息被待确认新角色污染 & 增加绑定接口明细日志 2026-08-02 13:18:56 +08:00
yml2213 8de269f958 增加兑换 2026-07-28 18:12:11 +08:00
yml2213 624198bca4 优化电竞手册换绑时间展示 2026-07-28 17:27:35 +08:00
yml2213 d7a8666fe4 新增电竞手册独立绑定流程 2026-07-28 17:12:08 +08:00