¿Cómo firmar un archivo por lotes de Windows (.bat)?

8

Estoy ejecutando Windows 7 y cuando intento ejecutar un archivo por lotes, dice: "No se pudo verificar el editor. ¿Está seguro de que desea ejecutar este software?"

Entonces, cuando trato de firmarlo con mi certificado de firma de código, dice "Error de SignTool: este formato de archivo no se puede firmar porque no se reconoce".

Así que estoy atrapado entre una roca y un lugar difícil. ¿Hay alguna forma de eliminar cualquiera de los mensajes?

captura de pantalla


fuente
1
¿Reescribirlo como un script de PowerShell y firmar eso? Nunca he oído hablar de archivos por lotes firmados, yo mismo.
Iszi
No firmas archivos por lotes. Parece que su archivo por lotes está llamando a otra cosa que debería firmarse.
Mark Allen el
1
¿Cuál es la fuente del aviso? Es decir, ¿cuál es la barra de título y el ícono? ¿Es realmente un aviso de Windows o un aviso de un programa de seguridad de terceros? Tome una captura de pantalla y agréguela a la pregunta.
Synetech
@SeanCheshire, si ese es el caso, entonces techturtle es correcto; Windows ve cualquier cosa en una red con un ojo sospechoso, por lo que deberá copiarlo localmente o agregar la ubicación a la Zona de confianza.
Synetech

Respuestas:

4

Recibo un mensaje similar si ejecuto archivos por lotes (u otros ejecutables) desde una ubicación de red. Si este es el caso, puede considerar moverlo a una unidad local. Otra alternativa es utilizar un archivo por lotes separado en la unidad local para iniciar el archivo en la red. El archivo por lotes de inicio solo necesita tener una línea:

@call \\network\folder\batch.bat

Windows no rechazará el archivo local, y una vez que el archivo se esté ejecutando, puede llamar a la versión de red sin problemas.

tortuga
fuente
@Sosukodo, entonces, ¿ E:es un disco mapeado en red?
Synetech
Más o menos ;-) Estoy ejecutando un invitado VirtualBox Windows 7 en un host Mac. La E: es una carpeta compartida de VirtualBox. No sabía que la carpeta compartida se consideraría una unidad en red, pero cuando la mencionaste, tenía sentido.
4

No firmas archivos por lotes. Parece que su archivo por lotes está llamando a otra cosa que debería firmarse.

Editar: ahora que ha publicado un archivo por lotes, podemos ver que se debe a la ubicación de la red. O, a veces sucederá si simplemente copia un archivo desde una ubicación de red. En el último caso, es porque Windows ha etiquetado el archivo a través de un flujo de datos alternativo para estar en alguna otra zona de Internet. Puede sortear esta de dos maneras:

  1. Cambie sus zonas de seguridad en Internet Explorer, para la zona Intranet.
  2. Utilice el comando de tipo para destruir el flujo de datos alternativo para el archivo. (También hay streams.exe de Sysinternals que puede hacerlo). type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat
Mark Allen
fuente
3

Lo que está viendo es un mensaje general que proporciona Windows cada vez que intenta abrir cualquier archivo descargado. Lo que sucede es que cuando descargas un archivo, está etiquetado con una bandera que indica que proviene de Internet y, por lo tanto, es potencialmente peligroso. Cuando intenta ejecutar dicho archivo, Windows verifica si tiene una firma válida para determinar si se puede confiar en él.

Lo que puede hacer es quitar la bandera del archivo usando el botón Desbloquear en las propiedades del archivo, después de lo cual, Windows lo dejará solo cada vez que intente ejecutarlo:

ingrese la descripción de la imagen aquí


El problema es que los archivos por lotes son archivos de texto que se pueden ejecutar. Si bien es posible firmar un archivo de texto, terminará agregando un montón de datos binarios al archivo que para un archivo por lotes es malo porque es un galimatías y causará problemas cuando el intérprete de comandos intente ejecutarlo. Comentar la firma tampoco funcionará porque la firma se corrompe.

Por lo tanto, firmar un archivo por lotes no va a funcionar.

Lo que debe hacer es descubrir por qué el sistema le está solicitando cuando intenta ejecutarlo. De manera predeterminada, Windows no pregunta antes de ejecutar archivos por lotes, por lo que debe tener una política especial o un programa de seguridad que lo bloquee. Verifique su (s) programa (s) de seguridad para ver si hay una configuración de verificación para la que puede deshabilitar o agregar una exclusión.

También verifique el contenido del archivo por lotes para ver si está ejecutando un ejecutable que no está firmado (aunque nuevamente, de manera predeterminada, Windows no solicita ejecutables a menos que se haya descargado o requiera privilegios elevados, así que verifique su configuración).

Synetech
fuente
Debería poder salir del script antes de que la ejecución llegue a la firma, ¿no?
Sparr
@Sparr, sí y no. Puede insertar un goto :eofantes de la firma, pero eso alteraría el hash del archivo y haría que la firma no sea válida y, por lo tanto, el archivo esté dañado / inseguro. Sin embargo, supongo que podría tener la línea allí al final del archivo antes de firmarlo, y debería funcionar. Experimento interesante para probar ...
Synetech
2
Puede usar el comando type, incluso en binarios, para desetiquetar el archivo. Lo hago todo el tiempo. escriba oldfile> newfile (y luego) escriba newfile> oldfile da como resultado el archivo antiguo sin la etiqueta ADS.
Mark Allen el
Jeje, inteligente. Eso no es técnicamente quitar la bandera (y no estoy seguro de cuánto más rápido o más conveniente es que el cuadro de diálogo Propiedades , pero funciona.
Synetech
0

También puede convertir el archivo .bat en un script de PowerShell, signtool admite la firma de estos archivos.

Emmanuel Bourg
fuente
Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación. - De la opinión
Burgi
@ Burgi, esto es discutible, los archivos .bat no se pueden firmar a menos que alguien escriba un SIP dedicado. La solución más cercana por ahora es un script de PowerShell firmado.
Emmanuel Bourg
La regla # 42 de Fight Club es "Las soluciones alternativas son respuestas". Entonces esta es una respuesta. (Pero los otros son mejores.)
Scott