Commit Graph
64 Commits
Author SHA1 Message Date
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 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 c426574b3c feat(huya): harness复活(getGUID回0a7dfa) + GUID缓存输入透明性证明(b(100)直填) + merged_r2产物 2026-08-29 01:37:18 +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
yml2213 7249dd6909 feat(huya): unidbg encode_aes 探针上线 + 64B钥材料发现(AES变体非标)
- AesProbe.java: 直接调用 encode_aes, 权威差分源 (已知输入输出已记录)
- KeyExpansion 以16B步长读钥 → 64B材料; 标准AES对照 b1e3abcc≠ba3fb8f1 证变体
- docs §11.16
2026-08-29 00:01:00 +08:00
yml2213 e5aee00a9c feat(huya): jadx映射HDID32 Java链(NativeEntry.getHDID@0x20f0c8) + b()全语义表 + 签名锚定实验(仅HDID32锚,DEVID40自由)
- b(1)=5008/b(2)=ver/b(3)=1.14.68/b(107/108)=qimei → unidbg 桩补全
- 实验: 金样本hdid+随机DEVID40=1571B cred / 换hdid恒APP_SIGN
- docs §11.12
2026-08-28 23:27:36 +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 9ff572191c feat(huya): device_mint 铸币机编排器 + 登录链验收矩阵(铸币hdid→APP_SIGN/金样本→NEED_RISK)
- tools/device_mint.py: --mint-only/--login/--control/--matrix 全编排
- huya_launch_mint.mint_sguid(): 上线铸币函数
- docs §11.9: 接受度矩阵 + 边界精确化 (sGuid可铸/登录签名独立硬锚)
2026-08-28 22:31:30 +08:00
yml2213 ccfa742e3b feat(huya): 铸币机打通 - doLaunch tReq 结构bug修复(缺外层struct_begin)+双雨确定性实证(sGuid=f(mid))
- encode_live_launch_req: 双层 struct_begin(0)+struct_end 收尾 (服务器tag0 tId 期望STRUCT)
- build 只发 tReq 单键 (对齐真机 launch 帧, 不再追加 platform/version 等)
- parse_launch_rsp: gzip 解压 + \x06\x20(32hex) sGuid 可靠提取
- live 矩阵实证: 同指纹同 sGuid / 变异指纹新 sGuid / device_id 不驱动, mid 驱动
- docs §11.8: 破案链 + 实证表 + 铸币闭环 (mid→doLaunch→sGuid→登录链)
2026-08-28 21:52:12 +08:00
yml2213 d2adfb25ad feat(huya): doLaunch live对拍定案 - 信封/键/路径被服务端接受, tReq值恒定拒绝
- App侧全细节确认: a09.getRequestKey=tReq / UniPacket(true)=v3 / 值=write(struct,0)
  / URL=/launch/doLaunch / getOtherParams追加 platform/version/channel/uid 键
  / 传输类型服务端动态下发(HTTP是否真渠道未定)
- live诊断: E(空值)->require field / F(缺键)->not found key / G(0x0c)->完全复现
  'read struct type mismatch tag0 type12' -> 服务端确实解析tReq值, 语义与本地djce不同
- 工具升级: --live 用5键 App同等 map; 悬而未决点=需App真实doLaunch帧(约束内路径全探)
  - logcat无klog / xlog+mmap2 mars压缩不解 / 冷启动走缓存不发网络launch / 禁pm clear
  - 可选项: 代理+CA被动抓包 / 模拟器新装 / 继续抠mars xlog
2026-08-28 19:13:36 +08:00
yml2213 44109aa408 feat(huya): doLaunch wire 离线还原 + GUID铸币复放器原型 (huya_launch_mint.py)
- JCE 规格: LiveLaunchReq{tId,tLiveUB,bSupportDomain}/LiveUserbase{eSource,eType,tUAEx}
  LiveAppUAEx{sIMEI,sAPN,sNetType,sDeviceId,sMId}/UserId{lUid..sQIMEI}/LiveLaunchRsp{t0=sGuid}
  (classes9/11 dex writeTo 精确还原)
- 信封: UniPacket, servant=launch (@WupServant), func=doLaunch, sBuffer key=_wup_data
- tools/huya_launch_mint.py: 请求构造 + 响应解析(sGuid_candidates 递归兜底) + self-test 回环 PASS
- 传输(hyns/KiwiServant)与响应形态留待 live 实测校准; 禁设备侧活动
2026-08-28 18:36:47 +08:00
yml2213 bed53a6586 feat(huya): isNative定案NativeBridge纯Java + GUID值流还原(服务端sGuid签发) + unidbg金测试恢复
- dex直读判定: NativeBridge.b/a/c/g/h/klog全为Java(classes5), NativeEntry全native; .data描述符块=GetStaticMethodID反向调Java的name/sig常量表
- GUID值流完整还原: native getGUID=纯缓存getter(pref hydeviceid_guid -> WupHelper.getGuid() -> b(100) -> 回写)
  YYProtoSdkModule.initHuyaUdbSdk(classes17)->HyDeviceProxy.j(appid,WupHelper.getGuid(),mid)->pnc.a
  WupHelper.getGuid->HalImpl.getGuid->sGuidProperty<--live-launch服务端LiveLaunchRsp.sGuid(32hex硬校验)
- 修正结论: GUID非本地指纹公式, 铸币=服务端doLaunch/device_register按虚拟设备指纹签发sGuid
- unidbg: 新harness回归根因=C++ locale/facet在unidbg libc++上ABI崩溃; 旧harness+当前merged恢复金测试MATCH, 实证native缓存写回流
- 新工具: tools/dex_probe_native.py(dex access_flags判定), tools/dex_scan_calls.py(跨dex调用点扫描)
2026-08-28 18:15:46 +08:00
yml2213 27c71a3ad2 feat(huya): hook阶段结论 - NativeBridge排除动态JNI与各库RN, 静态物证=内联描述符块; 双库unidbg打通; 设备稳定注意
- 排除: Java_导出扫描/各库dlopen JNI_OnLoad RN拦截/健康进程重触发RN = 全0命中
- unidbg verbose: hydeviceid仅FindClass+NewGlobalRef; udb仅注册HuyaAuthCore
- 物证: hydeviceid .data@0x3e21e4 内联方法描述符块(klog/b/c/g/h+getDataDir/getPath) + 类名字符串
- 双库: udb(JNI_OnLoad@0x262620)解密合并 unidbg 加载成功; merge 升级段驱动+动态保留+init_array置零+仅重定位槽清理
- 新输入: udb_deviceID/udb_deviceID_encode/oaid prefs + b(104) + Build.*字段
- 设备稳定: pm clear+frida attach 探测致闪退, 后续禁用; 无frida冷启动健康
- 静态还原重启点: isNative定讫 -> 注册函数(运行期建表模式) 或 Java逻辑; unidbg差分oracle + fnPtr兜底
2026-08-28 17:19:45 +08:00
yml2213 70621cff8f feat(huya): unidbg 金测试打通 - 采集器加密可复现(androidId=PDSuHx..)/GUID=0a7dfa..一致
- 输入图定案: 库内零硬件文件读, 种子=ANDROID_ID+服务端hydeviceid_config+MID, 属性层无关(X1/X2)
- 真机全段解密 dump(phone_dump_hydev_full) + merge_decrypted 合入原文件 → unidbg 可直接加载
- unidbg(JDK21+patch) harness: JNI 桩(SharedPreferences日志化/Settings.Secure/NativeBridge)
  金测试: androidId 加密态与 getGUID 全部与真机一致
- 遗留: NativeBridge.b(100) 原生归属库未定(非hydeviceid/udb/device-util), 当前桩替顶
- 修正结论: '单机不可铸造'判断错误, GUID=b(100)=f(androidId密, config, MID) 输入全可控
2026-08-28 16:06:25 +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 36b5d78050 docs(huya): 记录 dfpReport 零设备生成突破与生成器工具
- 破解进度: 服务端不校验 cw 内容, 随机 4146B cw 即可 200 + 签发新 t2/t5
- 生成流程: 零设备注册链 getDfpConfig->selectOperator->dfpReport 打法
- tools/dfp_gen.py: cw/body 构建器 (TAF 4226B 结构)
- tools/dfp_cli.py: 注册链 CLI
- evidence: cw JSON 段/collection 段抓取样本
2026-08-27 17:57:38 +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