|
|
Julkaistu 19.10.2017 17.31.40
|
|
|
|

Miten .net/c#-sovellus takaa, ettei kutsuttua dll:ää korvata väärennöksellä?
https://www.itsvse.com/thread-4173-1-1.html (Lähde: Arkkitehti) Viimeksi testasimme, että DLL:n voi väärentää muiden toimesta ja toteuttaa, miten se voidaan estää?
Allekirjoitusesittely:
Assembly-allekirjoitus (tunnetaan myös nimellä strong name signature) antaa sovellukselle tai komponentille yksilöllisen identiteetin, jota muut ohjelmistot voivat käyttää eksplisiittisesti tunnistaakseen ja viitatakseen sovellukseen tai komponenttiin. Vahva nimi koostuu kokoonpanon yksinkertaisesta tekstinimestä, versionumerosta, alueellisesta tiedosta (jos se on annettu) sekä julkisen/yksityisen avaimen parista.
Esimerkiksi vahva nimeäminen mahdollistaa sovellusten tekijöiden ja ylläpitäjien määrittää tarkan version yhdestä palvelusta, jota jaetut komponentit käyttävät. Tämä mahdollistaa sen, että eri sovellukset voivat määrittää eri versioita vaikuttamatta muihin. Voit myös käyttää komponentin vahvaa nimeä turvallisuustodisteena luodaksesi luottamussuhteen näiden kahden komponentin välille.
Assemblyn vahvaan allekirjoittamiseen sinun ei tarvitse allekirjoittaa digitaalista varmennetta ostetulla koodilla, voit luoda SNK-tiedoston .NETin tarjoamalla sn-työkalulla, ja voit taata assemblyn allekirjoituksen tallentamalla tämän tiedoston.
Vahva allekirjoitus assemblylle ei kuitenkaan ole sama asia kuin digitaalinen allekirjoitus suoritettavalle tiedostolle (vaikka assembly olisi exe-tiedosto). Ja MSDN sanoo selvästi, että exe-tiedostoja ei pitäisi allekirjoittaa vahvasti (vaikka tein niin). Digitaalinen allekirjoitus tiedostolle tarkoittaa itse asiassa allekirjoituksen liittämistä mihin tahansa tiedostoon tiedostojärjestelmän tasolla, mikä kertoo käyttöjärjestelmälle, kuka on tiedoston myöntäjä. Tiedoston ominaisuusvalikossa näet "Digitaaliset allekirjoitukset" -välilehden.
Allekirjoitamme vahvasti dll:n ja kutsumme sen ohjelmalla, joka voidaan suorittaa normaalisti seuraavasti:
Entä jos korvaamme DLL:n väärennetyllä DLL:llä? Testaa ja huomaa, että suoritus on virhe, mikä voi tehokkaasti estää kutsuvan dll:n väärentämisen (Testasin sitä, muokkasin allekirjoitettua dll-koodia ja generoin sen uudelleen, ja sovellusta voi kutsua normaalisti, sen pitäisi olla niin kunhan ohjelma on allekirjoitettu oikein!!)
Virhe on seuraava:
Lisätietoja reaaliaikaisen (JIT) virheenkorjauksen kutsumisesta tämän valintaikkunan sijaan saat Katso tämän viestin loppu.
Epätavallinen teksti **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Tiedoston nimi: "dllFrom, version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" Vuonna TestDll.Form1.button1_Click_1 (Objektilähettäjä, 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, Int32 clicks) 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)
Varoitus: Assembly binding logging on pois päältä. Assembly binding failure loging -toiminnon mahdollistamiseksi aseta rekisteriarvo [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) on asetettu arvoon 1. Huomautus: Kokoonpanon sidonnan vikalogian aiheuttamiseen liittyy suorituskyvyn kannalta myös seuraamuksia. Tämän ominaisuuden poistamiseksi poista rekisteriarvo [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Ladatut kokoonpanot ************** mscorlib Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2098.0 rakentanut: NET47REL1LAST Peruskoodi: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Assembly-versio: 1.0.0.0 Win32-versio: 1.0.0.0 Peruskoodi: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2094.0 rakentanut: NET47REL1LAST Peruskoodi: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- Järjestelmä Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2093.0 rakentanut: NET47REL1LAST Peruskoodi: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Drawing Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2046.0 rakentanut: NET47REL1 Peruskoodi: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- Järjestelmä. Konfiguraatio Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2046.0 rakentanut: NET47REL1 Peruskoodi: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2098.0 rakentanut: NET47REL1LAST Peruskoodi: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2046.0 rakentanut: NET47REL1 Peruskoodi: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2046.0 rakentanut: NET47REL1 Peruskoodi: 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 Assembly-versio: 4.0.0.0 Win32-versio: 4.7.2046.0 rakentanut: NET47REL1 Peruskoodi: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JIT Debuggaus ************** Reaaliaikaisen (JIT) virheenkorjauksen mahdollistamiseksi Se on asetettava system.windows.forms -osiossa .config-tiedostossa (machine.config) sovelluksessa tai tietokoneessa jitDebuggauksen arvo. Se on myös otettava käyttöön käännettäessä sovellusta Debuggaus.
Esimerkiksi:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Kaikki käsittelemättömät poikkeukset JIT-virheenkorjauksen jälkeen ovat käytössä lähetetään JIT-debuggerille, joka on rekisteröity tälle koneelle, Sen sijaan, että tämä dialogi käsittelisi sinua.
|
Edellinen:Miten .net/c#-sovellus takaa, ettei kutsuttua dll:ää korvata väärennöksellä?Seuraava:fsadf{:1_2:}
|