Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 22989|Odgovoriti: 1

[WinForm] .NET/C# uporablja močne podpise za zaščito svojih lastnih DLL-jev pred ponarejanjem

[Kopiraj povezavo]
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:}
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com