|
|
Postitatud 19.10.2017 17:31:40
|
|
|
|

Kuidas garanteerib .net/c# rakendus, et kutsutud dll ei asendata võltsinguga?
https://www.itsvse.com/thread-4173-1-1.html (Allikas: Arhitekt) Eelmine kord testisime, et DLL-i saab võltsida ja ellu viia, kuidas seda vältida?
Allkirja sissejuhatus:
Assamblee allkiri (tuntud ka kui tugeva nime allkiri) annab rakendusele või komponendile unikaalse identiteedi, mida teine tarkvara saab kasutada rakenduse või komponendi selgeks tuvastamiseks ja viitamiseks. Tugev nimi koosneb assamblee lihtsast tekstinimest, versiooninumbrist, piirkondlikust infost (kui see on olemas) ja avalikust/privaatvõtme paarist.
Näiteks võimaldab tugev nimetamine rakenduse autoritel ja administraatoritel määrata täpse ühe teenuse versiooni, mida jagatud komponendid kasutavad. See võimaldab erinevatel rakendustel määrata erinevaid versioone ilma teisi mõjutamata. Samuti võib kasutada komponendi tugevat nimetust turvatõendina, et luua usaldussuhe kahe komponendi vahel.
Assembleri tugevaks allkirjastamiseks ei pea sa allkirjastama digitaalset sertifikaati ostetud koodiga, saad SNK-faili genereerida .NET-i pakutava sn-tööriistaga ning saad garanteerida oma assamblee allkirja, salvestades selle faili.
Siiski ei ole tugev allkiri assembleri jaoks sama mis digitaalne allkiri täidetava faili jaoks (isegi kui assembler on exe-fail). Ja MSDN ütleb selgelt, et exe-faile ei tohiks tugevalt allkirjastada (kuigi ma tegin seda). Faili digitaalallkiri tähendab tegelikult allkirja lisamist mis tahes failile failisüsteemi tasemel, mis ütleb operatsioonisüsteemile, kes on selle faili väljastaja. Faili omaduste dialoogis näed vahekaarti "Digitaalsed allkirjad".
Me allkirjastame tugevalt dll-i ja kutsume selle seejärel programmiga, mida saab normaalselt käivitada järgmiselt:
Mis siis, kui asendame DLL-i võltsitud DL-iga? Testi ja leia, et täitmine on viga, mis võib tõhusalt takistada kutsuva dll-i võltsimist (Testisin seda, muutsin allkirjastatud dll koodi ja taastasin selle ning rakendust saab samuti normaalselt kutsuda, see peaks olema nii, kuni programm on õigesti allkirjastatud!!)
Viga on järgmine:
Lisateabe saamiseks reaalajas (JIT) silumise kutsumise kohta selle dialoogi asemel, Vaata selle sõnumi lõppu.
Ebatavaline tekst **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Faili nimi: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" TestDll.Form1.button1_Click_1 (Objekti saatja, EventArgs e) In System.Windows.Forms.Control.OnClick(EventArgs e) System.Windows.Forms.Button.OnClick(EventArgs e) In System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) System.Windows.Forms.Control.WmMouseUp (Message&m, MouseButtons nupp, Int32 klikid) System.Windows.Forms.Control.WndProc(Message&m) System.Windows.Forms.ButtonBase.WndProc(Message&m) System.Windows.Forms.Button.WndProc(Message&m) System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m) System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Hoiatus: Assembly binding logimine on välja lülitatud. Assembly binding vea logimise lubamiseks määra registri väärtus [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) on seatud väärtusele 1. Märkus: Kokkupaneku sidumise ebaõnnestumise logimisega kaasneb mõningaid jõudluse kaotused. Selle funktsiooni väljalülitamiseks eemaldage registri väärtus [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Loaded Assemblies ************** mscorlib Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2098.0 ehitaja: NET47REL1LAST Baaskood: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Assembly versioon: 1.0.0.0 Win32 versioon: 1.0.0.0 Baaskood: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2094.0 ehitaja: NET47REL1LAST Baaskood: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- Süsteem Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2093.0 ehitanud: NET47REL1LAST Baaskood: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- Süsteem. Joonistus Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2046.0 ehitaja: NET47REL1 Baaskood: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- Süsteem. Konfiguratsioon Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2046.0 ehitaja: NET47REL1 Baaskood: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2098.0 ehitaja: NET47REL1LAST Baaskood: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2046.0 ehitaja: NET47REL1 Baaskood: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2046.0 ehitaja: NET47REL1 Baaskood: 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 Assembleri versioon: 4.0.0.0 Win32 versioon: 4.7.2046.0 ehitaja: NET47REL1 Baaskood: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JIT silumine ************** Reaalajas (JIT) silumise võimaldamiseks See tuleb seadistada rakenduse või arvuti .config faili (machine.config) system.windows.forms sektsioonis jitSilumise väärtus. See peab olema lubatud ka rakenduse kompileerimisel Silumine.
Näiteks:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Kõik käsitlemata erandid pärast JIT silumist on lubatud saadetakse sellel masinal registreeritud JIT silurisse, Selle asemel, et lasta end selle dialoogiga käsitleda.
|
Eelmine:Kuidas garanteerib .net/c# rakendus, et kutsutud dll ei asendata võltsinguga?Järgmine:fsadf{:1_2:}
|