Hallo,
ich möchte für eine signierte Datei überprüfen, ob die Signatur gültig ist. Hab in der MSDN gelesen, dass man das mit einem Tool (chktrust.exe) machen kann. Ich möchte das aber gerne intern imn Programm machen und keine externe Anwendung für die Überprüfung aufrufen. Hat jemand damit schon Erfahrung? Hab bis jetzt nix brauchbares im Internet gefunden...
Vielen Dank!
Hallo go7chib,
weiß nicht, ob es einen direkten Weg gibt, aber du kannst ja mal chktrust.exe per Process.Start aufrufen und nach Process.WaitForExit mit Process.ExitCode den Rückgabecode prüfen.
herbivore
Wie krieg ich beim Aufruf den Parameter für den Dateinamen mit?
Process test = Process.Start(@"C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\chktrust E:\Testdatei.exe");
(die Backshlashes wurden vom Forum entfernt....)
so funktioniert es nicht, er meint er kann die angegebene Datei nicht finden. Wenn ich den Paramter weglasse, dann kommt kein Fehler (dann hat er natürlich aber auch nix überprüft...).
Hallo go7chib,
eine Frage für die SDK-Doku. 🙂
Verwende die Überladung public static Process Start (string fileName, string arguments);
herbivore
Scheint zu funktionieren... wenn die Signatur gültig ist gibt er 0 zurück, ansonsten 1.
Vielen Dank.
Hat jemand eine Idee, wie man das ohne die chktrust.exe machen kann. Weil theoretisch könnte ja jeder die chktrust austauschen und immer "0" zurückgeben und so die Überprüfung umgehen...
Hallo go7chib,
du könntest ja vor dem Aufruf von chktrust.exe dessen MD5-Summe ermitteln und prüfen.
herbivore
das wäre eine Alternative. Ist die chktrust standardmäßig beim Framework dabei oder muss ich die mit meinen Anwendungen selber mitliefern (darf man das?)
Hallo go7chib,
eine Frage für die SDK-Doku. 🙂 (Per chktrust im Index)
The Certificate Verification tool only ships with the .NET Framework SDK version 1.0 and 1.1. In later versions of the .NET Framework SDK, use the Sign Tool (SignTool.exe) utility instead.
herbivore
Ah okay. Habs umgebaut auf signtool.
Eine Frage noch (hab vorher in der SDK-Doku geguckt 😉)
Kann man den Process auch so ablaufen lassen, dass man ihn nicht sieht. Im Moment is für einen kurzen Moment ein "DOS-Fenster" (weiß nicht wie man das nennt..) zu sehen...
Hallo go7chib,
trotzdem eine Frage für die SDK-Doku 🙂 Ok, über eine Indirektionsstufe.
ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
und/oder
ProcessStartInfo.CreateNoWindow = true
herbivore
Vielen Dank, mit startinfo.WindowStyle = ProcessWindowStyle.Hidden; funktioniert es.
Falls jemand doch noch weiß wie eine interne Prüfung direkt in C# geht.. ich würd mich freuen 😉
Das kannst du via CryptoAPI machen. In der Hilfe zu ChkTrust.exe wird auch beschrieben wie es geht:
Das hatte ich auch gefunden... wusste da aber nicht weiter, da ich bei keinem der Schritte weiß wie's geht und dazu auch nix gefunden hab... Ein Beispiel dazu hast du zufällig nicht, oder?
Nein, aber schau mal ans Ende dieses Artikels, da sind haufenweise Links zum Thema:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncapi/html/netcryptoapi.asp