|
|
Публикувано в 19.10.2017 г. 17:31:40 ч.
|
|
|
|

Как .net/c# приложение гарантира, че извиканият dll няма да бъде заменен от фалшифициране?
https://www.itsvse.com/thread-4173-1-1.html (Източник: Архитект) Миналия път тествахме, че 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) В 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:}
|