|
|
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:}
|