|
|
Közzétéve 2017. 10. 19. 17:31:40
|
|
|
|

Hogyan garantálja egy .net/c# alkalmazás azt, hogy a hívott dll ne cserélődjön hamisítással?
https://www.itsvse.com/thread-4173-1-1.html (Forrás: Architect) Legutóbb teszteltük, hogy a dll-t mások is meg tudják kovácsolni és végrehajtani, hogyan lehet ezt megakadályozni?
Aláírási bevezető:
Az assembly aláírás (más néven strong name signature) egyedi identitást ad egy alkalmazásnak vagy komponensnek, amelyet más szoftverek használhatnak az alkalmazás vagy komponens explicit azonosítására és hivatkozására. Egy erős név az assembly egyszerű szövegnevéből, verziószámából, regionális információból (ha van megadva), valamint egy közepes/privát kulcspárból.
Például az erős elnevezés lehetővé teszi az alkalmazásszerzők és adminisztrátorok számára, hogy pontosan meghatározzák az egyik szolgáltatás verzióját, amelyet a megosztott komponensek használnak. Ez lehetővé teszi, hogy különböző alkalmazások különböző verziókat határozzanak meg anélkül, hogy másokat befolyásolnának. Az összetevő erős nevét is használhatod biztonsági bizonyítékként, hogy bizalmi kapcsolatot teremtsünk a két komponensek között.
Egy assembly erőteljes aláírásához nem kell digitális tanúsítványt aláírni megvásárolt kóddal, SNK fájlt generálhatsz a .NET által biztosított sn eszközzel, és garantálhatod az assembly aláírását a fájl mentésével.
Azonban egy erős aláírás egy assembly esetén nem ugyanaz, mint egy futtatható fájl digitális aláírása (még akkor is, ha az assembly exe fájl). És az MSDN egyértelműen azt mondja, hogy az exe fájlokat nem szabad erősen aláírni (bár én így tettem). Egy fájl digitális aláírása valójában azt jelenti, hogy bármely fájlhoz csatol aláírást a fájlrendszer szintjén, jelezve az operációs rendszernek, ki a fájl kibocsátója. A fájl tulajdonságai párbeszédben megláthatod a "Digitális aláírások" fület.
Erősen aláírjuk a dll-t, majd egy programmal hívjuk, amely normálisan végrehajtható, a következőképpen működik:
Mi lenne, ha a dll-t egy hamisított DLL-re cserélnénk? Teszteljük, és találjuk, hogy a végrehajtás hiba, ami hatékonyan megakadályozhatja, hogy a hívó dll hamisítsanak (Teszteltem, módosítottam az aláírt dll kódot, majd újrageneráltam, és az alkalmazás is normálisan hívható, amíg a program helyesen van aláírva!!)
A hiba a következő:
További információért a valós idejű (JIT) hibakeresés hívásáról a párbeszéd helyett, Lásd ennek az üzenetnek a végét.
Szokatlan szöveg **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Fájl neve: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e" TestDll.Form1.button1_Click_1-ben (Objektumküldő, 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) A System.Windows.Forms.Control.WmMouseUp (Message&m, MouseButtons gomb, Int32 kattintás) címen System.Windows.Forms.Control.WndProc(Message&m) In System.Windows.Forms.ButtonBase.WndProc(Message&m) System.Windows.Forms.Button.WndProc(Message&m) A System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m) fájlban System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m) In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Figyelem: Az összeszerelési kötés naplózása ki van kapcsolva. Az assembly binding hibanaplózás engedélyezéséhez állítsuk be a [HKLM\Software\Microsoft\Fusion!" Az EnableLog (DWORD) 1-re van beállítva. Megjegyzés: Az összeszerelési kötés hibás naplózásához bizonyos teljesítményhátrányok vonatkoznak. Ennek a funkciónak a kikapcsolásához töröld a [HKLM\Software\Microsoft\Fusion!] EnableLog]。
Loaded Assemblies ************** MSCORLIB Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2098.0 készítette: NET47REL1LAST Alapkód: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- TestDll Assembly verzió: 1.0.0.0 Win32 verzió: 1.0.0.0 Alapkód: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe ---------------------------------------- System.Windows.Forms Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2094.0 készítette: NET47REL1LAST Alapkód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- Rendszer Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2093.0 készítette: NET47REL1LAST Alapkód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- Rendszer. Rajzolás Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2046.0 készítette: NET47REL1 Alapkód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- Rendszer.Konfiguráció Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2046.0 készítette: NET47REL1 Alapkód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Core Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2098.0 készítette: NET47REL1LAST Alapkód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Xml Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2046.0 készítette: NET47REL1 Alapkód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Windows.Forms.resources Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2046.0 készítette: NET47REL1 Alapkód: 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 Assembly verzió: 4.0.0.0 Win32 verzió: 4.7.2046.0 készítette: NET47REL1 Alapkód: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ----------------------------------------
JIT hibakeresés ************** A valós idejű (JIT) hibakeresés engedélyezéséhez Ezt az alkalmazás vagy számítógép .config fájljának (machine.config) system.windows.forms szakaszában kell beállítani jitDebugging érték. Ezt az alkalmazás fordításakor is be kell kapcsolni Hibakeresés.
Például:
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
A JIT hibakeresés után kezeletlen kivételek engedélyezve vannak a gépen regisztrált JIT hibakeresőhöz küldik, Ahelyett, hogy ez a párbeszéd kezelné őket.
|
Előző:Hogyan garantálja egy .net/c# alkalmazás azt, hogy a hívott dll ne cserélődjön hamisítással?Következő:fsadf{:1_2:}
|