Come fa un'applicazione .net/c# a garantire che il dll chiamato non venga sostituito da un falso?
https://www.itsvse.com/thread-4173-1-1.html (Fonte: Architetto) L'ultima volta abbiamo testato che la dll può essere falsificata da altri ed eseguita, come evitarlo?
Introduzione Distintiva:
Una firma assembly (nota anche come firma di nome forte) conferisce a un'applicazione o a un componente un'identità unica che altri software possono utilizzare per identificare e fare riferimento esplicitamente all'applicazione o al componente. Un nome forte consiste nel semplice nome testuale dell'assemblea, dal numero di versione, dalle informazioni regionali (se fornite) e da una coppia di chiavi pubblico/privata.
Ad esempio, una denominazione forte permette agli autori e agli amministratori delle applicazioni di specificare la versione esatta di un servizio che sarà utilizzata dai componenti condivisi. Questo permette a diverse applicazioni di specificare versioni diverse senza influenzare altre. Puoi anche usare il nome forte del componente come prova di sicurezza per generare una relazione di fiducia tra i due componenti.
Per firmare fortemente un assembly, non è necessario firmare un certificato digitale con il codice acquistato, puoi generare un file SNK con lo strumento sn fornito da .NET e puoi garantire la firma del tuo assembly salvando questo file.
Tuttavia, una firma forte per un assembly non è la stessa di una firma digitale per un file eseguibile (anche se l'assembly è un file exe). E MSDN dice chiaramente che i file exe non dovrebbero essere firmati con forza (anche se io l'ho fatto). Una firma digitale per un file è in realtà l'aggiunta di una firma a qualsiasi file a livello di file system, indicando al sistema operativo chi è l'emittente di quel file. Nella finestra di dialogo proprietà del file, puoi vedere la scheda "Digital Signatures".
Firmiamo fortemente la dll e poi la chiamiamo con un programma, che può essere eseguito normalmente, come segue:
E se sostituissimo la dll con una dll forgiata? Testalo e scopri che l'esecuzione è un errore, il che può effettivamente impedire che la dll chiamante venga falsificata (L'ho testato, modificato il codice dll firmato, poi lo ho rigenerato, e l'applicazione può essere chiamata normalmente, dovrebbe essere così purché il programma sia firmato correttamente!!)
L'errore è il seguente:
Per maggiori informazioni su come chiamare il debug in tempo reale (JIT) invece di questo dialogo, Vedi la fine di questo messaggio.
Testo insolito **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Nome file: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" In TestDll.Form1.button1_Click_1 (Object sender, 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) Su System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButton, Int32 click) 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.ControlControlNativeWindow.OnMessage(Message& m) In System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Attenzione: il logging del binding assembly è disattivato. Per abilitare la registrazione dei fallimenti del binding assembly, imposta il valore del registro [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) è impostato su 1. Nota: Ci saranno alcune penalità di prestazioni associate alla registrazione dei guasti del binding dell'assemblaggio. Per disattivare questa funzione, rimuovi il valore del registro [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Assemblaggi caricati ************** mscorlib Versione assembly: 4.0.0.0 Versione Win32: 4.7.2098.0 Costruita da: NET47REL1LAST Codice base: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Versione assembly: 1.0.0.0 Versione Win32: 1.0.0.0 Codice base: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Versione assembly: 4.0.0.0 Versione Win32: 4.7.2094.0 Compilata da: NET47REL1LAST Codice base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- Sistema Versione assembly: 4.0.0.0 Versione Win32: 4.7.2093.0 Compilata da: NET47REL1LAST Codice base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Disegno Versione assembly: 4.0.0.0 Versione Win32: 4.7.2046.0 Compilata da: NET47REL1 Codice base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Versione assembly: 4.0.0.0 Versione Win32: 4.7.2046.0 Compilata da: NET47REL1 Codice base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Versione assembly: 4.0.0.0 Versione Win32: 4.7.2098.0 Costruita da: NET47REL1LAST Codice base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Versione assembly: 4.0.0.0 Versione Win32: 4.7.2046.0 Compilata da: NET47REL1 Codice 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 Versione assembly: 4.0.0.0 Versione Win32: 4.7.2046.0 Compilata da: NET47REL1 Codice 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 Versione assembly: 4.0.0.0 Versione Win32: 4.7.2046.0 Compilata da: NET47REL1 Codice base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
Debug ************** JIT Per abilitare il debug in tempo reale (JIT), Deve essere impostato nella sezione system.windows.forms del file .config (machine.config) dell'applicazione o del computer jitDebugging value. Deve essere abilitato anche durante la compilazione dell'applicazione Debug.
Per esempio:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Qualsiasi eccezione non gestita dopo il debug JIT è abilitata verrà inviato al debugger JIT registrato su questa macchina, Invece di essere gestito da questo dialogo.
|