Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 22989|Odpowiedź: 1

[WinForm] .NET/C# używa silnych sygnatur do ochrony własnych DLL przed fałszowaniem

[Skopiuj link]
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:}
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com