yml2213
|
c6b5fc63ad
|
docs: 记录 Ruff lint 清理待办
|
2026-08-30 21:13:53 +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
|
cbd314f4e5
|
type: 收窄测试与响应模型类型
|
2026-08-30 20:21:14 +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
|
ec3c14d0a3
|
type: 收窄斗鱼任务路由类型
|
2026-08-30 20:02:03 +08:00 |
|
yml2213
|
9a5066cae8
|
type: 收窄斗鱼手册与送礼执行器类型
|
2026-08-30 20:00:09 +08:00 |
|
yml2213
|
38fd809ca4
|
type: 收窄斗鱼鱼翅充值执行器类型
|
2026-08-30 19:58:43 +08:00 |
|
yml2213
|
2622e016b5
|
type: 收窄斗鱼商城与小店执行器类型
|
2026-08-30 19:57:37 +08:00 |
|
yml2213
|
d400db987e
|
type: 收窄商城与斗鱼绑定执行器类型
|
2026-08-30 19:55:08 +08:00 |
|
yml2213
|
40e6f482b4
|
type: 收窄活动客户端响应类型
|
2026-08-30 19:52:55 +08:00 |
|
yml2213
|
0efd84a281
|
type: 收窄虎牙绑定与充值执行器类型
|
2026-08-30 19:52:49 +08:00 |
|
yml2213
|
6a16d561d2
|
type: 收窄豆鱼服务层类型
|
2026-08-30 19:48:41 +08:00 |
|
yml2213
|
17577ff734
|
type: 渐进式接入 Pyright 并类型化 ORM 模型
|
2026-08-30 19:44:01 +08:00 |
|
yml2213
|
13b5aedd1d
|
test: 全面迁移 pytest 并加入格式门禁
|
2026-08-30 19:19:32 +08:00 |
|
yml2213
|
3ce1c7a51b
|
test: pytest 工程化落地 — 本地门禁、容器测试镜像、迁移链冒烟测试
- 门禁: 本地 pre-push 钩子(.git/hooks,推送前强制跑全量 pytest)
- Docker: 新增 test 镜像阶段(含 dev 依赖与 tests),compose 提供
--profile test run --rm test 入口;dev.sh 支持 ./dev.sh test
- 测试基建: 根目录 conftest.py 统一 DATABASE_URL/APP_ENCRYPTION_KEY,
移除 9 个测试文件内的重复 setdefault(含多余 import os)
- 迁移冒烟: tests/test_migrations.py 校验链线性、脚本可编译、空库整链
upgrade head 后与 Base.metadata 表/列/索引对齐
- 修复冒烟测试发现的漂移: YybRechargeTask.task_id 冗余 index=True
(唯一索引已覆盖,迁移链未建普通索引,模型与真实 schema 对齐)
- alembic.ini: path_separator=os 消除弃用告警;README 补测试章节
|
2026-08-30 18:54:00 +08:00 |
|
yml2213
|
9497e1ace6
|
perf: 优化 MySQL 查询并接入 pytest
|
2026-08-30 18:26:54 +08:00 |
|
yml2213
|
1413b4f030
|
chore: 虎牙逆向考古资料移出 git 跟踪 — rm --cached + .gitignore 兜底
不再跟踪(本地保留):
- evidence/ 抓包证据/反编译/IDA 数据库/.so dump (1133 文件)
- scripts/ 逆向实验脚本 (仅保留 migrate_sqlite_to_mysql.py)
- tools/ frida hook/抓包 + unidbg hydev + 虎牙协议复刻工具
保留跟踪:
- e语言/ docs/ core/huya/verification/models/ core/huya/fingerprint/
Dockerfile: COPY scripts/ 收窄为仅业务迁移脚本。
|
2026-08-30 12:56:25 +08:00 |
|
yml2213
|
eef86bd855
|
chore(release): 0.2.1 — 版本号递增便于分辨浏览器缓存
版本显示链路: pyproject.toml -> /api/app-info -> 布局/登录页「当前版本 vX」
部署新版后若页面仍显示 v0.2.0 即为浏览器缓存旧前端, 硬刷新即可
|
2026-08-30 11:33:57 +08:00 |
|
yml2213
|
3b3a4bebcb
|
feat(douyu): 代理写读分离 — 仅兑换/锁单/支付/开通/充值/送礼走代理
此前代理配置页开启后所有斗鱼任务(含查积分/刷列表等只读任务)统一走代理:
- API 模式每任务 fetch 新代理, 查询任务白白消耗代理额度
- 查询任务失败面被代理抖动放大, 但查询本不怕 IP 频控
新策略 (DOUYU_PROXY_TASK_TYPES 白名单):
- 写操作/消耗类: lock/pay/exchange_goods, exchange_esports/xpd_goods,
create_elite/esports/gold_qr, donate_* 走代理 (静态模式或 API 每任务新代理)
- 读操作类: query_*/refresh_*/get_*_bind_qr 等始终直连, 不消耗额度
- 判型用批次 task_type (同批次同类型, 与任务一致); 总开关仍为代理配置页
测试: 新增读任务直连/白名单覆盖断言, 三模式行为断言保留, 101 单测通过
|
2026-08-30 11:28:10 +08:00 |
|
yml2213
|
b9eb944d2f
|
refactor(huya): runner 按功能域拆分 Mixin
huya_runner.py (1664行) → core/bind/goods/recharge 四个 Mixin + 入口聚合:
- huya_runner_core.py: 批次状态/日志/任务落库/注册表 + 共用常量 sourceId
- huya_runner_bind.py: 绑定状态机/扫码确认绑定/轮询
- huya_runner_goods.py: 积分/兑换记录/商品刷新/兑换
- huya_runner_recharge.py: 充值商品/下单/到账轮询
- 对外 API 不变 (HuyaBatchRunner/huya_batch_registry), routers 零改动
- pyflakes 全净 (含 TYPE_CHECKING 注解/跨域常量导入修复), 99 单测通过
|
2026-08-30 11:25:35 +08:00 |
|
yml2213
|
9f743e50a6
|
fix(douyu): 补齐拆分后支付轮询常量导入 + 代理三模式断言测试
- douyu_runner_manual/gold: 导入 core 的 DOUYU_PAYMENT_POLL_* 常量
(之前仅在 douyu_runner.py 单文件内可见, 拆分后到账轮询会 NameError)
- 新增 tests/test_douyu_runner_proxy.py: 静态/API/关闭三模式 + 降级直连 +
activity_client session 级 proxies, 兑现 8fe9fdf 提交说明中的行为断言
|
2026-08-30 11:25:35 +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
|
054af84144
|
feat(web): 虎牙设备绑定页多选批量解绑 — rowSelection 跨页保留 + 全选全部 + 批量接口
- routers/huya.py: POST /api/huya/device-bindings/batch-delete (去重/跳过无记录/删画像+指纹目录)
- schemas.py: HuyaDeviceBindingsBatchDeleteRequest
- DeviceBindingsPage: 多选(rowSelection preserve) / 全选全部 / 解绑选中(N) + loading, 刷新后清理失效选中
- api/huya.ts + types.ts: deleteDeviceBindings 与响应类型
验证: 批量解绑逻辑单测 OK; 77 后端单测 OK; tsc + vite build OK
|
2026-08-30 09:55:53 +08:00 |
|
yml2213
|
22aa485536
|
fix(web): 审核回归 — 5 项修复 (渠道写入丢失/斗鱼WS生命周期/归属校验/恢复订阅/画像key稳定)
B1 routers/huya.py: 批量 Web 登录 login_channel/status 回填在 helper 内部 commit
之后赋值且未再提交 → 丢失; 补 db.commit() 并统一 status=active
B2 routers/login.py + services/login_service.py: 斗鱼登录 WS 断线即 pop 批次,
刷新后无法重连订阅 → 对齐虎牙模式 (BatchRegistry.mark_finished, 仅结束后清理)
B3 routers/login.py: WS 增加批次归属校验 (非 view_all 仅可订阅自建批次)
S1 LoginTasksPage: effectiveBatchId 从任务列表推导活跃批次, 刷新后停止按钮/
日志订阅自动恢复
S4 services/huya_service.py: username 仅在为空时回填, 防止 udb_passport 覆盖
登录名导致一号一设备绑定 key 漂移
验证: 77 后端单测 OK; tsc + vite build OK
|
2026-08-29 18:20:27 +08:00 |
|
yml2213
|
a369829df3
|
docs: HDID32(t1.t0) 固定性终审 — app版本级常量, 证据链闭环; 更正 ID_NOMENCLATURE 陈旧结论
|
2026-08-29 17:15:22 +08:00 |
|
yml2213
|
f9d5868091
|
docs: sdid 前缀=hydevice SDK 协议常量定论 (16B固定密文头, 非设备关联) + 存量 device.json 补齐
|
2026-08-29 17:09:45 +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
|
fda3d5257b
|
feat(web): 新增『虎牙设备绑定』管理页 — 一号一环境可视化
后端 (/huya/device-bindings):
- GET: 三方合并列表 (设备画像 + hydevice 指纹状态 + 账号表登录渠道)
标识脱敏展示 (fingerprint/guid32 只留前12位)
- DELETE: 解绑 = 删除画像 + hydevice 状态 → 下次登录自动生成全新环境重新注册
前端:
- HuyaDeviceBindingsPage: 汇总卡片(绑定数/指纹状态/入库账号) + 明细表
(机型/屏幕/CDID40/GUID32/Hebe/hydevice状态/登录渠道/最后登录) + 解绑重绑
- 路由 /huya/device-bindings + 菜单『设备绑定』(账号管理之下)
|
2026-08-29 16:39:30 +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
|
d6ab4d8699
|
feat(web): 虎牙账号管理界面优化 — 登录渠道区分 (Web 旧版 / App 协议 / 短信)
后端:
- HuyaAccount 新增 login_channel 字段 + 迁移 20260829_0030 (启动自动升级)
- 5 个登录端点成功后记录渠道: web/app 批量与单账号 + 短信
- HuyaAccountOut 输出 login_channel
前端:
- 账号表新增『登录渠道』列 (App 协议/Web 旧版/短信/仅导入)
- 工具栏登录按钮分组: App 协议登录(primary 推荐) 与 Web 登录(旧版, Tooltip 说明)
- 行内操作新增单账号 App/Web 登录按钮 (复用批量端点传单 id)
- tsc + vite build 通过
|
2026-08-29 13:13:57 +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
|
ff39a60a1d
|
docs: 📋 登录系统全流程定案 (纯协议无卡点, 一号一设备方案, 工具索引)
|
2026-08-29 11:55:36 +08:00 |
|
yml2213
|
1a6711c180
|
docs: 绕过配方状态更正 (bypass_all 未验证, 以原版三脚本为准) + 三层健康检查工具
|
2026-08-29 11:44:54 +08:00 |
|
yml2213
|
5fa1f6d082
|
feat(dfp): 🔑 RC4 key=APK内嵌appkey常量(datadiv@3912240), 全流程零设备依赖闭环 (R38-R39)
|
2026-08-29 11:01:51 +08:00 |
|
yml2213
|
4868a3b0e8
|
feat(dfp): 🏆 dfpReport 加密完全攻破 — RC4+gzip, 12/12 密文解密+逐字节回验 (R35-R37)
|
2026-08-29 10:13:08 +08:00 |
|
yml2213
|
12fad07385
|
docs: R34 清理 (卡死前状态保存)
|
2026-08-29 09:12:15 +08:00 |
|
yml2213
|
2fe23e4274
|
feat(huya): 💎💎💎 R34 会话密钥活体捕获成功 (P7TAzQYmX4O6i95q!)
- Java.choose 堆枚举 @SSL_write 命中 = 密钥体系! (16字符随机, 每注册轮换)
- 多POST结构对比: 密文紧跟magic, 头版本位 01/11 变体
- Java Cprivate.a x 会话密钥 x 0-48切片 = 全null → 13.4.22传输≠Cprivate!
- hook_final/hook_brute 可复用捕获体系
|
2026-08-29 09:10:57 +08:00 |
|
yml2213
|
0647c0c682
|
feat(huya): R33 45函数全零调用定论+第9密文(4036B,头89c8f5变体)
- 25JNI+2XTEA核+16信封+2Java 全部安装且0调用
- 报告加密=防hook设计 (隐藏路径)
- 9密文集齐: 头变体 69c9f5/75c8f5/89c8f5 会话段逐注册变化
|
2026-08-29 09:04:15 +08:00 |
|
yml2213
|
b76ec96573
|
feat(huya): R32 8密文集+三重钩全零调用定论+known-pair校准
- 8活体POST存 evidence (magic 10B@70 一致, 头同族7cda11)
- 25 JNI + 2 XTEA核 + 2 Java = 全0调用 (报告=隐藏native路径!)
- rtk_known/ 44B known pair (native ct 45542bb3...) 后续差分用
|
2026-08-29 09:01:51 +08:00 |
|
yml2213
|
08fcf5c34c
|
feat(huya): 💎💎 R31 活体重抓3密文+Java全逆+native零调用铁证
- 配方: frida-server -l 0.0.0.0 + 清状态(保留登录) + str_magic → 40s命中
- 3新POST (4384/4267/4261B, cipher@70) 存 evidence/dfp_live/
- Java Cprivate XXTEA + Perseus 会话密钥 + Lyra TLV 全解
- 报告加密 = 第三路径 (JNI族+XTEA核心+Java三重钩子全0调用!)
- cprivate.py 解密器就绪 (key一到即解)
|
2026-08-29 08:53:31 +08:00 |
|
yml2213
|
5a138376ca
|
feat(huya): 💎 JAVA侧全逆! Cprivate XXTEA+会话密钥架构+Lyra TLV格式 (R30)
- Cprivate.java 加密/解密器全文 (XXTEA+MD5密钥变换+尾字长度)
- 密钥=SecureRandom 16字符[A-Za-z0-9] (guava.c内存明文! RSA封装上送)
- Lyra TLV: (type<<4)|tag, type 0-13 全表
- 捕获密文可用 Cprivate.a(data,会话key) 解密 - key在内存!
- 下一步: frida抓guava.c → 真key解密明文
|
2026-08-29 08:12:10 +08:00 |
|