C# 如何检查签名的C DLL的完整性?

C# 如何检查签名的C DLL的完整性?,c#,dll,certificate,x509certificate,C#,Dll,Certificate,X509certificate,我有一个签名的C Dll,我想测试它的真实性和文件完整性。 到目前为止,我所做的是获取证书并调用在该证书上找到的Verify方法: public ValidatorResult CheckDll() { X509Certificate cert = null; try { cert = X509Certificate.CreateFromSignedFile(dllFilepath); } catch (CryptographicExcept

我有一个签名的C Dll,我想测试它的真实性和文件完整性。 到目前为止,我所做的是获取证书并调用在该证书上找到的Verify方法:

public ValidatorResult CheckDll()
{
    X509Certificate cert = null;
    try
    {
       cert = X509Certificate.CreateFromSignedFile(dllFilepath);
    }
    catch (CryptographicException)
    {
       return new ValidatorResult(ValidatorResult.DllStatus.INVALID_SIGNATURE);
    }

    if (cert == null || !ValidateCertificate(cert))
    {
       return new ValidatorResult(ValidatorResult.DllStatus.INVALID_SIGNATURE);
    }
}   

private bool ValidateCertificate(X509Certificate cert)
{
    var chain = new X509Chain();

    /* Do a chain verification */
    var primaryCert = new X509Certificate2(cert.GetRawCertData());
    if (!chain.Build(primaryCert))
       return false;

    /* Call The Verify method on the newer X509Certificate2 class */
    if (!primaryCert.Verify())
       return false;

    return true;
}
我可能是错的,所以请纠正我,但从我在互联网上看到的验证方法只检查证书的有效性。我还需要检查文件的完整性

当我加载dll并更改公司名称时,我使用资源黑客工具进行了一个小测试。这个修改过的dll传递了上面的代码

我应该如何更改代码以便检查文件是否被修改


谢谢。

使用此代码验证DLL

[DllImport("mscoree.dll", CharSet = CharSet.Unicode)]
public static extern bool StrongNameSignatureVerificationEx(
        string wszFilePath, bool fForceVerification, ref bool pfWasVerified);    

bool pfWasVerified = false;
if (!StrongNameSignatureVerificationEx("path...to...DLL", true, ref pfWasVerified))
{           
    // it's a modified DLL file!   
}

这很奇怪,因为我能够使用上面的代码和修改过的dll作为有效的dll传递。是的,Verify使用基本验证策略执行X.509链验证。因此,它只检查证书是否有效,而不检查文件是否有效,抱歉。所以你根本没有收到支票Verify@Daniel我已经用一个解决方案对其进行了更新,没有可管理的方法可以做到这一点,您必须P/调用StrongNameSignatureVerificationExAll primaryCert。验证是否在默认选项X509Chain上调用生成。因此,两个if块在功能上相互重复。