|
|
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:}
|