feat(huya): 头结构破译(版本/会话ID)+密钥候选批量否定 (R28)

- 13B头=[2B魔数][1B版本01/11][7B会话ID(身份相关!)][3B动态]
- 20密钥候选全灭 (lencheck全False) - 派生含未知变换
- 加密链底座已验证; 密钥派生=ga内部需IDA导出
This commit is contained in:
yml2213
2026-08-29 07:49:52 +08:00
parent 0ef95a5c0e
commit 5b6edc02e8
2 changed files with 32 additions and 1 deletions
+10 -1
View File
@@ -346,8 +346,17 @@ public class TuringProbe {
int n = blob.length / 4;
com.github.unidbg.pointer.UnidbgPointer vp = emulator.getMemory().mmap(blob.length + 32, 7);
for (int i=0;i<blob.length;i++) vp.setByte(i, blob[i]);
// key @ 3DF88 (LOAD-1 identity fileoff==vaddr)
// key @ 3DF88 (LOAD-1 identity fileoff==vaddr); 或 TP_KEY 文件
long keyPtr = m.base + 0x3DF88;
String kf = System.getenv("TP_KEY");
if (kf != null && !kf.isEmpty()) {
byte[] kb = new java.io.FileInputStream(kf).readAllBytes();
byte[] k16 = java.util.Arrays.copyOf(kb, 16);
com.github.unidbg.pointer.UnidbgPointer kp = emulator.getMemory().mmap(32, 7);
for (int i=0;i<16;i++) kp.setByte(i, k16[i]);
keyPtr = kp.peer;
System.out.println("[TP] key override: " + java.util.HexFormat.of().formatHex(k16));
}
System.out.println("[TP] xtest " + (enc ? "ENC" : "DEC") + " sub_24D58 n=" + n + " key@" + Long.toHexString(keyPtr));
Number ret = m.callFunction(emulator, 0x24D58, vp.peer, enc ? n : -n, keyPtr);
System.out.println("[TP] xtest ret=" + ret);