Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 22989|Respuesta: 1

[WinForm] .net/c# utiliza firmas fuertes para proteger sus propias DLLs de ser falsificadas

[Copiar enlace]
Publicado en 19/10/2017 17:31:40 | | | |
¿Cómo garantiza una aplicación .net/c# que el DLL llamado no sea reemplazado por una falsificación?
https://www.itsvse.com/thread-4173-1-1.html
(Fuente: Arquitecto)

La última vez, probamos que la DLL puede ser falsificada por otros y ejecutada, ¿cómo evitarlo?



Introducción emblemática:
Una firma de ensamblador (también conocida como firma de nombre fuerte) otorga a una aplicación o componente una identidad única que otros programas pueden usar para identificar y referenciar explícitamente la aplicación o componente. Un nombre fuerte consiste en el nombre de texto simple del ensamblaje, el número de versión, la información regional (si se proporciona) y un par de claves pública/privada.

Por ejemplo, una denominación fuerte permite a los autores y administradores de aplicaciones especificar la versión exacta de un servicio que será utilizada por componentes compartidos. Esto permite que diferentes aplicaciones especifiquen distintas versiones sin afectar a otras. También puedes usar el nombre fuerte del componente como evidencia de seguridad para generar una relación de confianza entre ambos componentes.

Para firmar fuertemente un ensamblador, no necesitas firmar un certificado digital con el código adquirido, puedes generar un archivo SNK con la herramienta sn que proporciona .NET, y puedes garantizar la firma de tu ensamblador guardando este archivo.

Sin embargo, una firma fuerte para un ensamblador no es lo mismo que una firma digital para un archivo ejecutable (incluso si el ensamblador es un archivo exe). Y MSDN dice claramente que los archivos exe no deben estar firmados con firmas firmas (aunque yo sí lo hice). Una firma digital para un archivo es en realidad adjuntar una firma a cualquier archivo a nivel del sistema de archivos, indicando al sistema operativo quién es el emisor de ese archivo. En el cuadro de propiedades del archivo, puedes ver la pestaña "Firmas Digitales".


Firmamos fuertemente la dll y luego la llamamos con un programa, que puede ejecutarse normalmente, de la siguiente manera:


¿Y si reemplazamos la dll por una dll forjada? Pruébalo y descubre que la ejecución es un error, lo que puede evitar que la dll que llama se forjee (Lo probé, modifiqué el código de la DLL firmado y luego lo regeneré, y la aplicación también puede llamarse normalmente, ¡debería ser así siempre que el programa esté firmado correctamente!

El error es el siguiente:

Para más información sobre cómo llamar a la depuración en tiempo real (JIT) en lugar de este diálogo,
Ver el final de este mensaje.

Texto inusual **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Nombre del archivo: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e"
   En TestDll.Form1.button1_Click_1 (Object sender, EventArgs e)
   En System.Windows.Forms.Control.OnClick(EventArgs e)
   En System.Windows.Forms.Button.OnClick(EventArgs e)
   En System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   En System.Windows.Forms.Control.WmMouseUp(Message& m, botón MouseButton, Int32 clics)
   En System.Windows.Forms.Control.WndProc(Message& m)
   En System.Windows.Forms.ButtonBase.WndProc(Message& m)
   En System.Windows.Forms.Button.WndProc(Message& m)
   En System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   En System.Windows.Forms.Control.ControlControlNativeWindow.WndProc(Message& m)
   En System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Advertencia: El registro de binding de ensamblador está desactivado.
Para habilitar el registro de fallos de ensamblador, establece el valor del registro [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) está configurado en 1.
Nota: Habrá algunas penalizaciones de rendimiento asociadas al registro de fallos en binding de ensamblaje.
Para desactivar esta función, elimina el valor del registro [HKLM\Software\Microsoft\Fusion!] EnableLog]。



Ensamblajes cargados **************
MSCORLIB
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2098.0 Compilada por: NET47REL1LAST
    Código base: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
TestDll
    Versión ensambladora: 1.0.0.0
    Versión de Win32: 1.0.0.0
    Código base: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe
----------------------------------------
System.Windows.Forms
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2094.0 Compilada por: NET47REL1LAST
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
Sistema
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2093.0 Compilada por: NET47REL1LAST
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2046.0 Compilada por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2046.0 Compilada por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2098.0 Compilada por: NET47REL1LAST
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.XML
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2046.0 Compilada por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2046.0 Compilada por: NET47REL1
    Código base: 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.recursos
    Versión ensambladora: 4.0.0.0
    Versión de Win32: 4.7.2046.0 Compilada por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

Depuración de **************
Para habilitar la depuración en tiempo real (JIT),
Debe configurarse en la sección system.windows.forms del archivo .config (machine.config) de la aplicación o del ordenador
jitDebugging value.
También debe estar habilitado al compilar la aplicación
Depuración.

Por ejemplo:

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

Cualquier excepción no gestionada tras la depuración JIT está habilitada
se enviará al depurador JIT registrado en esta máquina,
En lugar de que se maneje con este diálogo.







Anterior:¿Cómo garantiza una aplicación .net/c# que el DLL llamado no sea reemplazado por una falsificación?
Próximo:fsadf{:1_2:}
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com