Wie signiere ich eine Windows-Batchdatei (.bat)?

8

Ich verwende Windows 7 und wenn ich versuche, eine Batchdatei auszuführen, heißt es: "Der Herausgeber konnte nicht überprüft werden. Sind Sie sicher, dass Sie diese Software ausführen möchten?"

Wenn ich versuche, es mit meinem Codesignaturzertifikat zu signieren, wird "SignTool-Fehler: Dieses Dateiformat kann nicht signiert werden, da es nicht erkannt wird" angezeigt.

Also stecke ich zwischen einem Felsen und einem harten Ort fest. Gibt es eine Möglichkeit, eine der beiden Nachrichten zu entfernen?

Bildschirmfoto


quelle
1
Schreiben Sie es als PowerShell-Skript neu und unterschreiben Sie es? Ich habe selbst noch nie von signierten Batch-Dateien gehört.
Iszi
Sie signieren keine Batch-Dateien. Es hört sich so an, als würde Ihre Batch-Datei etwas anderes aufrufen, das signiert werden sollte.
Mark Allen
1
Woher stammt die Eingabeaufforderung? Das heißt, was ist die Titelleiste und das Symbol? Handelt es sich tatsächlich um eine Windows-Eingabeaufforderung oder eine Eingabeaufforderung eines Sicherheitsprogramms eines Drittanbieters? Machen Sie einen Screenshot davon und fügen Sie ihn der Frage hinzu.
Synetech
@ SeanCheshire, wenn das der Fall ist, dann ist techturtle korrekt; Alles in einem Netzwerk wird von Windows mit verdächtigem Blick betrachtet. Sie müssen es also entweder lokal kopieren oder den Speicherort der vertrauenswürdigen Zone hinzufügen.
Synetech

Antworten:

4

Ich erhalte eine ähnliche Meldung, wenn ich Batchdateien (oder andere ausführbare Dateien) von einem Netzwerkspeicherort aus ausführe. In diesem Fall können Sie es auf ein lokales Laufwerk verschieben. Eine andere Alternative besteht darin, eine separate Batchdatei auf dem lokalen Laufwerk zu verwenden, um die im Netzwerk zu starten. Die Start-Batch-Datei muss nur eine Zeile enthalten:

@call \\network\folder\batch.bat

Windows wird die lokale Datei nicht blockieren, und sobald diese Datei ausgeführt wird, kann es die Netzwerkversion ohne Probleme aufrufen.

techturtle
quelle
@Sosukodo, E:ist also ein Laufwerk mit Netzwerkzuordnung?
Synetech
Art-of ;-) Ich verwende einen VirtualBox Windows 7-Gast auf einem Mac-Host. Das E: ist ein freigegebener VirtualBox-Ordner. Ich wusste nicht, dass der freigegebene Ordner als Netzwerklaufwerk betrachtet wird, aber als Sie es erwähnten, machte es Sinn.
4

Sie signieren keine Batch-Dateien. Es hört sich so an, als würde Ihre Batch-Datei etwas anderes aufrufen, das signiert werden sollte.

Bearbeiten: Nachdem Sie eine Batch-Datei veröffentlicht haben, können wir feststellen, dass dies am Netzwerkspeicherort liegt. Oder manchmal passiert es, wenn Sie lediglich eine Datei von einem Netzwerkspeicherort kopieren . Im letzteren Fall liegt es daran, dass Windows die Datei über einen alternativen Datenstrom so markiert hat, dass sie sich in einer anderen Internetzone befindet. Sie können dies auf zwei Arten umgehen:

  1. Ändern Sie Ihre Sicherheitszonen in Internet Explorer für die Intranetzone.
  2. Verwenden Sie den Befehl type, um den alternativen Datenstrom für die Datei zu zerstören. (Es gibt auch streams.exe von Sysinternals, die das können.) type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat
Mark Allen
quelle
3

Was Sie sehen, ist eine allgemeine Eingabeaufforderung, die Windows bereitstellt, wenn Sie versuchen, eine heruntergeladene Datei zu einem beliebigen Zeitpunkt zu öffnen. Wenn Sie eine Datei herunterladen, wird sie mit einem Flag gekennzeichnet, das angibt, dass sie aus dem Internet stammt und daher möglicherweise gefährlich ist. Wenn Sie versuchen, eine solche Datei auszuführen, prüft Windows, ob sie eine gültige Signatur hat, um festzustellen, ob sie vertrauenswürdig ist.

Was Sie tun können, ist, das Flag aus der Datei zu entfernen, indem Sie die Schaltfläche " Blockierung aufheben" in den Eigenschaften der Datei verwenden. Danach lässt Windows Sie in Ruhe, wenn Sie versuchen, es auszuführen:

Geben Sie hier die Bildbeschreibung ein


Das Problem ist, dass Batch-Dateien Textdateien sind, die ausgeführt werden können. Während es möglich ist, eine Textdatei zu signieren, wird am Ende eine Reihe von Binärdaten an die Datei angehängt, was für eine Batch-Datei fehlerhaft ist, da sie Kauderwelsch ist und Probleme verursacht, wenn der Befehlsinterpreter versucht, sie auszuführen. Das Auskommentieren der Signatur funktioniert auch nicht, da die Signatur dann beschädigt wird.

Daher funktioniert das Signieren einer Batchdatei nicht.

Was Sie tun müssen, ist herauszufinden, warum das System Sie auffordert, es auszuführen. Standardmäßig fragt Windows nicht, bevor Batch-Dateien ausgeführt werden. Daher muss eine spezielle Richtlinie oder ein Sicherheitsprogramm dies blockieren. Überprüfen Sie Ihre Sicherheitsprogramme, um festzustellen, ob es eine Überprüfungseinstellung gibt, für die Sie einen Ausschluss deaktivieren oder hinzufügen können.

Überprüfen Sie auch den Inhalt der Batch-Datei, um festzustellen, ob eine nicht signierte ausführbare Datei ausgeführt wird (obwohl Windows standardmäßig nicht nach ausführbaren Dateien fragt, es sei denn, sie wurde heruntergeladen oder erfordert erhöhte Berechtigungen. Überprüfen Sie daher Ihre Einstellungen).

Synetech
quelle
Sie sollten in der Lage sein, das Skript zu beenden, bevor die Ausführung die Signatur erreicht, nicht wahr?
Sparr
@ Sparr, ja und nein. Sie könnten ein goto :eofvor der Signatur einfügen , aber das würde dann den Hash der Datei ändern und die Signatur ungültig und damit die Datei als beschädigt / unsicher machen. Ich nehme an, Sie könnten die Zeile dort am Ende der Datei haben, bevor Sie sie signieren, und sie sollte funktionieren. Interessantes Experiment zum Ausprobieren…
Synetech
2
Sie können den Befehl type - auch für Binärdateien - verwenden, um die Markierung der Datei aufzuheben. Das mache ich die ganze Zeit. Geben Sie oldfile> newfile ein (und geben Sie dann newfile> oldfile ein, um die alte Datei ohne das ADS-Tag zu erhalten.
Mark Allen
Hehe, klug. Das ist technisch nicht das Entfernen der Flagge (und ich bin nicht sicher, wie viel schneller oder bequemer es ist als das Dialogfeld " Eigenschaften ", aber es funktioniert.
Synetech
0

Sie können die .bat-Datei auch in ein PowerShell-Skript konvertieren. Signtool unterstützt das Signieren dieser Dateien.

Emmanuel Bourg
quelle
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klarstellung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. - Aus dem Rückblick
Burgi
@ Burgi das ist umstritten, .bat-Dateien können nur signiert werden, wenn jemand ein dediziertes SIP schreibt. Die derzeit am besten geeignete Lösung ist ein signiertes PowerShell-Skript.
Emmanuel Bourg
Regel Nr. 42 des Fight Clubs lautet: "Problemumgehungen sind Antworten." Das ist also eine Antwort. (Aber die anderen sind besser.)
Scott