Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 22989|Antwort: 1

[WinForm] .net/c# verwendet starke Signaturen, um seine eigenen DLLs vor Fälschung zu schützen

[Link kopieren]
Veröffentlicht am 19.10.2017 17:31:40 | | | |
Wie garantiert eine .net/c#-Anwendung, dass die aufgerufene DLL nicht durch Fälschung ersetzt wird?
https://www.itsvse.com/thread-4173-1-1.html
(Quelle: Architekt)

Beim letzten Mal haben wir getestet, dass die DLL von anderen gefälscht und ausgeführt werden kann – wie kann man das verhindern?



Signatur-Einleitung:
Eine Assemblersignatur (auch als Strong-Name-Signatur bekannt) verleiht einer Anwendung oder Komponente eine eindeutige Identität, die andere Software verwenden kann, um die Anwendung oder Komponente explizit zu identifizieren und zu referenzieren. Ein starker Name besteht aus dem einfachen Textnamen der Assembly, der Versionsnummer, regionalen Informationen (sofern angegeben) und einem Public/Private Key-Paar.

Zum Beispiel ermöglicht starke Benennung Anwendungsautoren und -administratoren, die genaue Version eines Dienstes anzugeben, die von gemeinsamen Komponenten verwendet wird. Dies ermöglicht es verschiedenen Anwendungen, unterschiedliche Versionen anzugeben, ohne andere zu beeinflussen. Man kann auch den starken Namen der Komponente als Sicherheitsnachweis nutzen, um eine Vertrauensbeziehung zwischen den beiden Komponenten zu schaffen.

Um eine Assembly stark zu signieren, musst du kein digitales Zertifikat mit gekauftem Code unterschreiben, du kannst mit dem von .NET bereitgestellten SNK-Tool eine SNK-Datei generieren und die Signatur deiner Assembly garantieren, indem du diese Datei speicherst.

Eine starke Signatur für eine Assembly ist jedoch nicht dasselbe wie eine digitale Signatur für eine ausführbare Datei (selbst wenn die Assembly eine exe-Datei ist). Und MSDN sagt eindeutig, dass Exe-Dateien nicht stark signiert werden sollten (obwohl ich das getan habe). Eine digitale Signatur für eine Datei bedeutet tatsächlich, eine Signatur an jede Datei auf Dateisystemebene anzufügen und dem Betriebssystem mitzuteilen, wer der Herausgeber dieser Datei ist. Im Eigenschaften-Dialog der Datei sehen Sie den Reiter "Digitale Signaturen".


Wir signieren die DLL stark und rufen sie dann mit einem Programm auf, das normal ausgeführt werden kann, wie folgt:


Was, wenn wir die DLL durch eine gefälschte DLL ersetzen? Teste es und stelle fest, dass die Ausführung fehlerhaft ist, was effektiv verhindern kann, dass die aufrufende DLL gefälscht wird (Ich habe es getestet, den signierten DLL-Code geändert und dann neu generiert, und die Anwendung kann auch normal aufgerufen werden, solange das Programm korrekt signiert ist!!

Der Fehler lautet wie folgt:

Für weitere Informationen zum Aufrufen von Echtzeit-(JIT-)Debugging statt dieses Dialogs,
Siehe das Ende dieser Nachricht.

Ungewöhnlicher Text **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Dateiname: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e"
   In TestDll.Form1.button1_Click_1 (Objektsender, EventArgs e)
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   Bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons-Button, Int32-Klicks)
   In System.Windows.Forms.Control.WndProc(Message& m)
   In System.Windows.Forms.ButtonBase.WndProc(Message& m)
   In System.Windows.Forms.Button.WndProc(Message& m)
   In System.Windows.Forms.Control.NativeWindow.OnMessage(Message& m)
   In System.Windows.Forms.Control.NativeWindow.WndProc(Message& m)
   In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Warnung: Assembly-Bindungsprotokollierung ist deaktiviert.
Um das Fehlerprotokoll der Assemblerbindung zu aktivieren, setzen Sie den Registrierungswert [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) ist auf 1 gesetzt.
Hinweis: Es gibt einige Leistungseinbußen im Zusammenhang mit Assembly-Binding-Fehlerprotokollierungen.
Um diese Funktion auszuschalten, entferne den Registrierungswert [HKLM\Software\Microsoft\Fusion!] EnableLog]。



Geladene Baugruppen **************
mscorlib
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2098.0 gebaut von: NET47REL1LAST
    Basiscode: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
TestDll
    Assemblerversion: 1.0.0.0
    Win32-Version: 1.0.0.0
    Basiscode: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe
----------------------------------------
System.Windows.Forms
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2094.0 gebaut von: NET47REL1LAST
    Basiscode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2093.0 gebaut von: NET47REL1LAST
    Grundcode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System. Zeichnung
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2046.0 gebaut von: NET47REL1
    Basiscode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Konfiguration
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2046.0 gebaut von: NET47REL1
    Basiscode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2098.0 gebaut von: NET47REL1LAST
    Basiscode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2046.0 gebaut von: NET47REL1
    Basiscode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2046.0 gebaut von: NET47REL1
    Basiscode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.resources
    Montageversion: 4.0.0.0
    Win32-Version: 4.7.2046.0 gebaut von: NET47REL1
    Basiscode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

JIT-Debugging **************
Um Echtzeit-(JIT)-Debugging zu ermöglichen,
Sie muss im Bereich system.windows.forms der .config-Datei (machine.config) der Anwendung oder des Computers gesetzt werden
jitDebugging-Wert.
Es muss auch beim Kompilieren der Anwendung aktiviert sein
Debugging.

Zum Beispiel:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Alle unbehandelten Ausnahmen nach dem JIT-Debugging sind aktiviert
an den auf dieser Maschine registrierten JIT-Debugger gesendet wird,
Anstatt von diesem Dialog behandelt zu werden.







Vorhergehend:Wie garantiert eine .net/c#-Anwendung, dass die aufgerufene DLL nicht durch Fälschung ersetzt wird?
Nächster:fsadf{:1_2:}
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com