目的:记录 KernelUtil / Common.dll 路径、
MSG0外扩头、以及 TD 容器与虚表槽位核对,便于后续续作。
- 切到 Common.dll 实例后(
list_instances/select_instance,本机曾用端口 13342),先server_warmup(含wait_auto_analysis、缓存),再entity_query/func_query/disasm/decompile/py_eval;少用大范围search_text(曾对 MCP 代理超时)。 get_bytes读到全 0:多半是 当前活动 IDB 不是目标 DLL,重新select_instance到 Common 后再读.rdata。
- 在
Util::Data::CreateTXData(作用于*(this + 0x14))、CreateTXBuffer、SQLiteHeader::GetMsgDBHeaderBuffer之后,存在:mov eax, [esi](esi指向对象首 dword,一般为 vtbl)call dword ptr [eax + 114h],栈上ITXBuffer*已就绪。
- 偏移
+0x114:若把 vtbl 当作连续DWORD[],则 槽索引 = 0x114 / 4 = 69。
- 不是同一张表里的小偏移示例:在 Common 里某 codec vtable 上
DecodeBuffer约在 index 3(+0x0C),与+0x114无关;不要把“解码 buffer”直接套到这条虚调用上。
- 核对
IID_ITXData实现的主 vtable起始0x3016EBCC(槽 0 指向如sub_30033AC0一类)。 - 在该 vtable 上,槽 69(+0x114)→
sub_3002F995。 sub_3002F995反编译形态:InterlockedDecrement、计数归零后通过(*obj + 460)一类路径销毁 —— 更像Release/引用计数,不像“解析 header 进字段树”。
- KernelUtil 里
GetMsgDBHeaderBuffer→call [vtbl+0x114]在表面上像“喂 buffer 给ITXData”,但静态 vtable 在 +0x114 处指向 Release 类逻辑,存在 不匹配,可能原因包括:- 运行时 并非上述
0x3016EBCC这张表; this/ 接口指针调整(多接口、非对象首址)导致+0x114语义变化;CreateTXData实际具体类型与假设的“简单ITXData”不一致。
- 运行时 并非上述
- 槽 84(+0x150):
sub_3002F5FB(内部再对*(a1+20)走+68转发)。 - 槽 85(+0x154):
sub_3002F643(与Util::Data/ITXArrayRead相关包装)。 - 槽 57(+0xE4):
sub_300A2D0A—— 也是典型 Release 形态(InterlockedDecrement++12销毁路径)。
- 大型解析入口例:
sub_30032CA8、sub_300329B8等,对容器 magic / 版本 / 记录条数有统一读法,并在多处通过ITXData的多种偏移(如+0xCC、+0xD0、…、+0x118、+0x1A0…)写字段 —— 属于“从打包 blob 填充ITXData”家族。 sub_300329B8一类会对TD头做检查(如首字节T、次字节D)。
- 提取的
MSG0payload 头部十六进制以54 44 01 01 ...开头 → ASCIITD,与 TD 容器一致(与部分路径里的QD检查不同)。
- 弄清
*(owner + 0x14)经CreateTXData得到的具体类型与真实 vtable(必要时动态断在call [eax+114h]前看[esi])。 - 按 TD 记录解析
msg0_headerbuf.bin(优先sub_300329B8/sub_30032CA8家族),抽出bufRandKeyEnc等密封字段。 - 延续 KernelUtil 侧已识别的链路:
buffrLocalPasswdHash(16 字节)→ TEA 解bufRandKeyEnc→ 再对齐 SQLite 页/载荷 加密(若仍有)。
| 区域 | 名称 / 说明 |
|---|---|
| KernelUtil | sub_318DD084,SQLiteHeader::GetMsgDBHeaderBuffer |
| Common | Util::Data::CreateTXData;sub_30032CA8、sub_300329B8;vtable 0x3016EBCC;槽 69 → sub_3002F995 |
| 样本 | BAK_FILE/msg0_headerbuf.bin(TD 头) |