如何确保我的 dll 未被修改?

信息安全 正直 图书馆
2021-08-30 17:07:08

我在 VB 中有一个旧项目,它根据 MA​​C 地址和光盘 ID 创建了一个唯一的 pc 代码。这用于识别 pc,因此不能在 pc 之间使用凭据。

这个项目迁移到 C#,我将这个逻辑封装在一个 DLL 中,它只调用一个返回 pc_id 的方法。

我现在遇到的问题是,创建一个具有相同类名和方法签名的新 D​​LL 并返回他们想要的任何 pc_id 非常容易。

如何确保我的程序引用的 DLL 实际上是我的?

我想将我的 DLL 的哈希值与硬编码的哈希值进行比较,但这在不同的操作系统之间是否安全?文件的哈希值会在文件系统之间改变吗?

或者在确保文件完整性/来源时首选哪种方法?

4个回答

对于 Windows 二进制文件,我建议对文件进行数字签名

在您使用证书的地方,几乎与 HTTPS 相同的技术。

代码签名简介

标志工具

然后您应该使用 Windows 加密 API 来验证加载的 DLL 的签名

我知道要完成这项工作,您需要做很多工作。但是,对于 Windows,这是最安全的路径如果 SHA 哈希还不够,这是另一种选择。

由于 MAC 地址提供的保护级别较低,我不会打扰。更改 MAC 地址比交换 DLL 更省力。

哈希在文件系统之间不会改变。根据代码中已知的“好”值检查文件的 SHA1 哈希值,您应该离开!

如果您的目标是防止在其他 PC 上使用凭据,请查看Windows 数据保护 API有了它,您可以加密您的凭据或任何其他数据,并且只能在这台计算机上解密(或仅在当前 Windows 用户帐户下,如果您需要)。