Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 22989|Válasz: 1

[WinForm] A .net/c# erős aláírásokat használ, hogy megvédje saját DLL-jeit a hamisítástól

[Linket másol]
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:}
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com