Hash Microsoft符号服务器/本地缓存哈希算法

Hash Microsoft符号服务器/本地缓存哈希算法,hash,symbol-server,symstore,Hash,Symbol Server,Symstore,我试图找出Microsoft Symbol本地缓存目录使用的哈希算法 例如,本地缓存可以如下所示 L:\Symbols \browseui.dll \44FBC679fe000 browsue.dll \browseui.pdb \44F402F62 browseui.pdb \explorer.exe \3EBF1F14f7000 explorer.e

我试图找出Microsoft Symbol本地缓存目录使用的哈希算法

例如,本地缓存可以如下所示

L:\Symbols \browseui.dll \44FBC679fe000 browsue.dll \browseui.pdb \44F402F62 browseui.pdb \explorer.exe \3EBF1F14f7000 explorer.exe \explorer.pdb \3EBF1F141 explorer.pdb \msvcr71.pdb \60D915C6AB6A4F3586E9096E2F8856482 msvcr71.pdb L:\符号 \browseui.dll \44FBC679fe000 browsue.dll \browseui.pdb \44F402F62 browseui.pdb \explorer.exe \3EBF14F7000 资源管理器 \explorer.pdb \3EBF141 explorer.pdb \msvcr71.pdb \60D915C6AB6A4F3586E9096E2F8856482 msvcr71.pdb 文件与其调试数据库之间似乎存在某种对应关系。除此之外,我不知道这些(大概)十六进制字符串文件夹的名称是如何生成的

有的是9位,有的是13位,有的是33位。它看起来像是一个实际的实时文件(出于某种原因存储在符号缓存中)有一个13位的哈希值,而它的调试数据库(几乎类似)有一个9位的哈希值。一些调试数据库得到一个13位的散列;虽然它们没有相应的实时文件,但无法找出这些文件的特殊之处

我尝试过用我所知道的每种散列算法(其中39种)对文件进行散列,但没有任何匹配(直接、反向、交替尾端等)

有什么想法吗

更新 我想我终于找到了。发件人:

SymStore将文件系统本身用作数据库。它创建一个大型目录树,目录名基于符号文件时间戳、签名、年龄和其他数据

编辑 Dang,不幸的是,它只提到了目录名是从各个方面派生出来的(我想不是一个哈希),但没有具体说明如何派生。搜索继续…:-(

包含有关计算符号文件以及可执行文件/DLL的ID的信息

基本上,对于可执行文件和DLL,您可以从Griff链接到的页面中列出的PE头中提取时间戳和文件大小。但是,对于PDB文件,您需要Windows调试工具中的DBH命令。只需将PDB文件加载到DBH中,并使用INFO命令获取PdbSig/PdbSig70PdbAg砰!就是这样



出于某种原因,我刚刚为SYSTEM32文件夹中的PDB文件创建了相应的文件夹,并最终将其移动到本地符号存储。

尝试查看此页面:

您可以找到答案

符号检索器外壳扩展 )

DebugDir.cpp )

PDB文件内部

EXE/DLL目录名是通过连接查找PE文件中的“文件修改”时间戳和“SizeOfImage”的十六进制字符串创建的 符号服务器共享中PE文件的路径格式为:

“%s\%s\%08X%x\%s”%(服务器名、peName、时间戳、图像大小、peName)

例如:

https://msdl.microsoft.com/download/symbols/ntdll.dll/B29ECF521f0000/ntdll.dll

查找PDB文件 符号服务器共享中PDB文件的路径格式为:

“%s\%s\%s%x\%s”%(服务器路径、pdbName、guid、年龄、pdbName)

例如:

https://msdl.microsoft.com/download/symbols/ntdll.pdb/4BC147AE72E8D05022366D6570A8E3461/ntdll.pdb



来源:Bruce Dawson。

这当然有帮助。这些ID看起来确实是字符串的组成部分,但是我仍然需要弄清楚如何计算这些ID。该页面不再工作了。你没有副本吗?甚至Wayback机器也没有该页面。但从URL判断,我猜它是该页面的副本thread:,它还提到了线程