Comment signer un fichier batch Windows (.bat)?

8

J'exécute Windows 7 et lorsque j'essaie d'exécuter un fichier de commandes, il dit: «L'éditeur n'a pas pu être vérifié. Voulez-vous vraiment exécuter ce logiciel?»

Ainsi, lorsque j'essaie de le signer avec mon certificat de signature de code, il indique «Erreur SignTool: ce format de fichier ne peut pas être signé car il n'est pas reconnu».

Je suis donc coincé entre un rocher et un endroit dur. Existe-t-il un moyen d'éliminer l'un ou l'autre des messages?

capture d'écran


la source
1
Réécrivez-le en tant que script PowerShell et signez cela? Je n'ai jamais entendu parler de fichiers batch signés, moi-même.
Iszi
Vous ne signez pas de fichiers batch. Il semble que votre fichier de commandes appelle quelque chose d'autre qui devrait être signé.
Mark Allen
1
Quelle est la source de l'invite? Autrement dit, quelle est la barre de titre et l'icône? S'agit-il en fait d'une invite Windows ou d'une invite d'un programme de sécurité tiers? Faites-en une capture d'écran et ajoutez-la à la question.
Synetech
@SeanCheshire, si tel est le cas, alors techturtle a raison; tout ce qui se trouve sur un réseau est vu avec un œil suspect par Windows, vous devrez donc le copier localement ou ajouter l'emplacement dans la zone de confiance.
Synetech

Réponses:

4

J'obtiens un message similaire si j'exécute des fichiers batch (ou d'autres exécutables) à partir d'un emplacement réseau. Si tel est le cas, vous pouvez envisager de le déplacer vers un lecteur local. Une autre alternative consiste à utiliser un fichier de commandes distinct sur le lecteur local pour lancer celui sur le réseau. Le fichier batch de lancement n'a besoin que d'une seule ligne:

@call \\network\folder\batch.bat

Windows ne rechignera pas sur le fichier local, et une fois que ce fichier est en cours d'exécution, il peut appeler la version réseau sans problème.

techturtle
la source
@Sosukodo, E:est donc un lecteur mappé réseau?
Synetech
Sort-of ;-) J'exécute un invité VirtualBox Windows 7 sur un hôte Mac. Le E: est un dossier partagé VirtualBox. Je ne savais pas que le dossier partagé serait considéré comme un lecteur en réseau, mais lorsque vous l'avez mentionné, cela avait du sens.
4

Vous ne signez pas de fichiers batch. Il semble que votre fichier de commandes appelle quelque chose d'autre qui devrait être signé.

Modifier: Maintenant que vous avez publié un fichier de commandes, nous pouvons voir que c'est à cause de l'emplacement réseau. Ou, parfois, cela se produira si vous copiez simplement un fichier à partir d'un emplacement réseau. Dans ce dernier cas, c'est parce que Windows a marqué le fichier via un autre flux de données pour se trouver dans une autre zone Internet. Vous pouvez contourner celle-ci de deux manières:

  1. Modifiez vos zones de sécurité dans Internet Explorer, pour la zone Intranet.
  2. Utilisez la commande type pour détruire le flux de données alternatif pour le fichier. (Il existe également streams.exe de Sysinternals qui peut le faire.) type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat
Mark Allen
la source
3

Ce que vous voyez est une invite générale que Windows fournit chaque fois que vous essayez d’ouvrir à tout moment un fichier téléchargé. Ce qui se passe, c'est que lorsque vous téléchargez un fichier, il est marqué d'un indicateur qui indique qu'il provient d'Internet et qu'il est donc potentiellement dangereux. Lorsque vous essayez d'exécuter un tel fichier, Windows vérifie s'il a une signature valide afin de déterminer s'il peut être approuvé.

Ce que vous pouvez faire est de supprimer l'indicateur du fichier en utilisant le bouton Débloquer dans les propriétés du fichier, après quoi Windows vous laissera tranquille chaque fois que vous essayez de l'exécuter:

entrez la description de l'image ici


Le problème est que les fichiers batch sont des fichiers texte qui peuvent être exécutés. Bien qu'il soit possible de signer un fichier texte, il finira par ajouter un tas de données binaires au fichier qui, pour un fichier de commandes, est mauvais car il est du charabia et causera des problèmes lorsque l'interpréteur de commandes tentera de l'exécuter. La mise en commentaire de la signature ne fonctionnera pas non plus, car alors la signature est corrompue.

Par conséquent, la signature d'un fichier de commandes ne fonctionnera pas.

Ce que vous devez faire est de comprendre pourquoi le système vous invite lorsque vous essayez de l'exécuter. Par défaut, Windows ne demande pas avant d'exécuter des fichiers batch, vous devez donc avoir une stratégie spéciale ou un programme de sécurité qui le bloque. Vérifiez vos programmes de sécurité pour voir s'il existe un paramètre de vérification pour lequel vous pouvez désactiver ou ajouter une exclusion.

Vérifiez également le contenu du fichier de commandes pour voir s'il exécute un exécutable qui n'est pas signé (mais encore une fois, par défaut, Windows ne demande pas d'exécutables sauf s'il a été téléchargé ou nécessite des privilèges élevés, alors vérifiez vos paramètres).

Synetech
la source
Vous devriez pouvoir quitter le script avant que l'exécution n'atteigne la signature, non?
Sparr
@Sparr, oui et non. Vous pouvez insérer un goto :eofavant la signature, mais cela modifierait le hachage du fichier et rendrait la signature invalide et donc le fichier comme corrompu / non sécurisé. Je suppose que vous pourriez avoir la ligne à la fin du fichier avant de le signer, et cela devrait fonctionner. Expérience intéressante à essayer…
Synetech
2
Vous pouvez utiliser la commande type - même sur les binaires - pour décomposer le fichier. Je le fais tout le temps. tapez oldfile> newfile (puis) ​​saisissez newfile> oldfile pour obtenir l'ancien fichier sans la balise ADS.
Mark Allen
Hehe, intelligent. Cela ne supprime pas techniquement le drapeau (et je ne sais pas à quel point c'est plus rapide ou plus pratique que la boîte de dialogue Propriétés , mais cela fonctionne.
Synetech
0

Vous pouvez également convertir le fichier .bat en un script PowerShell, signtool prend en charge la signature de ces fichiers.

Emmanuel Bourg
la source
Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. - De l'avis
Burgi
@Burgi c'est discutable, les fichiers .bat ne peuvent être signés que si quelqu'un écrit un SIP dédié. La solution la plus proche pour l'instant est un script PowerShell signé.
Emmanuel Bourg
La règle n ° 42 de Fight Club est «Les solutions de contournement sont des réponses». C'est donc une réponse. (Mais les autres sont meilleurs.)
Scott