|
|
Опубликовано 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 (Я протестировал, изменил подписанный 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 (Object sender, 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)
Предупреждение: логирование связки сборки отключено. Чтобы включить логирование неудач связывания ассемблеров, установите значение реестра [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) приложения или компьютера jitОтладка значения. Он также должен быть включен при компиляции приложения Отладка.
Например:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
Любые необработанные исключения после активации отладки JIT будет отправлено на отладчик JIT, зарегистрированный на этом устройстве, Вместо того чтобы поддаваться этому диалогу.
|
Предыдущий:Как приложение .net/c# гарантирует, что вызываемый dll не будет заменён подделкой?Следующий:fsadf{:1_2:}
|