依赖DLL或EXE

时间:2016-02-02 15:47:16

标签: windows versioning

Stackoverflow question询问如何修改现有二进制文件(DLL或EXE)中的版本信息。答案是使用Visual Studio。我尝试了第三方DLL我们的PC供应商给我们读取系统指标(如电池电压或主板温度)。供应商忽略了向DLL添加任何版本信息。这被证明是令人不安的,查看文件属性时的版本信息看起来绝对合法。

Superuser question显示如何使用名为Autoruns的精彩实用程序来查看计算机上正在启动和运行的内容。其中一个评价较高的答案表明,对发布者未知或空白的DLL或EXE表示怀疑。

现在我自己运行了Autoruns并确定了当前未加载到内存中的Java DLL。 DLL被加载到VS和"公司名称"修改自" Oracle Corporation" to" HonkyTonks"。重新加载Autoruns ......并且看看" Publisher"现在显示" HonkyTonks"!在Windows资源管理器中将鼠标悬停在DLL上也会显示版本信息以及我要做的任何修改。

所以我的问题是:

1)建议寻找公司名称/出版商有用(在安全方面)?

2)这对我来说就像一个安全漏洞,因为许多其他有能力的计算机用户可能会看到" Microsoft Corporation"或类似的版本信息,并假设该文件是合法的。这是一个已知的漏洞,如果是这样,它适用于所有版本的Windows以及可能的其他操作系统?我只是落后于时代,人们永远不应该相信这些信息吗?

3)您能以编程方式检测版本信息是否已经以这种方式修改过吗?

4)你能否锁定我们自己的二进制文件中的版本信息,以便其他人不能轻易修改它?

感谢。

1 个答案:

答案 0 :(得分:1)

  1. 在安全性方面,版本信息大部分都是无用的。它 仅提供有关发布商和您的基本信息 提到的很容易伪造。

  2. 是的,这就是为什么在Microsoft的.Net Framework中,您可以对程序集和可执行文件进行数字签名。在这种情况下,即使修改版本信息也会导致拒绝执行或加载已签名的二进制文件。伪造程序集的唯一方法是窃取用于签名的私钥 组装

  3. 没有。只有在您签署了可执行文件或DLL后,才有可能。但在经典的Windows(不是MS .Net)中,它几乎是不可能的。因为您需要将用于验证的密钥的公共部分存储在安全的地方。否则,黑客可以用他自己的公钥替换公钥,你的验证程序将无法检测到假冒。

  4. 您可以对二进制文件进行签名并将数字签名放在其中或单独的文件中。并在加载之前验证签名与二进制文件。您必须保护公钥存储。