2011-11-01 65 views
4

我正在查找symstore用来创建目录名称的哈希算法。我发现这个链接Microsoft Symbol Server/Local Cache Hash Algorithm描述了用于生成散列的数据元素,但没有详细说明如何计算散列值。我有兴趣看看symstore如何生成哈希目录,如果有人有任何示例代码可以显示,那就太好了!symstore如何计算目录哈希值

+0

其实1419347描述的领域,而不是如何计算被执行。这就是为什么这个问题发布 –

回答

2

不确定您是否已经查看过this,但它是描述符号存储过程的美国专利。它可以想象的非常密集,但它确实详细描述了符号存储目录是如何扩展和删除的(具体在第6,7,8节中)。希望这会有所帮助,或者指出你的方向正确。

5

symstore.exe计算哈希目录名称如下:

对于PDB文件时,GUID +时代使用。下面是一个python例如:

pdb = pdbparse.parse("some.pdb") 
pdb.STREAM_PDB.load() 
guid = pdb.STREAM_PDB.GUID 
guid_str = "%.8X%.4X%.4X%s" % (guid.Data1, guid.Data2, guid.Data3, 
           guid.Data4.encode("hex").upper()) 

symstore_hash = "%s%s" % (guid_str, pdb.STREAM_PDB.Age) 

对于PE(EXE/DLL)文件,该TimeDateStamp(从IMAGE_FILE_HEADER)和SizeOfImage(从IMAGE_OPTIONAL_HEADER)被使用。下面是一个Python的例子:

pe = pefile.PE("some.exe") 

symstore_hash = "%X%X" % (pe.FILE_HEADER.TimeDateStamp, 
          pe.OPTIONAL_HEADER.SizeOfImage) 

下面是一个例子Python脚本,打印symstore哈希值PDB和PE文件:

https://gist.github.com/lennartblanco/9a70961a5aa66fe49df6