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

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


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;

}

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


我使用“Resource Hacker”工具做了一个小测试,我加载了 dll 并更改了公司名称。这个修改过的dll通过了上面的代码。


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


三国纷争
浏览 402回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP