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

2019-07-17 22:00发布

我试图找出散列算法用于Microsoft符号本地缓存目录。

例如,本地高速缓存可以像下面这样

  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),并没有匹配的文件(直线上升,逆转,备用endian'd等)

有任何想法吗?

更新我想我终于找到了。 从符号存储格式 :

SymStore使用文件系统本身的数据库。 它创建了一个大的树目录,基于这样的事情作为符号文件时间戳,签名,年龄和其他数据的目录名。

编辑荡,遗憾的是它只是提到,目录名是从各个方面得到的(不太哈希我猜),但并不完全怎么说。 继续搜索... :-(

Answer 1:

此页面对计算符号文件以及可执行文件/ DLL文件的ID信息。

基本上,对于可执行文件和DLL,你提取从PE头中的时间戳和文件大小为在格里夫链接到页面中列出。 然而对于PDB文件,则需要从Windows调试工具胸径命令。 只需加载PDB文件到胸径和使用INFO命令来获取PdbSig / PdbSig70PdbAge。 巴姆! 而已。


我刚刚创建的PDB文件,我在我的SYSTEM32文件夹中由于某种原因,最后他们搬到了本地符号存储相应的文件夹。



Answer 2:

试着看一下这个页面: 符号服务器回调函数



Answer 3:

EXE / DLL目录名是由串接“文件修改”时间戳的十六进制字符串和“SizeOfImage”创建IMAGE_OPTIONAL_HEADER



Answer 4:

你可以找到答案,

SYMBOL猎犬外壳扩展; http://www.vitoplantamura.com/index.aspx?page=symretriever

DebugDir.cpp; http://www.debuginfo.com/examples/src/DebugDir.cpp

PDB文件塔内; http://www.informit.com/articles/article.aspx?p=22685



文章来源: Microsoft Symbol Server / Local Cache Hash Algorithm