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兜底
This commit is contained in:
@@ -200,3 +200,40 @@ lib 内置大量模拟器检测串(qemu_pipe / mumuvmm / genymotion / windroye
|
||||
需在真机 dlopen 全拦截清单里补齐),让 b(100) 真实计算;
|
||||
2. **静态还原 b(100) 公式**:基于 (ANDROID_ID→GUID) 差分对拍(unidbg 内改 ANDROID_ID 即可批量
|
||||
产对),用 .data 密钥(`7jbF5I...`/`HuyaUdb...`/config 解密链)猜 MD5/SHA1/AES 结构。
|
||||
|
||||
## 十、Hook 阶段结果(2026-08-28 深夜续)
|
||||
|
||||
### 10.1 NativeBridge 归属排查(穷尽运行时手段)
|
||||
- **动态 JNI 排除**:全模块 `Java_*` 导出扫描,自研库仅 libhypopup/libjsiwup/AI 库有——无
|
||||
`Java_com_huya_security_hydeviceid_NativeBridge_*`。
|
||||
- **RegisterNatives 排除**:①v7 注册表(23 条)= NativeEntry(19@hydeviceid)+HuyaAuthCore(4@udb),
|
||||
无 NativeBridge;②dlopen→JNI_OnLoad 拦截各库(hydeviceid/udb)0 命中;③健康进程 attach+
|
||||
重触发 init/getGUID,RN 全程 0 命中。
|
||||
- **unidbg verbose 实锤**:hydeviceid JNI_OnLoad 只 `FindClass(NativeBridge)+NewGlobalRef`(不注册),
|
||||
udb JNI_OnLoad 只注册 HuyaAuthCore;NativeBridge.b/klog 在 unidbg 内经 JNI 以"未注册 native"
|
||||
路由到 AbstractJni(桩)。
|
||||
- **定位到的关键静态物证**:hydeviceid .data@0x3e21e4 起为内联方法描述符块
|
||||
(`klog()(L...Z)V`、`b (I)L..`、`c (I)J`、`h ()L..`、`g (L)L..`、getDataDir/getPath…),
|
||||
类名字符串 `com/huya/security/hydeviceid/NativeBridge`@0x3e2f20 紧随其后;但代码无任何
|
||||
ADRP/GOT 引用该页(间接/运行期构建)。完整 {name,sig,fnPtr} 指针表未以静态形式存在。
|
||||
- **新输入候选**:采集器还读写 `udb_deviceID`/`udb_deviceID_encode`/`oaid`(prefs)+
|
||||
`NativeBridge.b(104)`(oaid 相关);`Build.*` 静态字段读。
|
||||
|
||||
### 10.2 双库 unidbg 已打通但 b 仍未真注册
|
||||
- libudbauthunify(JNI_OnLoad@0x262620,RN 调用点 0x2629bc)解密合并后 unidbg 加载成功;
|
||||
- merge_decrypted.py 升级为**段驱动**(vaddr→文件偏移,支持 .rodata/delta 各段)+ .dynamic 保留
|
||||
+ .init_array 置零 + 仅重定位槽指针清理(避免误伤字符串);
|
||||
- 卡点:NativeBridge natives 从未在任何可见路径注册 → b(100) 仍走桩。
|
||||
|
||||
### 10.3 设备稳定性注意(重要)
|
||||
- 反复 `pm clear` + frida attach 探测会清空应用数据(弹协议)并导致 App 闪退;
|
||||
已确认无 frida 冷启动 App 健康(首页焦点正常)。**后续禁 pm clear、attach 探测收敛**。
|
||||
|
||||
### 10.4 静态还原重启点(step-2 方案,全部 PC 侧)
|
||||
1. **歧义清除**:确认 NativeBridge.b/klog 到底是否 native(dex 反射 isNative,用 SPAWN+bypass
|
||||
轻探,一次即可);若 native → 在 hydeviceid 代码中用"运行期构建表"模式(构造
|
||||
{name,sig,fnPtr} 时 ldr 常量页)找注册函数;若 Java → 直接读运行期 dex 里 getGuid/b 逻辑。
|
||||
2. **oracle 差分**:unidbg 侧可控 ANDROID_ID/Settings.Secure 已证明 androidId 密文会变;
|
||||
b 一旦真注册,`(ANDROID_ID → GUID)` 差分对即可在 unidbg 内批量生成 → MD5/SHA1/AES 对拍。
|
||||
3. b 的 fnPtr 兜底获取:运行期 dump hydeviceid .data 时同时读 JNINativeMethod 运行期构造表
|
||||
(spawn+bypass 一次抓全,附 base 校验)。
|
||||
|
||||
Reference in New Issue
Block a user