我第一次注意到我的集合中的一个mscordacwks DLL是不同的(SVN告诉我)。当我做一些研究时,我发现有这些DLL的LDR版本和GDR版本。
对于有问题的文件,我注意到其中一个没有经过数字签名,但另一个是(很幸运的是)。
现在我有以下问题:
我将尝试找出我从哪里获得未签名的DLL。当我需要特定版本时,我很可能会从一些或多或少可疑的网站上下载它。
仅供参考:VirusTotal analysis没有发现任何病毒。
答案 0 :(得分:-1)
感谢评论中的帮助,我可以总结一下:
根据Hans Passant的说法,所有的Microsoft DLL都应该签名,因此我们必须小心使用未签名的DLL。
不幸的是,这个声明并非100%正确,我已经验证了Mscordacwks.dll 2.0.50727.312和SOS.dll 2.0.50727.312。 Microsoft已将该版本与Windows Vista一起发布。我尝试从头开始安装Windows Vista。
这是Windows Vista附带的DLL上sigcheck -h
的输出:
Verified: Unsigned
Link date: 09:05 19.10.2006
Publisher: Microsoft Corporation
Description: Microsoft .NET External Data Access Support
Product: Microsoft« .NET Framework
Prod version: 2.0.50727.312
File version: 2.0.50727.312 (rtmLHS.050727-3100)
MachineType: 32-bit
MD5: 9252D83D169E84A442BB154A79AC2189
SHA1: 63464F337295D689384BAA514F260C54D06291C6
PESHA1: 99D57B38C554FFD4BEC6E6C2FAD7F77B980CB47B
PE256: EF387EF84028497D5F7D231ED3A6F5FB05C02D96BD3B0E470C6BEBFAD6942AC8
SHA256: 5ADB79D39FC8401CB9542B571EEEC82CAFCADAE2F26997C789E14EC8E9635C08
另请参阅VirusTotal中具有相同哈希码的详细信息。请注意,通过列出“Authenticode签名块”,该网站有点误导。实际上,这只是文件的版本信息。此DLL中缺少标记为“签名验证:已签名文件,已验证签名”的最重要行。
如果文件真的签名,这就是应该的样子:
sigcheck
和Windows资源管理器的输出也显示文件未签名:
Verified: Unsigned
Link date: 09:05 19.10.2006
Publisher: Microsoft Corporation
Description: Microsoft .NET External Data Access Support
Product: Microsoft« .NET Framework
Prod version: 2.0.50727.312
File version: 2.0.50727.312 (rtmLHS.050727-3100)
MachineType: 32-bit
Windows资源管理器的屏幕截图,其中文件没有数字签名选项卡:
在VirusTotal报告结束时,您会找到NIST(美国国家标准与技术研究院)的声明,该声明称该文件随Windows Vista Ultimate一起提供,并且似乎是安全的。这是我上传未签名版本后我被引导访问的网站。
SysInternals sigcheck 工具显示的版本号比Windows资源管理器更多。如果它包含“GDR”,则它是GDR版本。如果它不包含GDR,则它是LDR版本。
要在C#中获取要进行比较的字符串,可以使用以下代码:
var versionInfo = FileVersionInfo.GetVersionInfo(fullFileName);
var fileVersion = versionInfo.FileVersion;
我检查了所有我的DLL签名,发现了比预期更多的未签名DLL。但是,之前已在VirusTotal上扫描过大多数文件。但是,这些版本都没有NIST条目。
如Jeroen Mostert所述,DLLMain入口点将被执行,因此可能存在恶意代码注入。