Come firmare un file batch di Windows (.bat)?


8

Sto eseguendo Windows 7 e quando provo a eseguire un file batch, dice "Impossibile pubblicare l'editore. Sei sicuro di voler eseguire questo software?"

Quindi, quando provo a firmarlo con il mio certificato di firma del codice, viene visualizzato il messaggio "Errore SignTool: questo formato di file non può essere firmato perché non riconosciuto."

Quindi sono bloccato tra una roccia e un posto difficile. C'è un modo per eliminare entrambi i messaggi?

immagine dello schermo


1
Riscriverlo come uno script di PowerShell e firmarlo? Non ho mai sentito parlare di file batch firmati, me stesso.
Iszi,

Non firmi file batch. Sembra che il tuo file batch stia chiamando qualcos'altro che dovrebbe essere firmato.
Mark Allen,

1
Qual è la fonte del prompt? Cioè, qual è la barra del titolo e l'icona? In realtà è un prompt di Windows o un prompt di un programma di sicurezza di terze parti? Fai uno screenshot e aggiungilo alla domanda.
Synetech,


@SeanCheshire, se è così, allora techturtle è corretto; qualsiasi cosa su una rete viene vista con sospetto da Windows, quindi sarà necessario copiarla localmente o aggiungere la posizione alla zona attendibile.
Synetech,

Risposte:


4

Ricevo un messaggio simile se eseguo file batch (o altri eseguibili) da un percorso di rete. In questo caso, potresti prendere in considerazione l'idea di spostarlo su un'unità locale. Un'altra alternativa è utilizzare un file batch separato sull'unità locale per avviare quello sulla rete. Il file batch di avvio deve contenere solo una riga:

@call \\network\folder\batch.bat

Windows non eseguirà il balk sul file locale e, una volta eseguito, il file può chiamare la versione di rete senza problemi.


@Sosukodo, quindi E:è un'unità mappata in rete?
Synetech,

Sorta di ;-) Sto eseguendo un guest Windows 7 VirtualBox su un host Mac. E: è una cartella condivisa VirtualBox. Non sapevo che la cartella condivisa sarebbe stata considerata un'unità di rete ma quando l'hai menzionata, aveva senso.

4

Non firmi i file batch. Sembra che il tuo file batch stia chiamando qualcos'altro che dovrebbe essere firmato.

Modifica: ora che hai pubblicato un file batch, possiamo vedere che è a causa del percorso di rete. O a volte succede se si copia semplicemente un file da un percorso di rete. In quest'ultimo caso, è perché Windows ha taggato il file tramite un flusso di dati alternativo in un'altra area Internet. Puoi aggirare questo in due modi:

  1. Cambia le tue zone di sicurezza in Internet Explorer, per l'area Intranet.
  2. Utilizzare il comando type per distruggere il flusso di dati alternativo per il file. (C'è anche streams.exe da Sysinternals che può farlo.) type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat

3

Quello che vedi è un prompt generale che Windows fornisce ogni volta che provi ad aprire in qualsiasi momento il file che è stato scaricato. Quello che succede è che quando scarichi un file, viene taggato con una bandiera che indica che proviene da Internet ed è quindi potenzialmente pericoloso. Quando si tenta di eseguire un file di questo tipo, Windows verifica se ha una firma valida per determinare se può essere considerato attendibile.

Quello che puoi fare è rimuovere il flag dal file usando il pulsante Unblock nelle proprietà del file, dopodiché Windows ti lascerà in pace ogni volta che provi a eseguirlo:

inserisci qui la descrizione dell'immagine


Il problema è che i file batch sono file di testo che possono essere eseguiti. Mentre è possibile firmare un file di testo, finirà per aggiungere un mucchio di dati binari al file che per un file batch è errato perché è incomprensibile e causerà problemi quando l'interprete dei comandi tenta di eseguirlo. Commentare la firma non funzionerà nemmeno perché la firma diventa corrotta.

Pertanto, la firma di un file batch non funzionerà.

Quello che devi fare è capire perché il sistema ti sta chiedendo quando si tenta di eseguirlo. Per impostazione predefinita, Windows non richiede prima di eseguire file batch, quindi è necessario disporre di un criterio speciale o di un programma di sicurezza che lo blocchi. Controlla i tuoi programmi di sicurezza per vedere se esiste un'impostazione di verifica per la quale puoi disabilitare o aggiungere un'esclusione.

Controlla anche il contenuto del file batch per vedere se è in esecuzione un eseguibile che non è firmato (anche se, di default, Windows non richiede eseguibili a meno che non sia stato scaricato o richieda privilegi elevati, quindi controlla le tue impostazioni).


Dovresti essere in grado di uscire dallo script prima che l'esecuzione raggiunga la firma, no?
Sparr,

@Sparr, sì e no. È possibile inserire un goto :eofprima della firma, ma ciò altererebbe l'hash del file e renderebbe la firma non valida e quindi il file come corrotto / insicuro. Suppongo che potresti avere la linea lì alla fine del file prima di firmarlo, e dovrebbe funzionare. Esperimento interessante da provare ...
Synetech,

2
Puoi usare il comando type - anche sui binari - per deselezionare il file. Lo faccio tutto il tempo. digitare oldfile> newfile (e quindi) digitare newfile> oldfile genera il vecchio file senza il tag ADS.
Mark Allen,

Hehe, intelligente. Ciò non toglie tecnicamente la bandiera (e non sono sicuro di quanto sia più veloce o più conveniente della finestra di dialogo Proprietà , ma funziona.
Synetech

0

Puoi anche convertire il file .bat in uno script PowerShell, signtool supporta la firma di questi file.


Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post. - Dalla recensione
Burgi,

@Burgi questo è discutibile, i file .bat non possono essere firmati a meno che qualcuno non scriva un SIP dedicato. La soluzione più vicina per ora è uno script PowerShell firmato.
Emmanuel Bourg,

La regola n. 42 di Fight Club è "Le soluzioni alternative sono le risposte". Quindi questa è una risposta. (Ma gli altri sono migliori.)
Scott
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.