Comment une application .net/c# garantit-elle que le dll appelé n’est pas remplacé par un faux ?
https://www.itsvse.com/thread-4173-1-1.html (Source : Architecte) La dernière fois, nous avons testé que la DLL pouvait être falsifiée par d’autres et exécutée, comment l’empêcher ?
Introduction signature :
Une signature assembleur (également appelée signature de nom fort) donne à une application ou à un composant une identité unique que d’autres logiciels peuvent utiliser pour identifier et référencer explicitement l’application ou le composant. Un nom fort se compose du nom texte simple de l’assemblée, du numéro de version, des informations régionales (si fournies), et d’une paire de clés publique/privée.
Par exemple, une nomenclature forte permet aux auteurs et administrateurs d’applications de spécifier la version exacte d’un service qui sera utilisée par les composants partagés. Cela permet à différentes applications de spécifier différentes versions sans affecter les autres. Vous pouvez également utiliser le nom fort du composant comme preuve de sécurité pour créer une relation de confiance entre les deux composants.
Pour signer fortement un assembleur, vous n’avez pas besoin de signer un certificat numérique avec le code acheté, vous pouvez générer un fichier SNK avec l’outil sn fourni par .NET, et vous pouvez garantir la signature de votre assemblage en enregistrant ce fichier.
Cependant, une signature forte pour un assembleur n’est pas la même chose qu’une signature numérique pour un fichier exécutable (même si l’assembleur est un fichier exe). Et le MSDN dit clairement que les fichiers exe ne doivent pas être fortement signés (même si je l’ai fait). Une signature numérique pour un fichier consiste en fait à associer une signature à n’importe quel fichier au niveau du système de fichiers, indiquant au système d’exploitation qui est l’émetteur de ce fichier. Dans la boîte de dialogue des propriétés du fichier, vous pouvez voir l’onglet « Signatures numériques ».
Nous signons fortement la DLL, puis l’appelons avec un programme, qui peut être exécuté normalement, comme suit :
Et si on remplaçait la DLL par une dLL forgée ? Testez-le, et constatez que l’exécution est une erreur, ce qui peut effectivement empêcher la dll appelante d’être falsifiée (Je l’ai testé, modifié le code DLL signé, puis régénéré, et l’application peut aussi être appelée normalement, tant que le programme est signé correctement !!)
L’erreur est la suivante :
Pour plus d’informations sur le débogage en temps réel (JIT) appelé au lieu de ce dialogue : Voir la fin de ce message.
Texte inhabituel **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Nom du fichier : « dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e » En TestDll.Form1.button1_Click_1 (Object sender, EventArgs e) Dans System.Windows.Forms.Control.OnClick(EventArgs e) Dans System.Windows.Forms.Button.OnClick(EventArgs e) Dans System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) Sur System.Windows.Forms.Control.WmMouseUp(Message& m, bouton MouseButton, Int32 clics) Dans System.Windows.Forms.Control.WndProc(Message& m) Dans System.Windows.Forms.ButtonBase.WndProc(Message& m) Dans System.Windows.Forms.Button.WndProc(Message& m) Dans System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) Dans System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Attention : la journalisation des liaisons d’assemblage est désactivée. Pour permettre la journalisation des échecs de liaison d’assemblage, définissez la valeur du registre [HKLM\Software\Microsoft\Fusion !" EnableLog (DWORD) est réglé à 1. Note : Il y aura certaines pénalités de performance associées à la journalisation des défaillances de liaison d’assemblage. Pour désactiver cette fonctionnalité, supprimez la valeur du registre [HKLM\Software\Microsoft\Fusion !] EnableLog]。
Assemblages chargés ************** MSCORLIB Version assembleur : 4.0.0.0 Version Win32 : 4.7.2098.0 Créée par : NET47REL1LAST Code de base : file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Version assembleur : 1.0.0.0 Version Win32 : 1.0.0.0 Code de base : file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Version assembleur : 4.0.0.0 Version Win32 : 4.7.2094.0 Créée par : NET47REL1LAST Code de base : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- Système Version assembleur : 4.0.0.0 Version Win32 : 4.7.2093.0 Construite par : NET47REL1LAST Code de base : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Drawing Version assembleur : 4.0.0.0 Version Win32 : 4.7.2046.0 Créée par : NET47REL1 Code de base : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Version assembleur : 4.0.0.0 Version Win32 : 4.7.2046.0 Créée par : NET47REL1 Code de base : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Version assembleur : 4.0.0.0 Version Win32 : 4.7.2098.0 Créée par : NET47REL1LAST Code de base : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.XML Version assembleur : 4.0.0.0 Version Win32 : 4.7.2046.0 Créée par : NET47REL1 Code de base : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Version assembleur : 4.0.0.0 Version Win32 : 4.7.2046.0 Créée par : NET47REL1 Code de base : 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 Version assembleur : 4.0.0.0 Version Win32 : 4.7.2046.0 Créée par : NET47REL1 Code de base : file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
Débogage ************** Pour permettre le débogage en temps réel (JIT), Il doit être défini dans la section system.windows.forms du fichier .config (machine.config) de l’application ou de l’ordinateur jitDebugging value. Il doit également être activé lors de la compilation de l’application Débogage.
Par exemple :
<configuration> <system.windows.forms jitDebugging="true » /> </configuration>
Toute exception non gérée après le débogage JIT est activée sera envoyé au débogueur JIT enregistré sur cette machine, Au lieu d’être géré par ce dialogue.
|