Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 22989|Risposta: 1

[WinForm] .net/c# utilizza firme forti per proteggere le proprie DLL dalla falsificazione

[Copiato link]
Pubblicato su 19/10/2017 17:31:40 | | | |
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.







Precedente:Come fa un'applicazione .net/c# a garantire che il dll chiamato non venga sostituito da un falso?
Prossimo:fsadf{:1_2:}
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com