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

时间:2009-09-14 01:38:31

标签: hash symbol-server symstore

我试图找出用于Microsoft Symbol Local Cache目录的散列算法。

例如,本地缓存可以类似于以下

  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

文件与其调试数据库之间似乎存在某种对应关系。除此之外,我无法弄清楚如何生成这些(可能)十六进制字符串文件夹的名称。

其中一些是9位数,大约13位数,其他是33位数。它看起来像一个实际的实时文件(由于某种原因存储在符号缓存中)具有13位哈希,而其(几乎相似)调试数据库获得9位哈希。一些调试数据库获得13位哈希值;虽然他们没有相应的实时文件,却无法弄清楚是什么让这些特殊。

我尝试使用我所知道的各种哈希算法(其中39个)对文件进行哈希处理,并且没有任何匹配(直接向上,反向,备用字节序等)

有什么想法吗?

更新 我想我终于找到了它。来自Symbol Storage Format

  

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

修改 Dang,不幸的是它只提到目录名是从各个方面派生的(我猜的不是哈希),但并没有提到具体如何。搜索继续......: - (

5 个答案:

答案 0 :(得分:6)

This page有关于计算符号文件以及可执行文件/ DLL的ID的信息。

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


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

答案 1 :(得分:2)

尝试查看此页面:Symbol Server Callback Function

答案 2 :(得分:1)

EXE / DLL目录名是通过连接"文件修改的"的十六进制字符串来创建的。时间戳和" SizeOfImage"来自IMAGE_OPTIONAL_HEADER

答案 3 :(得分:1)

查找PE文件

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

"%s\%s\%08X%x\%s" % (serverName, peName, timeStamp, imageSize, peName)

示例:

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

查找PDB文件

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

"%s\%s\%s%x\%s" % (serverPath, pdbName, guid, age, pdbName)

示例:

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


资料来源:Symbols the Microsoft Way,来自布鲁斯·道森(Bruce Dawson)。

答案 4 :(得分:0)