|
|
Opslået på 19/10/2017 17.31.40
|
|
|
|

Hvordan garanterer en .net/c#-applikation, at den kaldte dll ikke erstattes af forfalskning?
https://www.itsvse.com/thread-4173-1-1.html (Kilde: Arkitekt) Sidste gang testede vi, at DLL'en kan forfalskes af andre og udføres – hvordan forhindrer man det?
Signaturintroduktion:
En assembly-signatur (også kendt som en strong name-signatur) giver en applikation eller komponent en unik identitet, som anden software kan bruge til eksplicit at identificere og referere til applikationen eller komponenten. Et stærkt navn består af samlingens simple tekstnavn, versionsnummer, regional information (hvis angivet) og et offentlig/privat nøglepar.
For eksempel tillader stærk navngivning applikationsforfattere og administratorer at specificere den præcise version af én tjeneste, der skal bruges af delte komponenter. Dette gør det muligt for forskellige applikationer at specificere forskellige versioner uden at påvirke andre. Du kan også bruge komponentens stærke navn som sikkerhedsbevis for at skabe et tillidsforhold mellem de to komponenter.
For at underskrive en assembly stærkt behøver du ikke at underskrive et digitalt certifikat med købt kode, du kan generere en SNK-fil med det sn-værktøj, som .NET leverer, og du kan garantere signaturen af din assembly ved at gemme denne fil.
Dog er en stærk signatur for en assembly ikke det samme som en digital signatur for en eksekverbar fil (selv hvis assemblyen er en exe-fil). Og MSDN siger tydeligt, at exe-filer ikke skal underskrives stærkt (selvom jeg gjorde det). En digital signatur for en fil er faktisk at vedhæfte en underskrift til en hvilken som helst fil på filsystemniveau, hvilket fortæller operativsystemet, hvem der udsteder filen. I filens egenskaber-dialog kan du se fanen "Digitale Signaturer".
Vi underskriver dll'en stærkt og kalder den derefter med et program, som kan udføres normalt, som følger:
Hvad nu hvis vi erstatter dll'en med en smedet dll? Test det, og find ud af, at udførelsen er fejl, hvilket effektivt kan forhindre, at den kaldende dll bliver forfalsket (Jeg testede den, ændrede den signerede dll-kode og genererede den så igen, og applikationen kan også kaldes normalt, det burde være sådan, så længe programmet er signeret korrekt!!)
Fejlen er som følger:
For mere information om at kalde realtidsfejlfinding (JIT) i stedet for denne dialog, Se slutningen af denne besked.
Usædvanlig 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 (Objektafsender, 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-knap, Int32 klik) 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.NativeWindow.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: Assembly binding-logging er slået fra. For at aktivere fejllogning af assembly bindings, sæt registreringsværdien [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) er sat til 1. Bemærk: Der vil være nogle ydelsesstraffe forbundet med fejllogning af assembly bindings. For at slå denne funktion fra, fjern registreringsværdien [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Indlæste samlinger ************** mscorlib Samlingsversion: 4.0.0.0 Win32-version: 4.7.2098.0 bygget af: NET47REL1LAST Grundkode: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Samlingsversion: 1.0.0.0 Win32-version: 1.0.0.0 Grundkode: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Samlingsversion: 4.0.0.0 Win32-version: 4.7.2094.0 bygget af: NET47REL1LAST Grundkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System Samlingsversion: 4.0.0.0 Win32-version: 4.7.2093.0 bygget af: NET47REL1LAST Grundkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System. Tegning Samlingsversion: 4.0.0.0 Win32-version: 4.7.2046.0 bygget af: NET47REL1 Grundkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Konfiguration Samlingsversion: 4.0.0.0 Win32-version: 4.7.2046.0 bygget af: NET47REL1 Grundkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Samlingsversion: 4.0.0.0 Win32-version: 4.7.2098.0 bygget af: NET47REL1LAST Grundkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Samlingsversion: 4.0.0.0 Win32-version: 4.7.2046.0 bygget af: NET47REL1 Grundkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Samlingsversion: 4.0.0.0 Win32-version: 4.7.2046.0 bygget af: NET47REL1 Grundkode: 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.ressourcer Samlingsversion: 4.0.0.0 Win32-version: 4.7.2046.0 bygget af: NET47REL1 Grundkode: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JIT-fejlfinding ************** For at muliggøre realtidsfejlfinding (JIT), Den skal sættes i system.windows.forms-sektionen i .config-filen (machine.config) for applikationen eller computeren jitDebugging-værdi. Den skal også være aktiveret, når applikationen kompileres Fejlsøgning.
For eksempel:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Alle uhåndterede undtagelser efter JIT-fejlfinding er aktiveret sendes til den JIT-debugger, der er registreret på denne maskine, I stedet for at blive håndteret af denne dialog.
|
Tidligere:Hvordan garanterer en .net/c#-applikation, at den kaldte dll ikke erstattes af forfalskning?Næste:fsadf{:1_2:}
|