|
|
Zveřejněno 19.10.2017 17:31:40
|
|
|
|

Jak může aplikace .net/c# zaručit, že volaný dll nebude nahrazen padělkem?
https://www.itsvse.com/thread-4173-1-1.html (Zdroj: Architect) Minule jsme testovali, že dll může být zfalšováno a provedeno jinými uživateli, jak tomu zabránit?
Úvod k podpisu:
Podpis assembleru (také známý jako podpis silného jména) dává aplikaci nebo komponentě jedinečnou identitu, kterou může jiný software použít k explicitní identifikaci a odkazování na aplikaci nebo komponentu. Silné jméno se skládá z jednoduchého textového názvu assembleru, čísla verze, regionálních informací (pokud jsou uvedeny) a páru veřejných/soukromých klíčů.
Například silné pojmenování umožňuje autorům a administrátorům aplikací specifikovat přesnou verzi jedné služby, kterou budou sdílené komponenty využívat. To umožňuje různým aplikacím specifikovat různé verze, aniž by to ovlivnilo ostatní. Silné jméno komponenty můžete také použít jako bezpečnostní důkaz k vytvoření důvěrného vztahu mezi oběma komponentami.
Pro silné podepsání assembleru nemusíte podepisovat digitální certifikát zakoupeným kódem, můžete vygenerovat SNK soubor pomocí nástroje sn poskytovaného .NET a můžete si garantovat podpis svého assembleru uložením tohoto souboru.
Silný podpis pro assembler však není totéž co digitální podpis pro spustitelný soubor (i když assembler je exe soubor). A MSDN jasně říká, že exe soubory by neměly být silně podepsané (i když jsem to udělal). Digitální podpis souboru znamená ve skutečnosti připojení podpisu k jakémukoliv souboru na úrovni souborového systému, čímž operačnímu systému sdělí, kdo je vydavatelem tohoto souboru. V dialogu vlastností souboru můžete vidět záložku "Digitální podpisy".
Silně podepíšeme dll a poté jej voláme programem, který lze normálně spustit, následovně:
Co kdybychom nahradili dll falšovaným dll? Otestujte ho a zjistíte, že vykonání je chyba, což může účinně zabránit falšování volajícího dll (Otestoval jsem to, upravil podepsaný dll kód a pak ho znovu vygeneroval, a aplikace může být také volána normálně, mělo by to fungovat, pokud je program správně podepsaný!!)
Chyba je následující:
Pro více informací o volání v reálném čase (JIT) ladění místo tohoto dialogu, Podívejte se na konec této zprávy.
Neobvyklý text **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Název souboru: "dllFrom, version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" In TestDll.Form1.button1_Click_1 (Object sender, EventArgs e) In System.Windows.Forms.Control.OnClick(EventArgs e) In System.Windows.Forms.Button.OnClick(EventArgs e) In System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) Na System.Windows.Forms.Control.WmMouseUp(Message& m, tlačítko MouseButtons, Int32 kliknutí) In System.Windows.Forms.Control.WndProc(Message& m) In System.Windows.Forms.ButtonBase.WndProc(Message& m) In System.Windows.Forms.Button.WndProc(Message& m) In System.Windows.Forms.Control.ControlNativeNativeWindow.OnMessage(Message& m) In System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Varování: Logování závaznosti pro montáž je vypnuto. Pro povolení logování selhání vázání assembleru nastavte hodnotu registru [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) je nastaven na 1. Poznámka: S logováním selhání spojené s závazkem k sestavení budou spojeny určité postihy za výkon. Pro vypnutí této funkce odstraňte hodnotu registru [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Načtené sestavy ************** mscorlib Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2098.0, vytvořil: NET47REL1LAST Základní kód: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Verze assembleru: 1.0.0.0 Verze Win32: 1.0.0.0 Základní kód: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2094.0, vytvořil: NET47REL1LAST Základní kód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- Systém Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2093.0 vytvořená: NET47REL1LAST Základní kód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- Systém. Kresba Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2046.0 vytvořeno: NET47REL1 Základní kód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2046.0 vytvořeno: NET47REL1 Základní kód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2098.0, vytvořil: NET47REL1LAST Základní kód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.XML Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2046.0 vytvořeno: NET47REL1 Základní kód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2046.0 vytvořeno: NET47REL1 Základní kód: 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 Assemblerová verze: 4.0.0.0 Verze Win32: 4.7.2046.0 vytvořeno: NET47REL1 Základní kód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JIT ladění ************** Pro povolení ladění v reálném čase (JIT), Musí být nastaven v sekci system.windows.forms v souboru .config (machine.config) aplikace nebo počítače jitDebugging hodnota. Musí být také povolen při kompilaci aplikace Ladění.
Například:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Jsou povoleny všechny neupravené výjimky po ladění JIT bude odesláno do JIT debuggeru registrovaného na tomto stroji, Místo toho, aby to řešil tento dialog.
|
Předchozí:Jak může aplikace .net/c# zaručit, že volaný dll nebude nahrazen padělkem?Další:fsadf{:1_2:}
|