Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 22989|Відповідь: 1

[WinForm] .net/c# використовує сильні підписи для захисту власних DLL від підробки

[Копіювати посилання]
Опубліковано 19.10.2017 17:31:40 | | | |
Як додаток .net/c# гарантує, що викликаний dll не буде замінений підробкою?
https://www.itsvse.com/thread-4173-1-1.html
(Джерело: Architect)

Минулого разу ми тестували, чи можна підробити DLL іншими і виконати, як це запобігти?



Фірмовий вступ:
Підпис асемблера (також відомий як сильний підпис імені) надає додатку або компоненту унікальну ідентичність, яку інше програмне забезпечення може використовувати для явної ідентифікації та посилання на додаток або компонент. Сильна назва складається з простої текстової назви асамблеї, номера версії, регіональної інформації (якщо вона надана) та пари публічних/приватних ключів.

Наприклад, сильне іменування дозволяє авторам і адміністраторам застосунків вказувати точну версію одного сервісу, який буде використовуватися спільними компонентами. Це дозволяє різним додаткам вказувати різні версії, не впливаючи на інші. Ви також можете використати сильну назву компонента як доказ безпеки для створення довірчих відносин між двома компонентами.

Щоб сильно підписати асемблю, не потрібно підписувати цифровий сертифікат купленим кодом, ви можете створити SNK-файл за допомогою інструменту sn, який надає .NET, і гарантувати підпис вашої асемблерки, зберігши цей файл.

Однак сильний підпис для асемблера не є тим самим, що цифровий підпис для виконуваного файлу (навіть якщо асемблер є exe-файлом). І в MSDN чітко зазначено, що exe-файли не повинні бути сильно підписані (хоча я так і робив). Цифровий підпис файлу фактично прикріплює підпис до будь-якого файлу на рівні файлової системи, що повідомляє операційній системі, хто є емітентом цього файлу. У діалогу властивостей файлу можна побачити вкладку «Цифрові підписи».


Ми сильно підписуємо dll, а потім викликаємо його програмою, яку можна виконувати звичайним способом, наступним чином:


А що, якщо ми замінимо DLL на кований? Перевірте це і виявите, що виконання є помилкою, що може ефективно запобігти підробці dll, що викликає (Я протестував його, змінив код підписаного dll, а потім відновив його, і додаток також можна викликати звичайним способом, якщо програма підписана правильно!!

Помилка наступна:

Для отримання додаткової інформації про виклик налагодження в реальному часі (JIT) замість цього діалогу,
Дивіться кінець цього повідомлення.

Незвичайний текст **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Назва файлу: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e"
   In TestDll.Form1.button1_Click_1 (Відправник об'єктів, EventArgs e)
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   У System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   На System.Windows.Forms.Control.WmMouseUp (Message&m, кнопка MouseButtons, кліки Int32)
   У System.Windows.Forms.Control.WndProc(Message&m)
   У System.Windows.Forms.ButtonBase.WndProc(Message&m)
   У System.Windows.Forms.Button.WndProc(Message&m)
   У System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)
   У System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)
   In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Попередження: Журналування зв'язування Assembly вимкнено.
Щоб увімкнути логування помилок зв'язування асемблерів, встановіть значення реєстру [HKLM\Software\Microsoft\Fusion!» EnableLog (DWORD) встановлений на 1.
Примітка: У зв'язку з реєстрацією збоїв збірки будуть певні штрафи за продуктивністю.
Щоб вимкнути цю функцію, видаліть значення реєстру [HKLM\Software\Microsoft\Fusion!] EnableLog]。



Завантажені збірки **************
mscorlib
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2098.0 створена: NET47REL1LAST
    Базовий код: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
TestDll
    Версія збору: 1.0.0.0
    Версія для Win32: 1.0.0.0
    Базовий код: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe
----------------------------------------
System.Windows.Forms
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2094.0, виготовлена: NET47REL1LAST
    Базовий код: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
Система
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2093.0, створена: NET47REL1LAST
    Базовий код: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
Система. Малюнок
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2046.0, виготовлена: NET47REL1
    Базовий код: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2046.0, виготовлена: NET47REL1
    Базовий код: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2098.0 створена: NET47REL1LAST
    Базовий код: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2046.0, виготовлена: NET47REL1
    Базовий код: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2046.0, виготовлена: NET47REL1
    Базовий код: 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
    Версія збору: 4.0.0.0
    Версія для Win32: 4.7.2046.0, виготовлена: NET47REL1
    Базовий код: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

Налагодження JIT **************
Щоб увімкнути налагодження в реальному часі (JIT),
Він має бути встановлений у розділі system.windows.forms файлу .config (machine.config) додатка або комп'ютера
jitDebuging значення.
Він також має бути увімкнений під час компіляції додатку
Відлагодження.

Наприклад:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Будь-які неочищені винятки після увімкнення налагодження JIT
буде надіслано на JIT-відлагоджувач, зареєстрований на цій машині,
Замість того, щоб керуватися цим діалогом.







Попередній:Як додаток .net/c# гарантує, що викликаний dll не буде замінений підробкою?
Наступний:fsadf{:1_2:}
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com