|
|
Objavljeno na 19. 10. 2017 17:31:40
|
|
|
|

Kako .net/c# aplikacija zagotavlja, da klicani dll ne bo zamenjan s ponarejevanjem?
https://www.itsvse.com/thread-4173-1-1.html (Vir: Architect) Zadnjič smo testirali, da lahko dll drugi ponaredijo in izvedejo, kako to preprečiti?
Uvod v prepoznavno vlogo:
Podpis asemblerja (znan tudi kot podpis močnega imena) aplikaciji ali komponenti daje edinstveno identiteto, ki jo lahko druga programska oprema uporabi za eksplicitno identifikacijo in referenco aplikacije ali komponente. Močno ime sestavljajo preprosto besedilno ime skupščine, številka različice, regionalne informacije (če so navedene) in par javnega/zasebnega ključa.
Na primer, močno poimenovanje omogoča avtorjem in administratorjem aplikacij, da določijo natančno različico ene storitve, ki jo bodo uporabljale deljene komponente. To omogoča različnim aplikacijam, da določijo različne različice, ne da bi vplivale na druge. Močno ime komponente lahko uporabite tudi kot varnostni dokaz za ustvarjanje zaupanja med obema komponentama.
Za močno podpisovanje sestavljanja ni treba podpisati digitalnega certifikata z kupljeno kodo, lahko ustvarite SNK datoteko s sn orodjem, ki ga zagotavlja .NET, in lahko zagotovite podpis svojega asemblerja z shranjevanjem te datoteke.
Vendar močan podpis za asembler ni enak digitalnemu podpisu za izvršljivo datoteko (tudi če je assembly exe datoteka). MSDN jasno pravi, da exe datoteke ne smejo biti močno podpisane (čeprav sem jih jaz podpisal). Digitalni podpis za datoteko je dejansko pripiranje podpisa katerikoli datoteki na ravni datotečnega sistema, s čimer operacijskemu sistemu sporoči, kdo je izdajatelj te datoteke. V pogovornem oknu lastnosti datoteke lahko vidite zavihek "Digitalni podpisi".
Močno podpišemo dll in ga nato pokličemo s programom, ki ga lahko izvedemo normalno, kot sledi:
Kaj pa, če zamenjamo dll s ponarejenim dll? Preizkusite ga in ugotovite, da je izvedba napaka, kar lahko učinkovito prepreči, da bi klic dll ponarejal (Testiral sem jo, spremenil podpisano dll kodo in jo nato ponovno generiral, aplikacijo pa je mogoče klicati tudi normalno, če je program pravilno podpisan!!)
Napaka je naslednja:
Za več informacij o klicanju v realnem času (JIT) odpravljanju napak namesto tega dialoga, Poglej konec tega sporočila.
Nenavadno besedilo **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Ime datoteke: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" V 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) V System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) Na System.Windows.Forms.Control.WmMouseUp(Message& m, gumb MouseButton, Int32 kliki) V System.Windows.Forms.Control.WndProc(Message& m) In System.Windows.Forms.ButtonBase.WndProc(Message& m) V System.Windows.Forms.Button.WndProc(Message& m) V System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) V System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Opozorilo: Zapisovanje zveze v sestavi je izklopljeno. Za omogočanje beleženja neuspeha asemblerske vezave nastavite vrednost registra [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) je nastavljen na 1. Opomba: Zaradi beleženja neuspeha pri sestavljanju bodo določene kazni zaradi zmogljivosti. Za izklop te funkcije odstranite vrednost registra [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Naložene sestave ************** mscorlib Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2098.0, izdelal: NET47REL1LAST Osnovna koda: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Asemblerska različica: 1.0.0.0 Win32 različica: 1.0.0.0 Osnovna koda: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2094.0, izdelal: NET47REL1LAST Osnovna koda: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- Sistem Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2093.0, izdelal: NET47REL1LAST Osnovna koda: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Risanje Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2046.0, izdelal: NET47REL1 Osnovna koda: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2046.0, izdelal: NET47REL1 Osnovna koda: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2098.0, izdelal: NET47REL1LAST Osnovna koda: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.XML Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2046.0, izdelal: NET47REL1 Osnovna koda: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2046.0, izdelal: NET47REL1 Osnovna koda: 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 Asemblerska različica: 4.0.0.0 Različica Win32: 4.7.2046.0, izdelal: NET47REL1 Osnovna koda: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JIT odpravljanje napak ************** Za omogočanje razhroščevanja v realnem času (JIT), Nastaviti ga je treba v razdelku system.windows.forms v .config datoteki (machine.config) aplikacije ali računalnika jitDebugging vrednost. Omogočena mora biti tudi pri prevajanju aplikacije Odpravljanje napak.
Na primer:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Vse neobdelane izjeme po JIT razhroščevanju so omogočene bo poslan JIT razhroščevalniku, registriranemu na tem računalniku, Namesto da bi te obravnaval ta dialog.
|
Prejšnji:Kako .net/c# aplikacija zagotavlja, da klicani dll ne bo zamenjan s ponarejevanjem?Naslednji:fsadf{:1_2:}
|