2008-12-04 27 views
19

Mi instalador crea "signos" de una DLL usando un certificado de firma de código durante el proceso de compilación.¿Puedo eliminar una firma digital de una DLL?

Me di cuenta de que si intento construir dos veces seguidas, la segunda compilación falla porque la DLL ya está firmada, por lo que el código de identificación se bloquea. Obviamente puedo solucionar esto firmando una copia de la DLL en la compilación, pero el problema me intrigó:

¿Es posible "unsign" un DLL, y si no, ¿por qué no ...?

Respuesta

7

Claro que es posible, pero no trivial.

Aunque sería más fácil guardar una copia de la DLL presunta.

Esta firma digital es poco más que una sección adicional añadida al final de un archivo PE. Podría escribir un programa que borre la firma, si lo desea.

No es tan simple como truncar el archivo; debe eliminar las referencias a la firma en el encabezado del archivo. Podría complicarse si el archivo DLL tiene múltiples firmas y solo quiere eliminar uno.

El formato de un archivo PE está documentado públicamente here

+1

Gracias. No * bastante * la respuesta que esperaba (por ejemplo, "acaba de ejecutar UNSIGNTOOL"), ¡pero estoy mejor informado ahora! – Roddy

3

Compruebe si su herramienta de construcción apoya "Re-firma". Esto debería reemplazar todas las firmas existentes.

De lo contrario, puede usar Stud_PE para eliminar el bloque de la firma. Abra el archivo DLL o EXE en Stud_PE, vaya a la pestaña de secciones, haga clic con el botón derecho en la sección de firma digital y seleccione "Eliminar sección". Sin embargo, esto necesita la interacción del usuario. Las versiones anteriores de la herramienta podrían destruir el archivo.

25

Puede usar delcert.exe desde este XDA Forum post.

aquí es una pequeña herramienta que quita (elimina) señal digital (Authenticode) de archivos ejecutables PE como * .exe, * .dll, * .MUI, etc.

+1

Esta herramienta utiliza la API 'ImageRemoveCertificate' y funciona muy bien. – zig

+0

Y viene con fuentes, genial. –

6
signtool remove /s C:\path\to.exe.or.dll 

signtool está disponible en Windows SDK.

+0

Hm, ¿dónde has visto el comando "eliminar" para singtool.exe? ¿Qué versión es esa? ¿Podrías vincularlo? Su enlace existente no lo muestra por lo que pude ver. –

+0

Hm, use "signtool /?" para ver las opciones @NikolaDavidovic –

+0

Bueno, no tiene el comando 'remove'. Compruébalo tú mismo. No aparece en el enlace que proporcionó. Entonces, me pregunto, ¿qué versión de signtool.exe usaba cuando estaba escribiendo esta respuesta? Lo verifiqué con la versión del producto 6.1.7600.16385. –

Cuestiones relacionadas