C#中的数字签名和比较dll

问题描述 投票:0回答:1

每天,我们的 CI 都会生成一堆 dll,我们需要对其进行签名并与参考文件夹进行比较。如果它们发生变化,我们将新的 dll 复制到引用中

为此,我使用 C# 调用 powershell 的 Set-AuthenticodeSignature 进行签名,并将文件与 MD5 校验和哈希值进行比较

我的问题是我不知道如何继续这个逻辑。

我无法比较 2 个未签名的文件,因为我只能将签名的文件存储在我的参考中。

我无法将签名文件与未签名文件进行比较,因为据我所知,这是不可能的

我无法比较 2 个签名文件,因为两个文件的签名时间戳不同,这会导致不同的哈希校验和

我不知道我的方法应该是什么。 我应该存储未签名文件的 MD5 哈希值以供比较文件的参考吗? 或者我应该创建另一个未签名文件的参考文件夹?

或者有没有一种方法可以实际比较两个签名的文件? 我发现这篇文章,其中有人在比较之前尝试取消对 dll 的签名: https://security.stackexchange.com/questions/262246/how-do-i-compare-a-signed-exe-file-with-the-unsigned-version-of-the-same-exe-f

您对于如何进行此操作有什么好的想法吗? 我最好的猜测是将 md5 哈希值存储为第二个参考,但如何有效地存储它们?我尝试使用包含当前未签名哈希的 txt 文件“filename.dll.md5”镜像参考文件夹。但这对于读取和写入 10k+ txt 文件进行哈希校验和似乎并不真正有效

c# md5 digital-signature authenticode
1个回答
0
投票

我选择使用备用数据流 (ADS) 来遵循不同的策略

对于每个程序集,我在文件的元数据中存储/读取未签名程序集的 MD5,这不会更改文件的实际校验和

您可以使用: File.ReadAllText(“路径/到/程序集.dll:校验和”) 和 File.WriteAllText(“路径/到/程序集.dll:校验和”) 读取和写入元数据

© www.soinside.com 2019 - 2024. All rights reserved.