winapi - puedo - para que sirve el certificado digital
¿Puedo eliminar una firma digital de una DLL? (6)
Mi instalador crea "signos" de una DLL usando un certificado de firma de código durante el proceso de compilación.
Me he dado cuenta de que si intento construir dos veces seguidas, la segunda compilación falla porque el archivo DLL ya está firmado, por lo que el código de significación se bloquea. Obviamente, puedo solucionarlo firmando una copia de la DLL en la compilación, pero el problema me intrigó:
¿Es posible "eliminar" un archivo DLL, y si no, por qué no ...?
Es bastante fácil eliminar la firma de un archivo .dll utilizando la API ImageRemoveCertificate .
No tiene ningún idioma especificado en sus etiquetas, pero este artículo muestra cómo implementarlo en C #. Eliminar la firma digital de un archivo usando C #
Aparte de eso, si está buscando una herramienta simple para hacer el trabajo por usted, puede usar FileUnsigner .
Verifique si su herramienta de compilación admite "volver a firmar". Esto debería reemplazar todas las firmas existentes.
Si no, puede usar Stud_PE para eliminar el bloque de 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.
Puede usar delcert.exe desde esta publicación del foro de XDA .
Aquí hay una pequeña herramienta que elimina (elimina) el signo digital (Authenticode) de los archivos ejecutables de PE como * .exe, * .dll, * .mui, etc.
signtool remove /s C:/path/to.exe.or.dll
signtool está disponible en Windows SDK.
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 se documenta públicamente aquí
Otra opción posible es cambiar a SignTool.exe . Viene con el SDK de Windows y la firma de un binario que ya se ha firmado no genera un error. Utilizo signtool.exe en mi proceso de compilación y no tengo ninguna dificultad con él, incluso cuando algo ya está firmado.
Además, consulte la pregunta ¿Cuál es la principal diferencia entre signcode.exe y signtool.exe?