Hvordan garanterer en .net/c#-applikasjon at den oppkalte DLL-en ikke erstattes av forfalskning?
https://www.itsvse.com/thread-4173-1-1.html (Kilde: Arkitekt) Forrige gang testet vi at DLL-en kan forfalskes av andre og gjennomføres, hvordan kan vi forhindre det?
Signaturintroduksjon:
En assemblersignatur (også kjent som en sterk navnesignatur) gir en applikasjon eller komponent en unik identitet som annen programvare kan bruke for eksplisitt å identifisere og referere til applikasjonen eller komponenten. Et sterkt navn består av assemblyens enkle tekstnavn, versjonsnummer, regional informasjon (hvis oppgitt), og et offentlig/privat nøkkelpar.
For eksempel gjør sterk navngivning det mulig for applikasjonsforfattere og administratorer å spesifisere den eksakte versjonen av én tjeneste som skal brukes av delte komponenter. Dette gjør det mulig for ulike applikasjoner å spesifisere forskjellige versjoner uten å påvirke andre. Du kan også bruke det sterke navnet på komponenten som sikkerhetsbevis for å skape et tillitsforhold mellom de to komponentene.
For å signere en assembler sterkt, trenger du ikke signere et digitalt sertifikat med kjøpt kode, du kan generere en SNK-fil med sn-verktøyet som tilbys av .NET, og du kan garantere signaturen til assembleren din ved å lagre denne filen.
En sterk signatur for en assembly er imidlertid ikke det samme som en digital signatur for en kjørbar fil (selv om assembly er en exe-fil). Og MSDN sier tydelig at exe-filer ikke skal signeres sterkt (selv om jeg gjorde det). En digital signatur for en fil er faktisk å knytte en signatur til en hvilken som helst fil på filsystemnivå, og forteller operativsystemet hvem som utsteder denne filen. I filens egenskapsmeny kan du se fanen «Digitale signaturer».
Vi signerer dll-en sterkt, og kaller den deretter med et program som kan kjøres normalt, som følger:
Hva om vi erstatter dll-en med en smidd dll? Test den, og finn at utførelsen er feil, noe som effektivt kan forhindre at den kallende dll-en blir forfalsket (Jeg testet det, endret den signerte DLL-koden, og genererte den på nytt, og applikasjonen kan også kalles normalt, det skal være så lenge programmet er signert riktig!!)
Feilen er som følger:
For mer informasjon om å kalle sanntids (JIT) feilsøking i stedet for denne dialogen, Se slutten av denne meldingen.
Uvanlig tekst **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Filnavn: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" In TestDll.Form1.button1_Click_1 (Objektavsender, EventArgs e) I System.Windows.Forms.Control.OnClick(EventArgs e) I System.Windows.Forms.Button.OnClick(EventArgs e) I System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) På System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons-knapp, Int32-klikk) I System.Windows.Forms.Control.WndProc(Message& m) I System.Windows.Forms.ButtonBase.WndProc(Message& m) I System.Windows.Forms.Button.WndProc(Message& m) I System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) I System.Windows.Forms.Control.NativeWindow.WndProc(Message& m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Advarsel: Logging av assembly-binding er slått av. For å aktivere feillogging for assemblybinding, sett registerverdien [HKLM\Software\Microsoft\Fusion!» EnableLog (DWORD) er satt til 1. Merk: Det vil være noen ytelsesstraffer knyttet til feillogging for assembly-bindinger. For å slå av denne funksjonen, fjern registerverdien [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Lastede sammenstillinger ************** mscorlib Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2098.0 bygget av: NET47REL1LAST Grunnkode: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Assemblerversjon: 1.0.0.0 Win32-versjon: 1.0.0.0 Grunnkode: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2094.0 bygget av: NET47REL1LAST Grunnkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2093.0 bygget av: NET47REL1LAST Grunnkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System. Tegning Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2046.0 bygget av: NET47REL1 Grunnkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System. Konfigurasjon Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2046.0 bygget av: NET47REL1 Grunnkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2098.0 bygget av: NET47REL1LAST Grunnkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2046.0 bygget av: NET47REL1 Grunnkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2046.0 bygget av: NET47REL1 Grunnkode: 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.ressurser Assemblerversjon: 4.0.0.0 Win32-versjon: 4.7.2046.0 bygget av: NET47REL1 Grunnkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JIT-feilsøking ************** For å muliggjøre sanntids (JIT) feilsøking, Den må settes i system.windows.forms-seksjonen i .config-filen (machine.config) til applikasjonen eller datamaskinen jitDebugging-verdi. Den må også være aktivert ved kompilering av applikasjonen Feilsøking.
For eksempel:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Alle unntak uten håndtering etter JIT-feilsøking er aktivert sendes til JIT-feilsøkeren som er registrert på denne maskinen, I stedet for å bli håndtert av denne dialogen.
|