Firmar dlls o librerias de terceros en .net
Escenario:
Queremos firmar nuestras dlls con una key con extensión PFX (Personal Information Exchange; strong name key protegida por contraseña) y hacemos uso de librerías de terceros, que no están firmadas. Sabemos que al querer firmar nuestras dlls, cuando compilamos, el compilador de Visual Studio nos exige que todas las dlls del proyecto estén firmadas (incluidas las de terceros). Tenemos tres opciones:
- Pedirle a los que crearon la dll que nos manden una version firmada con nuestra key.
- Si es open source, bajarnos el proyecto y firmarlo nosotros con nuestra key.
- Firmar las dlls sin tener que bajarnos el proyecto con técnicas de ingeniería inversa.
Voy a explicar la opción 3, como firmar las dlls teniendo solo el assembly (archivo .dll).
Solución:
Por ejemplo supondremos que la librería de terceros es un componente para guardar mensajes de error de nuestra applicación (un logger) y se llama ThirdPartyLogger.dll y también supondremos que la key que tenemos se llama MyKey.pfx.
Vamos a utilizar la consola de comando que viene con las herramientas de desarrollador de visual studio (developer command prompt).
Utilizaremos una herramienta llamada ildasm para desensamblar la librería y crear un archivo .il y .resources. En nuestra consola, y parados en la carpeta donde se encuentra la dll ejecutamos:
ildasm /all /out=ThirdPartyLogger.il ThirdPartyLogger.dll
Luego utilizaremos la herramienta ilasm para reensamblarla, pero esta vez pasandole nuestra key. Si tenemos una key .pfx, ilasm nos pide una key .snk, asique primero extraemos la parte pública de la key del archivo pfx con la herramienta SN y creamos una con extensión .snk pasandole la parte publica de nuestra key:
sn -p MiKey.pfx MiKey.snk
luego ensamblamos la dll y la firmamos con nuestra key .snk (esto se llama delay-sign):
ilasm /dll /key=MiKey.snk ThirdPartyLogger.il
Finalmente
re-firmamos la librería con nuestra clave en archivo .pfx (full-sign):
sn –R ThirdPartyLogger.dll
MiKey.pfx
Para verificar que todo salió bien y la librería quedó correctamente firmada:
sn.exe -v ThirdPartyLogger.dll
Genial el aporte
ResponderEliminar