Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 22989|Atsakyti: 1

[WinForm] .net/c# naudoja stiprius parašus, kad apsaugotų savo DLL nuo klastojimo

[Kopijuoti nuorodą]
Paskelbta 2017-10-19 17:31:40 | | | |
Kaip .net/c# programa garantuoja, kad iškviesta dll nebus pakeista klastotėmis?
https://www.itsvse.com/thread-4173-1-1.html
(Šaltinis: Architektas)

Praėjusį kartą išbandėme, ar dll gali suklastoti kiti ir vykdyti, kaip to išvengti?



Parašo įvadas:
Asamblėjos parašas (taip pat žinomas kaip stipraus pavadinimo parašas) suteikia programai ar komponentui unikalią tapatybę, kurią kita programinė įranga gali naudoti aiškiai identifikuoti ir nurodyti programą ar komponentą. Stiprų pavadinimą sudaro paprastas rinkinio tekstinis pavadinimas, versijos numeris, regioninė informacija (jei pateikta) ir viešųjų / privačių raktų pora.

Pavyzdžiui, stiprus pavadinimas leidžia programų autoriams ir administratoriams nurodyti tikslią vienos tarnybos versiją, kurią naudos bendrai naudojami komponentai. Tai leidžia skirtingoms programoms nurodyti skirtingas versijas, nedarant įtakos kitoms. Taip pat galite naudoti stiprųjį komponento pavadinimą kaip saugos įrodymą, kad sukurtumėte patikimą ryšį tarp dviejų komponentų.

Norėdami tvirtai pasirašyti asamblėją, jums nereikia pasirašyti skaitmeninio sertifikato su įsigytu kodu, galite sugeneruoti SNK failą naudodami .NET pateiktą sn įrankį ir galite garantuoti savo asamblėjos parašą išsaugodami šį failą.

Tačiau stiprus rinkinio parašas nėra tas pats, kas vykdomojo failo skaitmeninis parašas (net jei rinkinys yra exe failas). Ir MSDN aiškiai sako, kad exe failai neturėtų būti stipriai pasirašyti (nors aš padariau). Skaitmeninis failo parašas iš tikrųjų prideda parašą prie bet kurio failo failų sistemos lygiu, nurodant operacinei sistemai, kas yra šio failo išdavėjas. Failo ypatybių dialogo lange galite pamatyti skirtuką "Skaitmeniniai parašai".


Mes tvirtai pasirašome dll ir tada iškviečiame ją programa, kurią galima vykdyti įprastai, taip:


Ką daryti, jei pakeisime dll suklastotu dll? Išbandykite jį ir pastebėkite, kad vykdymas yra klaida, kuri gali veiksmingai užkirsti kelią skambinančio dll suklastojimui (Aš išbandžiau jį, pakeitė pasirašytą DLL kodą, ir tada iš naujo sugeneravo jį, ir paraiška taip pat gali būti vadinama normaliai, ji turėtų būti tol, kol programa yra pasirašyta teisingai!

Klaida yra tokia:

Norėdami gauti daugiau informacijos apie realaus laiko (JIT) derinimo iškvietimą vietoj šio dialogo lango,
Žiūrėkite šio pranešimo pabaigą.

Neįprasta teksto **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Failo pavadinimas: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e"
   In TestDll.Form1.button1_Click_1 (Objekto siuntėjas, EventArgs e)
   System.Windows.Forms.Control.OnClick(EventArgs e)
   System.Windows.Forms.Button.OnClick(EventArgs e)
   System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   System.Windows.Forms.Control.WmMouseUp(Pranešimas& m, mygtukas MouseButtons, Int32 spustelėjimai)
   System.Windows.Forms.Control.WndProc(Message& m)
   System.Windows.Forms.ButtonBase.WndProc(Message& m)
   System.Windows.Forms.Button.WndProc(Message& m)
   Sistemoje System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Pranešimas& m)
   System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Įspėjimas: Rinkinio susiejimo registravimas išjungtas.
Norėdami įgalinti rinkinio susiejimo klaidų registravimą, nustatykite registro reikšmę [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) nustatytas kaip 1.
Pastaba: Bus taikomos tam tikros našumo nuobaudos, susijusios su surinkimo susiejimo gedimų registravimu.
Norėdami išjungti šią funkciją, pašalinkite registro reikšmę [HKLM\Software\Microsoft\Fusion!] EnableLog]。



Pakrauti mazgai **************
mscorlib
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2098.0 Sukūrė: NET47REL1LAST
    Bazinis kodas: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
TestDll
    Surinkimo versija: 1.0.0.0
    Win32 versija: 1.0.0.0
    Bazinis kodas: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe
----------------------------------------
Sistema.Windows.Forms
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2094.0 Sukūrė: NET47REL1LAST
    Bazinis kodas: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
Sistema
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2093.0 Sukūrė: NET47REL1LAST
    Bazinis kodas: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
Sistema.Brėžinys
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2046.0 Sukūrė: NET47REL1
    Bazinis kodas: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Sistema.Konfigūracija
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2046.0 Sukūrė: NET47REL1
    Bazinis kodas: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
Sistema.Šerdis
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2098.0 Sukūrė: NET47REL1LAST
    Bazinis kodas: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
Sistema.Xml
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2046.0 Sukūrė: NET47REL1
    Bazinis kodas: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Sistema.Windows.Forms.resources
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2046.0 Sukūrė: NET47REL1
    Bazinis kodas: 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
    Surinkimo versija: 4.0.0.0
    Win32 versija: 4.7.2046.0 Sukūrė: NET47REL1
    Bazinis kodas: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

JIT derinimo **************
Norėdami įjungti derinimą realiuoju laiku (JIT),
Jis turi būti nustatytas programos arba kompiuterio .config failo (machine.config) skiltyje system.windows.forms
jitDebugging reikšmė.
Jis taip pat turi būti įjungtas kompiliuojant programą
Derinimas.

Pavyzdžiui:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Visos neapdorotos išimtys įjungus JIT derinimą
bus siunčiami į šiame kompiuteryje registruotą JIT derintuvą,
Vietoj to, kad būtų tvarkomas šiame dialoge.







Ankstesnis:Kaip .net/c# programa garantuoja, kad iškviesta dll nebus pakeista klastotėmis?
Kitą:fsadf{:1_2:}
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com