Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 22989|Répondre: 1

[WinForm] .net/c# utilise des signatures fortes pour protéger ses propres DLL contre la falsification

[Copié le lien]
Publié sur 19/10/2017 17:31:40 | | | |
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.







Précédent:Comment une application .net/c# garantit-elle que le dll appelé n’est pas remplacé par un faux ?
Prochain:fsadf{ :1_2 :}
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com