Hur garanterar en .net/c#-applikation att den anropade dll:n inte ersätts av förfalskning?
https://www.itsvse.com/thread-4173-1-1.html (Källa: Architect) Senast testade vi att DLL:n kan förfalskas av andra och utföras, hur förhindrar man det?
Signaturintroduktion:
En assemblersignatur (även kallad stark namnsignatur) ger en applikation eller komponent en unik identitet som annan programvara kan använda för att explicit identifiera och referera till applikationen eller komponenten. Ett starkt namn består av assemblerens enkla textnamn, versionsnummer, regional information (om så finns) och ett offentligt/privat nyckelpar.
Till exempel tillåter stark namngivning applikationsförfattare och administratörer att specificera exakt vilken version av en tjänst som ska användas av delade komponenter. Detta gör det möjligt för olika applikationer att specificera olika versioner utan att påverka andra. Du kan också använda komponentens starka namn som säkerhetsbevis för att skapa en förtroenderelation mellan de två komponenterna.
För att starkt signera en assembler behöver du inte signera ett digitalt certifikat med köpt kod, du kan generera en SNK-fil med sn-verktyget som tillhandahålls av .NET, och du kan garantera signaturen av din assembler genom att spara denna fil.
Dock är en stark signatur för en assembler inte samma sak som en digital signatur för en körbar fil (även om assembleren är en exe-fil). Och MSDN säger tydligt att exe-filer inte ska vara starkt signerade (även om jag gjorde det). En digital signatur för en fil är faktiskt att bifoga en signatur till vilken fil som helst på filsystemnivå, och berättar för operativsystemet vem som är utfärdaren av filen. I filens egenskapsmeny kan du se fliken "Digital Signatures".
Vi signerar starkt dll:n och anropar den sedan med ett program som kan köras normalt, enligt följande:
Tänk om vi byter ut DLL:n mot en förfalskad DLL? Testa den, och se att exekveringen är fel, vilket effektivt kan förhindra att den anropande dll:n förfalskas (Jag testade den, modifierade den signerade dll-koden och genererade den sedan igen, och applikationen kan också anropas normalt, det borde vara så länge programmet är korrekt signerat!!)
Felet är följande:
För mer information om att anropa realtidsfelsökning (JIT) istället för denna dialog, Se slutet på detta meddelande.
Ovanlig text **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Filnamn: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" In TestDll.Form1.button1_Click_1 (Objektavsändare, 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, MouseButton-knapp, Int32-klick) 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.ControlNativeWindow.WndProc(Message& m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Varning: Loggning av assembly binding är avstängd. För att aktivera felloggning för assembly binding, ställ in registervärdet [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) är satt till 1. Obs: Det kommer att finnas vissa prestandaförluster kopplade till felloggning för assembly bindings. För att stänga av denna funktion, ta bort registreringsvärdet [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Laddade enheter ************** mscorlib Assemblerversion: 4.0.0.0 Win32-version: 4.7.2098.0 byggd av: NET47REL1LAST Baskod: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Monteringsversion: 1.0.0.0 Win32-version: 1.0.0.0 Baskod: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Assemblerversion: 4.0.0.0 Win32-version: 4.7.2094.0 byggd av: NET47REL1LAST Baskod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System Assemblerversion: 4.0.0.0 Win32-version: 4.7.2093.0 byggd av: NET47REL1LAST Baskod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System. Ritning Assemblerversion: 4.0.0.0 Win32-version: 4.7.2046.0 byggd av: NET47REL1 Baskod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Konfiguration Assemblerversion: 4.0.0.0 Win32-version: 4.7.2046.0 byggd av: NET47REL1 Baskod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Assemblerversion: 4.0.0.0 Win32-version: 4.7.2098.0 byggd av: NET47REL1LAST Baskod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Assemblerversion: 4.0.0.0 Win32-version: 4.7.2046.0 byggd av: NET47REL1 Baskod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Assemblerversion: 4.0.0.0 Win32-version: 4.7.2046.0 byggd av: NET47REL1 Baskod: 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 Assemblerversion: 4.0.0.0 Win32-version: 4.7.2046.0 byggd av: NET47REL1 Baskod: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JIT-felsökning ************** För att möjliggöra felsökning i realtid (JIT), Den måste ställas in i system.windows.forms-sektionen i .config-filen (machine.config) för applikationen eller datorn jitDebugging-värde. Den måste också vara aktiverad vid kompilering av applikationen Felsökning.
Till exempel:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Alla ohanterade undantag efter JIT-felsökning är aktiverade skickas till JIT-felsökaren som är registrerad på denna maskin, Istället för att hanteras av denna dialog.
|