Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 22989|Odpověď: 1

[WinForm] .NET/C# používá silné podpisy k ochraně svých vlastních DLL před falšováním

[Kopírovat odkaz]
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:}
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com