Commit Graph
100 Commits
Author SHA1 Message Date
yml2213 f4ed518b50 统一虎牙 App 登录设备画像 2026-08-30 23:04:28 +08:00
yml2213 bc02018719 fix: skip test image in production deploy 2026-08-30 22:17:09 +08:00
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
yml2213 9586eaa8a3 feat(huya): 🎯 ga IDA导出核心挖掘: 密钥槽5788=3DF88同款! 全链XTEA/deflate/编码器映射 (R29)
- 5788=5788:f15e78d2… 与 mfa 3DF88 相同 (turing 共享key!)
- ga XTEA sub_1F1CC + 封套 1F918/1F9C8 + 解码 27DBC(inflate!)
- b209202 a6==0→sub_23DF8编码器 / a6==1→27FF8解码器
- k209202 16B块: RiskDetectExt.ExtData schema + key=16B输入
- 请求密文密钥≠静态key (需编码器内部路径)
2026-08-29 07:54:56 +08:00
yml2213 5b6edc02e8 feat(huya): 头结构破译(版本/会话ID)+密钥候选批量否定 (R28)
- 13B头=[2B魔数][1B版本01/11][7B会话ID(身份相关!)][3B动态]
- 20密钥候选全灭 (lencheck全False) - 派生含未知变换
- 加密链底座已验证; 密钥派生=ga内部需IDA导出
2026-08-29 07:49:52 +08:00
yml2213 0ef95a5c0e feat(huya): 🎯 完整加密链 deflate+XTEA 闭环验证成功 (R27)
- sub_2E164=deflate+sub_25234=XTEA封套 (pad+4Blen+24D58加密) 源链闭环
- harness: Java-deflate+真25234 产出52B密文
- 关键坑: GOT RELRO只读页 mprotect后导入补丁才生效 (所有-1的真相!)
- 捕获=[13B头][XTEA-wrap(key=设备派生)]; 密钥推导=下一步
2026-08-29 07:48:05 +08:00
yml2213 51962b8bf2 feat(huya): ga k209202=16B块加密器+状态门打通 (R26)
- k209202 反汇编: len==16严格校验 + 0x24334状态化块加密核心
- mfa 0x48C18=单例字段 补非零后 b87_全链LIVE (XXTEA+inflate执行!)
- 定论: 捕获密文密钥=设备材料派生(非静态), 传输链静态解=需ga IDA导出
- 下一步: 用户导 turingga.so / 或抓服务器 resp 旁路
2026-08-29 07:45:51 +08:00
yml2213 a5df6df855 feat(huya): XXTEA变体加密侧回环验证+ga全表14方法 (R25.5)
- sub_24D58 正参数=加密/负参数=解密, 44B回环100%还原, key@3DF88确认
- ga JNI表14方法全解 (j209202=取DID! k209202=传输加密入口@0x219d8)
- 判断: 捕获密文=ga传输层 (非mfa内部序列化), 需ga IDA导出或运行时状态
2026-08-29 07:42:56 +08:00
yml2213 44948277d4 feat(huya): 💥 XXTEA变体识别+harness直调sub_24D58运行成功 (R25)
- mfa JNI表11方法全解 + b87_解包链语义 (XXTEA+inflate+'resp')
- sub_24D58=XXTEA变体 (0x9E3779B9+掩码混淆) 反编译+harness直调验证
- harness: 导入补丁115/构建器语义构建/日志桩/双后端
- 下一步: key槽验证+b87_全链直调+a87_加密侧
2026-08-29 07:34:23 +08:00
yml2213 276a7782a0 docs(huya): R24 C线纯分析终局 — 密钥流独立+头部字段解码, 纯样本不可破 2026-08-29 07:17:59 +08:00
yml2213 652b0bbd2c docs(huya): R23 双线状态固化 - ga表栈构建+onLoad空槽链 下一步三选项 2026-08-29 07:14:49 +08:00
yml2213 c85693e790 feat(huya): harness onLoad迭代修复 - 全局槽补丁过引用计数关 (R22)
- 0x48a90槽NULL崩溃 -> dummy对象补丁 -> 推进到vtable空跳
- 根因: turing类定义缺失(需ProxyClassFactory或C结构对象模型)
- TuringProbe.java: gap+类+槽三级补丁可复现
2026-08-29 07:13:22 +08:00
yml2213 47bc38d638 test(huya): b87_ harness直调执行通过(ret=-1=初始化态缺失) (R21补) 2026-08-29 07:07:59 +08:00
yml2213 dc109c5dba feat(huya): turing JNI表解出+b87_@0x25c98 (R21)
- libturingmfa JNI 表: b87_(SparseArray,[B,Map,I)impl@0x25c98 + f87_ — 加密核心入口
- ELF 间隙洞察: LOAD-2 vaddr未4K对齐->unidbg映射崩因; mmap2补映射过导出
- TuringProbe.java: 装库+预注册类+gap补映射+直调框架(封送待办)
- 路线: 直调b87_喂真实blob->SparseArray明文; ga侧JNI表同法
2026-08-29 07:07:18 +08:00
yml2213 39c516b71b feat(huya): turing运行中dump工程化 (R20) — 串过滤100%命中+采样集7份
- hook_str_magic.js: dfpReport/hyudbwebuif字符串过滤替代魔数(不漏轮次) + 全量请求dump
- 采样集: golden+f1..f4+新身份B(0647) — 新身份头12B=旧身份一致(nonce与身份无关)
- nonce块: [7cda][版本][69c9f5][计数递增][稳定段] ; 运行时路线终态(Java桥/co-located/回溯全闭)
- 触发-捕获-存档 ~40s/轮 全自动; evidence/dfp_live/ 齐全
2026-08-29 06:50:34 +08:00
yml2213 0944e9c86b docs(huya): R19 turing运行时路线终态 — 专项交接资产齐备
- turing类定位(ga果汁混淆系) + Java载荷hook零触发(=全native, 路线关闭)
- 静态密钥假设否定; 流式密文实锤
- 交接: 密文x3/请求全文/组件/工具/触发方法全收录 (docs §11.49)
2026-08-29 06:29:34 +08:00
yml2213 021cd636c8 feat(huya): turing密文流式模式判定 + 全双工捕获 (R18)
- 三样本差分: 仅5稳定字节(7cda+69c9f5头), 流式CTR+nonce非ECB
- SSL_write+SSL_read 全双工: req4198B+resp108B 捕获, java侧拼body回溯实锤
- 采样集: golden+f1+f2 三份密文; dfp_live 存档
- turing专项起点: 密钥材料mpdc/81B配置/ga2 齐备
2026-08-29 06:24:53 +08:00
yml2213 b06a768eb2 feat(huya): dfpReport密文体实时捕获 (R17) — wsapi.huya.com端点+完整请求
- hook_ssl_magic.js: SSL_write明文扫魔数, 命中即全量dump+杀进程
- 捕获: 3798B POST (hyudbwebuif/dfpReport, tReq tag1=[10B魔数]+3531B密文)
- 触发: 清turing状态重注册 (备份tar零副作用)
- 动态插件定位: libturingmfa.so(v87)/libturingga.so(v2.92.2)
- evidence/dfp_live/ 存档; docs §11.47
2026-08-29 06:14:49 +08:00
yml2213 f20cc67239 docs(huya): R16 dfpReport加密体侦察 — turing反欺诈定位+全链结构解码
- 结构: getDfpConfig(81B密文配置)->selectOperator(SDID+hyudb_ts)->dfpReport(10B魔数+3988B密文体)->服务端回t1/SDID
- 魔数/协议串147库全零: 运行时装配/turing混淆; Java无dfp类
- 关键材料: mpdc_108298_1=32hex设备号0399ED0B...; ga2 1860B; .turing.dat 76B
- Java全量hook方案弃用(闪退); turing=工业级SDK, 建议独立子项目
2026-08-29 05:57:32 +08:00
yml2213 cc00915e7f feat(huya): 🏆 appSign(t1.t0)算法完全破解 — ed0db8逐字节复现 (R15)
公式: appSign = MD5(appId + '_' + appVersion + '_' + k1)
金样本: MD5('5008_13.4.22_865a4924a40897ac1fcfe6b4c2cbb0e3') = ed0db8334cadd236c00cadf7e11ab5a5 

发现链路: createWupProtoInfo@0x273f1c反汇编 -> HuyaMd5(全局单例3串@0x484000+0xe0) -> frida实机读串(5008/13.4.22/k1) -> toString直出ed0db8 -> python标准md5复现
- 修改: hook_otp_capture.js(+appsign/huya-md5 hook, SSO/LONG修正, tostr-hex/ctor-hex)
- docs §11.45: 完整公式+发现链路+结构性解释+工程意义
2026-08-29 05:45:05 +08:00
yml2213 3abded94eb feat(huya): 登录路径OTP全链LIVE验证 + appSign≠getOtp结构性证伪 (R14)
- 决定性捕获(hook_huya_crypto.js全链): xxtea密钥=账号稳定uid(1199666914671)
  getkey(1,2)=MKDK/1,3=nskdI7, md5输入=k1+getkey, AES明文=[02][0c00][12B xxtea][7200][114B cred] 逐字节验证
- frida入口arg0读""为误读(SSO读取bug), 内部xxtea钩子为真值
- GOLD模式(正确uid)346k+J2 6.2M+I 6.3M+H 1.39M 全零 -> ~14.3M差分终态
- 结构性证明: appSign跨账号稳定 vs getOtp账号级(cred轮换) -> t1.t0≠OTP-mid QED
- 更正旧文档: in=uid非空串; 登录可带frida; 金样本uid=1199666914671
- 下一步: createWupRequestData@0x38dab0 appSign填充点反汇编
2026-08-29 05:35:34 +08:00
yml2213 cb049a590b feat(frida): 自愈式多轮运行器 + 两阶段注入稳定性定案 (R13b)
- run_capture.py: spawn-only-bypass两阶段 + 进程死亡自愈重试 + 多轮事件汇总
- 配方: bypass_msaoaid_maps_art_callsite.js(唯一) + 延迟注入钩子; 记录三脚本冲突为反模式
- 实测存活>120s (旧配方<60s)
- docs §11.43-10: 稳定性方法论
2026-08-29 05:18:07 +08:00
yml2213 128a57cbf3 feat(huya): OTP真机逐字节复现 + resinfo解密 + 登录路径六元组live捕获 (R13)
- GoldSweep: V2(真机146B复现292/292hex一致)/H/H2/I/J/J2差分模式
  修复mid提取窗口bug(out[4:36]→out[2:34], 旧扫描作废)
- 实机捕获(tools/frida两阶段注入): 登录路径OTP六元组 in="" s3="" s4=k1 s5=cred nonce=st<<16 + getHdid=DEVID40实锤
- resinfo解密: 密钥HuyaUdb1928374650qwertyuiop[:16] AES-ECB, 含channelKey/huyaDeviceId(40hex)/safedeviceid
- HyDeviceId: b(100)真GUID修复 + Unicorn2后端 + init补桩全通
- docs §11.43: R13全量记录(差分统计/resinfo/getter定案/frida结论)
- evidence/live_device: 真机持久化文件存档
2026-08-29 05:15:57 +08:00
yml2213 464384986d docs(huya): R1-R12会话交接总结 (机制全通+输入边界+差分引擎可用) 2026-08-29 03:07:58 +08:00
yml2213 4c7f27468a feature(huya): nonce算法破解(nonce=counter|serviceTime<<16)+直调逐字节复现getOtp内部 - 差分靶向化 2026-08-29 03:04:58 +08:00
yml2213 4d1d959c8a diag(huya): nonce影响mid修正 + 内部差异定位(s5槽junk/状态) 2026-08-29 02:55:38 +08:00
yml2213 d4f4e82593 diag(huya): R12 s5长度族23K零命中 - 累计53K差分零, s3/s4真源待注入 2026-08-29 02:53:54 +08:00
yml2213 23c8b13d01 diag(huya): 30K组合爆破零命中 - 差分引擎就绪 2026-08-29 02:49:48 +08:00
yml2213 dd883c02d8 feat(huya): OTP-OUT内容捕获成功!结构=[04][cnt][16B mid][16B tail] - 差分闭环就绪 2026-08-29 02:48:48 +08:00
yml2213 d714249e24 diag(huya): 实例注入实验 - config非AES + s4拷贝段新unmapped(SSO布局细节) 2026-08-29 02:45:28 +08:00
yml2213 d46654438f feat(huya): getOtp全流程执行成功!OTP调用实弹+参数读取 - 根因=BusinessCfg实例配置字段空 2026-08-29 02:42:18 +08:00
yml2213 76de9c3e39 diag(huya): getOtp流程死点=to_string@0x4543c0(serviceTime=0) - OTP调用差最后一步 2026-08-29 02:34:55 +08:00
yml2213 b60c7b78d1 feat(huya): C2新钥表8x24B发现 + AppLoginData真布局(流程穿透2691c0) + 全爆破零命中定界 2026-08-29 02:34:01 +08:00
yml2213 702c6276fc feat(huya): hook突破(getOtp入口命中) + 275d0ff6排除(pre存在) + 结构校验判定点定位 2026-08-29 02:27:47 +08:00
yml2213 f121f41f61 feat(huya): getOtp直调全通(C2初始化+AppLoginData伪造) - OTP真布局定案+堆32hex新候选 2026-08-29 02:25:21 +08:00
yml2213 0185296089 feat(huya): 真实getOtp语义全解(serviceTime+计数器+AppLoginData字段) - 直调路线就绪 2026-08-29 02:17:12 +08:00
yml2213 6bde9beec2 feat(huya): getSDID新值族(36B base64常量证书) + A路径实验定界(APK可载Java不可调) + LoginFlow桥接harness 2026-08-29 02:10:57 +08:00
yml2213 87f061ac4f feat(huya): hydeviceid hdid字符串地图(6处) + init b-cell全集 + OTP长度前缀族零命中落档 2026-08-29 01:42:10 +08:00
yml2213 c426574b3c feat(huya): harness复活(getGUID回0a7dfa) + GUID缓存输入透明性证明(b(100)直填) + merged_r2产物 2026-08-29 01:37:18 +08:00
yml2213 e042307f04 feat(huya): OTP mid排列爆破5040序零命中 - 组合含长度前缀序列化(cred_packls结构) 2026-08-29 01:32:47 +08:00
yml2213 65a284eac5 feat(huya): config112B全钥直解=垃圾 + appSign未知收敛表 + 三候选方向定档 2026-08-29 01:32:03 +08:00
yml2213 26dc74a661 feat(huya): decode全11钥=全二进制垃圾 - appSign钥∉已知目录, 方向修正(找hdid真生产方) 2026-08-29 01:29:23 +08:00
yml2213 1dd67a36d7 feat(huya): OTP内部串池取证 - MsgRegSendSms协议标签现形(登录/注册请求加密器)+双钥相邻 2026-08-29 01:23:52 +08:00
yml2213 a8aebfed40 feat(huya): getkey=裸24B钥(堆节点取证推翻派生假设) + 明文族爆破零命中落档
- Unicorn2后端+全内存扫描: 0x127d* 堆节点含 ZMHAV/4VYc/xXED 裸钥 + 输入副本
- 下一步: OTP insert-pos 差分(内部副本) + hydeviceid_config 88B 解码路径
2026-08-29 01:18:53 +08:00
yml2213 b2bf747e7a docs(huya): 终局总结 - 3账号×2路径验收矩阵 + 达成/边界如实 + 落地模式与未来路线
- 铸币GUID32恒APP_SIGN / 金样本HDID32签名通过进风控(3账号全一致)
- encode_aes复刻15/15位精确; HDID32独立铸造={getkey派生钥,明文}未达
- 落地: 每账号独立{GUID32,ACTION,DEVID40}+共享HDID32 → cred; 关联代价明示
- docs/HUYA_铸币机-终局总结.md
2026-08-29 00:50:13 +08:00
yml2213 1afbd588a7 feat(huya): 复刻15/15全量实证 + DiffProbe上线 + C向量更正(ae26d0)
- 8组随机明文×随机钥逐字节命中 → 算法零残差
- appSign唯一未知: 钥=getkey双id派生材料(非裸24B)
2026-08-29 00:45:03 +08:00
yml2213 fda956beca feat(huya): 里程碑 - UdbAESUtil纯Python复刻成功(A/B/D三向量逐字节) + 登录帧t1=ProtoInfo(appSign槽=HDID32)
- tools/huya_aes_replica.py 617行逐指令复刻, AES-128变异(64B钥材用[0:16]+列链式扩展+移位吸收)
- 结构定案: t1 = {0:appSign=ed0db8! 1:appVer 2:sdkVer 3:lcid 4:clientIp 5:channel 6:countryCode}
- APP_SIGN错误名=appSign字段校验失败; 下步InvCipher直解明文
2026-08-29 00:37:56 +08:00
yml2213 71e28f3406 feat(huya): OTP中段公式实证 md5_char16(input∥getkey(1)派生) - 差分表+静态流落档 2026-08-29 00:15:53 +08:00
yml2213 c2b9954214 feat(huya): OTP差分定性 - 32hex尾=静态钥材料计算(非嵌入) + 中段=f(输入) 2026-08-29 00:13:02 +08:00
yml2213 92eb39cd9d feat(huya): OTP击穿 - arg语义(arg1=2) + 输出结构(0x03+可变+固定32hex尾8b38f1) - 32hex形态实锤 2026-08-29 00:11:52 +08:00
yml2213 ebdbd05217 feat(huya): md5_char16=MD5-hex中段16识别(非32hex本体) + 探针全家桶(encode_aes/md5/xxtea/otp可调) 2026-08-29 00:10:41 +08:00