Ich möchte Assemblies so erweitern, dass diese im Assembly eine Prüfsumme verwalten. Werden Änderungen am Assembly vorgenommen, ist anhand der Prüfsumme diese Änderung direkt erkennbar. Doch wie bilde ich die Prüfsumme am besten, da deren Speicherung im Assembly ja selbst eine Änderung der Prüfsumme nach sich zieht. Wer hat die zündende Idee? Oder gibt es eine andere Möglichkeit Änderungen an Assemblies zu erkennen?
Aber Du willst doch die Prüfsumme nicht aus der Assembly heraus selber bilden, oder? Dann müsstest Du diesen Algorithmus ja in jeder Assembly neu implementieren.
Wenn Du Deine Dateien in ein SVN, CVS, oder ein ähnliches Tool eincheckst hast Du prinzipiell schon eine solche Funktion, da die Änderungen dann nachgehalten werden.
Um Dir besser helfen zu können musst Du bitte mal den Sinn hinter der Aktion erläutern.
da hast Du Dir ein ehrgeiziges Ziel gesetzt. Ich hätte spontan erstmal keinen brauchbaren Ansatz, der mehr als trivialen Angriffen standhält.
Bleibt also die Möglichkeit vorhandene Funktionalität zu nutzen.
StrongNames (Assembly Signing) sind angreifbar(man kann selbst das .NET Framework hacken, habe ich das erste Mal von in der dotnetpro von Golo Roden nen Artikel gelesen). Allerdings weiß ich nicht, ob das (außer bei NativeImages im GAC) auch funktioniert (habs nie ausprobiert, aber das was Golo schreibt, funktioniert!). Ein Artikel im .NET Security Blog lässt auf unmanaged Unterstützung hoffen.
Desweiteren könnte unabh. von der Nutzung von StrongNames oder einer eigenen Variante dieses Forum für Dich interessant sein. Da hab ich auch Augen gemacht, als ich gesehen habe, wie die Jungs selbst ein NativeImage auseinanderpflücken. Mit Sicherheit wird Dir dieses Forum dabei behilflich sein, die Sicherheit Deiner Lösung zu beurteilen ;-)
Viel Erfolg (und sei so gut und teile Deine Erfahrungen mit uns hier) Florian
Du kannst natürlich auch extern signieren und das Ergebnis der Hashbildung irgendwo hinterlegen, natürlich so dass an dieser Stelle keine Änderung vorgenommen werden kann. Vielleicht auf einem Server. Ein Modul könnte dann die Hashes erzeugen und z.B. mit einem Webservice Request am Server validieren. Das dieses System natürlich auch ausgehebelt werden kann ist klar.. :) Vielleicht bekommst du mehr Antworten, wenn du deinen Anwendungsfall noch etwas genauer beschreibst.