Meine .NET-Exe ist mit Signtool signiert. diesen Code verwenden, kann ich die Gültigkeit des Zertifikats selbst überprüfen:Überprüfen der digitalen Signatur auf EXE
var cert = X509Certificate.CreateFromSignedFile("application.exe");
var cert2 = new X509Certificate2(cert.Handle);
bool valid = cert2.Verify();
aber nur, prüft das Zertifikat selbst und nicht die Unterschrift der EXE-Datei. Wenn die EXE manipuliert wird, erkennt diese Methode daher nicht.
Wie kann ich die Signatur überprüfen?
[DllImport("mscoree.dll", CharSet = CharSet.Unicode)]
public static extern bool StrongNameSignatureVerificationEx(
string wszFilePath, bool fForceVerification, ref bool pfWasVerified);
var assembly = Assembly.GetExecutingAssembly();
bool pfWasVerified = false;
if (!StrongNameSignatureVerificationEx(assembly.Location, true, ref pfWasVerified))
{
// it's a patched .exe file!
}
Aber es ist nicht genug:
'X509Certificate.CreateFromSignedFile (" "). Verify()'? – Sinatr
.CreateFromSignedFile gibt eine Instanz von X509Certificate zurück und hat keine .Verify-Methode. – LTR
Ok, dann noch eine dumme Idee: Konstruiere 'X509Certificate2' mit' X509Certificate', nicht 'Handle'. Ich rate: 'Verify' Methode * sollte * überprüfen Sie die Datei auch oder Zertifikat wird Ausnahme auslösen (wenn Instanziierung?) Wenn exe-Datei manipuliert wird. Vielleicht müssen Sie eine eigene Validierung [Kette] implementieren (http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509chain.aspx). – Sinatr