Cum garantează o aplicație .net/c# că dll apelat nu este înlocuit de falsificare?
https://www.itsvse.com/thread-4173-1-1.html (Sursa: Arhitect) Data trecută, am testat că dll poate fi falsificat de alții și executat, cum să prevenim asta?
Introducere emblematică:
O semnătură de asamblare (cunoscută și ca semnătură de nume puternic) oferă unei aplicații sau componentei o identitate unică pe care alte programe software o pot folosi pentru a identifica și referenționa explicit aplicația sau componenta. Un nume puternic constă din numele simplu de text al asamblării, numărul de versiune, informațiile regionale (dacă sunt furnizate) și o pereche de chei public/privată.
De exemplu, denumirea puternică permite autorilor și administratorilor aplicațiilor să specifice versiunea exactă a unui serviciu care va fi folosită de componentele partajate. Acest lucru permite diferitelor aplicații să specifice versiuni diferite fără a afecta altele. Poți folosi, de asemenea, denumirea puternică a componentei ca dovadă de securitate pentru a genera o relație de încredere între cele două componente.
Pentru a semna puternic o asamblare, nu trebuie să semnezi un certificat digital cu codul achiziționat, poți genera un fișier SNK cu instrumentul sn oferit de .NET și poți garanta semnătura asamblării salvând acest fișier.
Totuși, o semnătură puternică pentru un ansamblu nu este același lucru cu o semnătură digitală pentru un fișier executabil (chiar dacă asamblarea este un fișier exe). Iar MSDN spune clar că fișierele exe nu ar trebui să fie semnate puternic (deși eu am semnat). O semnătură digitală pentru un fișier atașează de fapt o semnătură oricărui fișier la nivelul sistemului de fișiere, informând sistemul de operare cine este emitentul acelui fișier. În dialogul de proprietăți al fișierului, poți vedea fila "Digital Signatures".
Semnăm puternic DLL-ul, apoi îl numim cu un program, care poate fi executat normal, astfel:
Ce-ar fi să înlocuim dll cu unul falsificat? Testează-l și constată că execuția este o eroare, ceea ce poate preveni efectiv falsificarea dll apelantului (L-am testat, am modificat codul dll semnat, apoi l-am regenerat, iar aplicația poate fi de asemenea apelată normal, așa că ar trebui să fie atâta timp cât programul este semnat corect!!)
Eroarea este următoarea:
Pentru mai multe informații despre apelarea depanării în timp real (JIT) în locul acestui dialog de dialog, Vezi finalul acestui mesaj.
Text neobișnuit **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Nume fișier: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" În TestDll.Form1.button1_Click_1 (Object sender, EventArgs e) În System.Windows.Forms.Control.OnClick(EventArgs e) În System.Windows.Forms.Button.OnClick(EventArgs e) În System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) La System.Windows.Forms.Control.WmMouseUp(Message& m, butonul MouseButton, Int32 click-uri) În System.Windows.Forms.Control.WndProc(Message& m) În System.Windows.Forms.ButtonBase.WndProc(Message& m) În System.Windows.Forms.Button.WndProc(Message& m) În System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) În System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Atenție: Logarea legăturii de asamblare este dezactivată. Pentru a activa înregistrarea eșecului legăturii de asamblare, setați valoarea registrului [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) este setat la 1. Notă: Vor exista unele penalizări de performanță asociate cu înregistrarea defectelor legăturilor de ansamblu. Pentru a dezactiva această funcție, eliminați valoarea registrului [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Ansambluri încărcate ************** mscorlib Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2098.0 construită de: NET47REL1LAST Cod de bază: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Versiunea de asamblare: 1.0.0.0 Versiunea Win32: 1.0.0.0 Cod de bază: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2094.0 Construită de: NET47REL1LAST Cod de bază: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- Sistem Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2093.0 construită de: NET47REL1LAST Cod de bază: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Drawing Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2046.0 Construită de: NET47REL1 Cod de bază: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2046.0 Construită de: NET47REL1 Cod de bază: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2098.0 construită de: NET47REL1LAST Cod de bază: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2046.0 Construită de: NET47REL1 Cod de bază: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2046.0 Construită de: NET47REL1 Cod de bază: 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 Versiunea de asamblare: 4.0.0.0 Versiunea Win32: 4.7.2046.0 Construită de: NET47REL1 Cod de bază: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
Depanarea JIT ************** Pentru a permite depanarea în timp real (JIT), Trebuie setat în secțiunea system.windows.forms din fișierul .config (machine.config) al aplicației sau calculatorului jitDebugging value. De asemenea, trebuie activat la compilarea aplicației Depanare.
De exemplu:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Orice excepție negestionată după depanarea JIT este activată va fi trimisă către depanorul JIT înregistrat pe această mașină, În loc să fie gestionat de acest dialog.
|