Jak podpisać plik wsadowy (.bat) systemu Windows?

8

Korzystam z systemu Windows 7 i kiedy próbuję uruchomić plik wsadowy, pojawia się komunikat: „Wydawca nie mógł zostać zweryfikowany. Czy na pewno chcesz uruchomić to oprogramowanie?”

Kiedy więc próbuję podpisać go za pomocą certyfikatu do podpisywania kodu, pojawia się komunikat „Błąd SignTool: Nie można podpisać tego formatu pliku, ponieważ nie został rozpoznany”.

Więc utknąłem między kamieniem a trudnym miejscem. Czy istnieje sposób na wyeliminowanie któregoś z komunikatów?

zrzut ekranu


źródło
1
Przepisz go ponownie jako skrypt PowerShell i podpisz? Sam nigdy nie słyszałem o podpisanych plikach wsadowych.
Iszi
Nie podpisujesz plików wsadowych. Wygląda na to, że plik wsadowy wywołuje coś innego, co powinno zostać podpisane.
Mark Allen,
1
Jakie jest źródło pytania? Co to jest pasek tytułu i ikona? Czy w rzeczywistości jest to monit systemu Windows lub program zabezpieczający innej firmy? Zrób zrzut ekranu i dodaj go do pytania.
Synetech,
@SeanCheshire, w takim przypadku techturtle ma rację; wszystko w sieci jest podejrzane przez system Windows, więc musisz skopiować je lokalnie lub dodać lokalizację do Strefy zaufanej.
Synetech,

Odpowiedzi:

4

Otrzymuję podobny komunikat, jeśli uruchamiam pliki wsadowe (lub inne pliki wykonywalne) z lokalizacji sieciowej. W takim przypadku możesz rozważyć przeniesienie go na dysk lokalny. Inną alternatywą jest użycie osobnego pliku wsadowego na dysku lokalnym, aby uruchomić plik w sieci. Uruchamiający plik wsadowy musi zawierać tylko jeden wiersz:

@call \\network\folder\batch.bat

Windows nie będzie bał się na plik lokalny, a po uruchomieniu pliku może bez problemu wywołać wersję sieciową.

techturtle
źródło
@Sosukodo, więc E:czy dysk jest zmapowany w sieci?
Synetech,
Sort-of ;-) Korzystam z gościa VirtualBox Windows 7 na hoście Mac. E: to folder współdzielony VirtualBox. Nie wiedziałem, że folder współdzielony będzie uważany za dysk sieciowy, ale kiedy o nim wspomniałeś, miało to sens.
4

Nie podpisujesz plików wsadowych. Wygląda na to, że plik wsadowy wywołuje coś innego, co powinno zostać podpisane.

Edycja: po opublikowaniu pliku wsadowego widzimy, że jest to spowodowane lokalizacją sieci. Czasami może się tak zdarzyć, jeśli po prostu skopiujesz plik z lokalizacji sieciowej. W tym drugim przypadku dzieje się tak, ponieważ system Windows oznaczył plik za pomocą alternatywnego strumienia danych, aby znajdować się w innej strefie internetowej. Możesz obejść ten jeden z dwóch sposobów:

  1. Zmień strefy bezpieczeństwa w Internet Explorerze dla strefy intranetowej.
  2. Użyj polecenia type, aby zniszczyć alternatywny strumień danych dla pliku. (Istnieje również Streams.exe z Sysinternals, który może to zrobić.) type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat
Mark Allen
źródło
3

To, co widzisz, to ogólny monit wyświetlany przez system Windows przy każdej próbie otwarcia pobranego pliku. Kiedy pobierasz plik, jest on oznaczony flagą wskazującą, że pochodzi on z Internetu, a zatem jest potencjalnie niebezpieczny. Podczas próby uruchomienia takiego pliku system Windows sprawdza, czy ma prawidłowy podpis, aby ustalić, czy można mu zaufać.

Co możesz zrobić, to usunąć flagę z pliku za pomocą przycisku Odblokuj we właściwościach pliku, po czym Windows pozostawi cię w spokoju za każdym razem, gdy spróbujesz go uruchomić:

wprowadź opis zdjęcia tutaj


Problem polega na tym, że pliki wsadowe to pliki tekstowe, które można wykonać. Chociaż możliwe jest podpisanie pliku tekstowego, spowoduje to dodanie do pliku wiązki danych binarnych, co dla pliku wsadowego jest złe, ponieważ jest bełkotliwe i spowoduje problemy, gdy interpreter poleceń spróbuje go wykonać. Komentowanie podpisu również nie będzie działać, ponieważ wówczas podpis zostanie uszkodzony.

Dlatego podpisanie pliku wsadowego nie zadziała.

Musisz dowiedzieć się, dlaczego system wyświetla monit o uruchomienie. Domyślnie system Windows nie pyta przed uruchomieniem plików wsadowych, więc musisz mieć specjalną politykę lub program zabezpieczający, który ją blokuje. Sprawdź programy zabezpieczające, aby sprawdzić, czy istnieje ustawienie weryfikacji, dla którego możesz wyłączyć lub dodać wykluczenie.

Sprawdź także zawartość pliku wsadowego, aby zobaczyć, czy działa plik wykonywalny, który nie jest podpisany (choć ponownie domyślnie system Windows nie wyświetla plików wykonywalnych, chyba że został pobrany lub wymaga podwyższonych uprawnień, więc sprawdź ustawienia).

Synetech
źródło
Powinieneś być w stanie wyjść ze skryptu, zanim wykonanie osiągnie podpis, nie?
Sparr
@Sparr, tak i nie. Możesz wstawić goto :eofprzed podpisem, ale wtedy zmieniłoby to skrót pliku i unieważniłoby podpis, a tym samym plik jako uszkodzony / niepewny. Przypuszczam, że możesz mieć linię na końcu pliku przed podpisaniem go, i powinna działać. Ciekawy eksperyment do wypróbowania…
Synetech,
2
Możesz użyć polecenia type - nawet w plikach binarnych - aby odznaczyć plik. Ciągle to robię. wpisz oldfile> newfile (a następnie) wpisz newfile> oldfile, aby uzyskać stary plik bez znacznika ADS.
Mark Allen,
Hehe, sprytny. To technicznie nie usuwa flagi (i nie jestem pewien, o ile jest szybsze lub wygodniejsze niż okno dialogowe Właściwości , ale działa)
Synetech
0

Możesz także przekonwertować plik .bat na skrypt PowerShell, signtool obsługuje podpisywanie tych plików.

Emmanuel Bourg
źródło
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienia, zostaw komentarz pod postem. - Z recenzji
Burgi,
@Burgi jest to dyskusyjne, plików .bat nie można podpisać, chyba że ktoś napisze dedykowany protokół SIP. Najbliższym rozwiązaniem na razie jest podpisany skrypt PowerShell.
Emmanuel Bourg,
Zasada nr 42 Fight Club brzmi: „Obejścia są odpowiedziami”. To jest odpowiedź. (Ale inne są lepsze.)
Scott,