Assembly.LoadFrom - mit Evidence Überlastung starken Namen Signatur zu verifizieren

StackOverflow https://stackoverflow.com/questions/809934

  •  03-07-2019
  •  | 
  •  

Frage

Ist es möglich, die Assembly.LoadFrom Überlastung mit den Evidence-Parametern zu verwenden, um sicherzustellen, dass die Baugruppe stark benannt? Ich möchte in der Lage, den Namen der Assembly, Kultur, Version und Public-Key-Token angeben. Wenn eine dieser Informationen nicht die Assembly übereinstimmen sollte nicht geladen werden.

War es hilfreich?

Lösung 3

ich einen anderen Weg gefunden, dies zu tun.

var assemblyName = new AssemblyName(<fully qualified type name>);
assemblyName.CodeBase = <path to assembly>

Assembly.Load(assemblyName);

Andere Tipps

Sie können eine Versammlung der öffentlichen Schlüssel erhalten, nachdem es geladen - wenn es einen öffentlichen Schlüssel erfolgreich und hat geladen wird, dann ist es mit starkem Namen:

Assembly assembly = Assembly.LoadFrom (...);
byte[] pk = assembly.GetName().GetPublicKey();

Noch besser ist es, überprüfen Sie die öffentlichen Schlüssel und Versionsinformationen der Versammlung vor Laden sie:

AssemblyName an = AssemblyName.GetAssemblyName ("myfile.exe");
byte[] publicKey = an.GetPublicKey();
CultureInfo culture = an.CultureInfo;
Version version = an.Version;

Wenn GetPublicKey () einen Wert ungleich Null zurückgibt, und dann die Montage erfolgreich lädt, hat es einen gültigen starken Namen.

Ich habe einen Weg für die starken-Überprüfung des Namen brechen System.Windows.Forms.dll zum Patchen. Wenn ich es bin mit, gibt es nicht viel können Sie dagegen tun können. Mein Trick erfordert volles Vertrauen.

Was ich tat, war die DLL Patch, implementieren die gepatchte dll, ngen es, und das Lade Patch anstelle des ursprünglichen die gepatchte ngen Bild aufzunehmen. Was hätte ich getan wurde die Aktie ngened dll verprügeln. (Getestet habe ich tatsächlich diesen Weg und entschied ich möglicherweise jemand andere Software zu brechen war eine schlechte Wahl.)

Ich sage nicht, das ist eine gute Idee ist, zu tun. Ich sage, dass in Abhängigkeit von Signaturen von Assembly.Load Verifizieren eine schlechte Idee ist.

Versuchen Sie, die System.ReflectionAssemblyNameFlags Aufzählung:

bool f_public_key = ((asm.GetName().Flags & AssemblyNameFlags.PublicKey) != 0);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top