|
|
Opublikowano 19.10.2017 17:31:40
|
|
|
|

Jak aplikacja .net/c# gwarantuje, że wywołane DLL nie zostanie zastąpione fałszerstwem?
https://www.itsvse.com/thread-4173-1-1.html (Źródło: Architect) Ostatnim razem testowaliśmy, że dll może być podrobione przez innych i wykonywane, jak temu zapobiec?
Wprowadzenie do Flag:
Podpis asemblera (znany również jako podpis silnej nazwy) nadaje aplikacji lub komponentowi unikalną tożsamość, którą inne oprogramowanie może wykorzystać do jawnej identyfikacji i odniesienia się do aplikacji lub komponentu. Silna nazwa składa się z prostej nazwy tekstowej zgromadzenia, numeru wersji, informacji regionalnych (jeśli są dostępne) oraz pary klucza publicznego/prywatnego.
Na przykład, silne nazewnictwo pozwala autorom aplikacji i administratorom określić dokładną wersję jednej usługi, która będzie wykorzystywana przez komponenty współdzielone. Pozwala to różnym aplikacjom na określanie różnych wersji bez wpływu na pozostałe. Możesz także użyć silnej nazwy komponentu jako dowodu bezpieczeństwa, aby wygenerować relację zaufania między tymi dwoma komponentami.
Aby mocno podpisać asembler, nie musisz podpisywać cyfrowego certyfikatu zakupionym kodem, możesz wygenerować plik SNK za pomocą narzędzia sn udostępnionego przez .NET i gwarantować podpis swojego asemblera, zapisując ten plik.
Jednak silny podpis dla asembla nie jest tym samym co podpis cyfrowy pliku wykonywalnego (nawet jeśli asembl jest plikiem exe). A MSDN wyraźnie mówi, że pliki exe nie powinny być mocno podpisane (choć tak zrobiłem). Podpis cyfrowy pliku to faktycznie dołączenie podpisu do dowolnego pliku na poziomie systemu plików, informując system operacyjny, kto jest wydawcą tego pliku. W oknie właściwości pliku możesz zobaczyć zakładkę "Podpisy cyfrowe".
Silnie podpisujemy dll, a następnie wywołujemy go za pomocą programu, który można wykonać normalnie, w następujący sposób:
A co jeśli zastąpimy dll podrobionym dll? Przetestuj go i stwierdzaj, że wykonanie jest błędem, co skutecznie zapobiega fałszowaniu wywołującego dll (Przetestowałem to, zmodyfikowałem podpisany kod dll, a potem go wygenerowałem, a aplikacja może być wywołana normalnie, o ile program jest poprawnie podpisany!!)
Błąd wygląda następująco:
Aby uzyskać więcej informacji o debugowaniu w czasie rzeczywistym (JIT) zamiast tego dialogu, Zobacz koniec tej wiadomości.
Nietypowy tekst **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Nazwa pliku: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" W TestDll.Form1.button1_Click_1 (Nadawca obiektu, 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 stronie System.Windows.Forms.Control.WmMouseUp(Message& m, przycisk MouseButtons, kliknięcia Int32) In System.Windows.Forms.Control.WndProc(Message& m) In System.Windows.Forms.ButtonBase.WndProc(Message& m) In System.Windows.Forms.Button.WndProc(Message& m) W 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)
Ostrzeżenie: Logowanie wiązania asemblacji jest wyłączone. Aby umożliwić logowanie niepowodzenia wiązania asemblera, ustaw wartość rejestru [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) jest ustawiony na 1. Uwaga: Będą pewne kary za wydajność związane z logowaniem zawiążenia montażu. Aby wyłączyć tę funkcję, usuń wartość rejestru [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Ładowane zespoły ************** mscorlib Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2098.0 stworzona przez: NET47REL1LAST Kod bazowy: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Wersja asemblerowa: 1.0.0.0 Wersja Win32: 1.0.0.0 Kod bazowy: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2094.0, stworzona przez: NET47REL1LAST Kod bazowy: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2093.0, stworzona przez: NET47REL1LAST Kod bazowy: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Rysunek Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2046.0 stworzona przez: NET47REL1 Kod bazowy: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2046.0 stworzona przez: NET47REL1 Kod bazowy: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2098.0 stworzona przez: NET47REL1LAST Kod bazowy: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.XML Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2046.0 stworzona przez: NET47REL1 Kod bazowy: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2046.0 stworzona przez: NET47REL1 Kod bazowy: 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 Wersja asemblerowa: 4.0.0.0 Wersja Win32: 4.7.2046.0 stworzona przez: NET47REL1 Kod bazowy: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
Debugowanie JIT ************** Aby umożliwić debugowanie w czasie rzeczywistym (JIT), Musi być ustawiony w sekcji system.windows.forms pliku .config (machine.config) aplikacji lub komputera jitDebuging value. Musi być również włączony podczas kompilacji aplikacji Debugowanie.
Na przykład:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Wszelkie nieobsługiwane wyjątki po debugowaniu JIT są włączone zostanie wysłane do debugera JIT zarejestrowanego na tej maszynie, Zamiast być obsługiwanym przez ten dialog.
|
Poprzedni:Jak aplikacja .net/c# gwarantuje, że wywołane DLL nie zostanie zastąpione fałszerstwem?Następny:fsadf{:1_2:}
|