Як підписати пакетний файл Windows (.bat)?


8

Я запускаю Windows 7, і коли я намагаюся запустити пакетний файл, він говорить: "Видавця не вдалося перевірити. Ви впевнені, що хочете запустити це програмне забезпечення?"

Тому коли я намагаюся підписати його своїм сертифікатом підпису коду, він говорить "Помилка SignTool: Цей формат файлу не можна підписати, оскільки він не розпізнається".

Тому я застряг між скелею важким місцем. Чи є спосіб усунути будь-яке повідомлення?

скріншот


1
Перепишіть його як сценарій PowerShell і підпишіть це? Я ніколи не чув про підписані пакетні файли.
Іссі

Ви не підписуєте пакетні файли. Це здається, що ваш пакетний файл викликає щось інше, що слід підписати.
Марк Аллен

1
Яке джерело запиту? Тобто, що таке заголовок та значок? Це насправді підказка Windows або підказка від сторонньої програми безпеки? Зробіть скріншот і додайте його до питання.
Synetech


@SeanCheshire, якщо це так, то techturtle є правильним; що-небудь у мережі розглядається з підозрілим оком Windows, тому вам потрібно буде або скопіювати його локально, або додати місцеположення до довіреної зони.
Synetech

Відповіді:


4

Я отримую подібне повідомлення, якщо запускаю пакетні файли (або інші виконувані файли) з мережевого розташування. Якщо це так, ви можете розглянути можливість переміщення його на локальний диск. Інша альтернатива - використовувати окремий пакетний файл на локальному диску, щоб запустити файл у мережі. Для запуску пакетного файлу потрібно мати лише один рядок:

@call \\network\folder\batch.bat

Windows не працює на локальному файлі, і як тільки цей файл запущений, він може без проблем викликати мережеву версію.


@Sosukodo, значить E:, мережевий накопичувач?
Synetech

Сортування ;-) Я запускаю гість VirtualBox Windows 7 на хості Mac. E: це загальна папка VirtualBox. Я не знав, що спільна папка вважатиметься мережевим накопичувачем, але коли ви згадали про неї, це мало сенс.

4

Ви не підписуєте пакетні файли. Це здається, що ваш пакетний файл викликає щось інше, що слід підписати.

Редагувати: Тепер, коли ви опублікували пакетний файл, ми можемо побачити, що це пов’язано з мережевим розташуванням. Або іноді це станеться, якщо ви просто скопіюєте файл з мережевого розташування. В останньому випадку, це тому, що Windows позначила файл через альтернативний потік даних, щоб він знаходився в якійсь іншій зоні Інтернету. Ви можете обійти це одним із двох способів:

  1. Змініть зони безпеки в Internet Explorer для зони Інтранета.
  2. Використовуйте команду type, щоб знищити альтернативний потік даних для файлу. (Є також streams.exe від Sysinternals, який може це зробити.) type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat

3

Що ви бачите, це загальна підказка, яку надає Windows кожного разу, коли ви намагаєтесь відкрити будь-який час завантаженого файлу. Що трапляється, що коли ви завантажуєте файл, він позначається прапором, який вказує на те, що він прийшов з Інтернету і, таким чином, є потенційно небезпечним. Коли ви намагаєтеся запустити такий файл, Windows перевіряє, чи має він дійсну підпис, щоб визначити, чи можна йому довіряти.

Що ви можете зробити, це зняти прапор з файлу, натиснувши кнопку " Розблокувати" у властивостях файлу, після чого Windows залишить вас у спокої щоразу, коли ви спробуєте запустити його:

введіть тут опис зображення


Проблема полягає в тому, що batch-файли - це текстові файли, які можна виконати. Хоча можна підписати текстовий файл, він в кінцевому підсумку додасть купу бінарних даних до файлу, що для batch-файлу погано, тому що це гнучко і спричинить проблеми, коли командуючий інтерпретатор намагатиметься його виконати. Коментувати підпис також не вийде, оскільки тоді підпис стає пошкодженим.

Тому підписання пакетного файлу не спрацює.

Що вам потрібно зробити - це з’ясувати, чому система підказує вам при спробі її запуску. За замовчуванням Windows не запитує перед запуском пакетних файлів, тому у вас повинна бути або спеціальна політика, або програма безпеки, що блокує її. Перевірте свої програми безпеки, щоб побачити, чи є параметр підтвердження, для якого ви можете відключити або додати виключення.

Також перевірте вміст batch-файлу, щоб побачити, чи працює він у виконанні, який не підписаний (однак, за замовчуванням, Windows не вимагає виконувати файли, якщо вони не були завантажені або не потребують підвищених привілеїв, тому перевірте свої налаштування).


Ви повинні мати можливість вийти зі скрипту до того, як виконання досягне підпису, ні?
Спарр

@Sparr, так і ні. Ви можете вставити a goto :eofперед підписом, але тоді це змінить хеш файлу і зробить підпис недійсним, і, таким чином, файл буде пошкодженим / незахищеним. Я припускаю, що ви можете мати рядок у кінці файлу, перш ніж підписувати його, і він повинен працювати. Цікавий експеримент спробувати…
Synetech

2
Ви можете використовувати команду type - навіть на двійкових файлах - для відміни файлу. Я роблю це постійно. введіть oldfile> newfile (а потім) введіть newfile> oldfile результати в oldfile без тегу ADS.
Марк Аллен

Хе-х, розумний. Це технічно не знімає прапор (і я не впевнений, наскільки це швидше чи зручніше, ніж діалог Властивості , але він працює.
Synetech

0

Ви також можете перетворити .bat файл у скрипт PowerShell, signtool підтримує підписання цих файлів.


Це не дає відповіді на запитання. Щоб критикувати або вимагати роз'яснення у автора, залиште коментар під їх дописом. - З огляду
Burgi

@ Бургі це дискусійне, .bat файли не можуть бути підписані, якщо хтось не пише спеціальний SIP. Найближче рішення на даний момент - це підписаний сценарій PowerShell.
Еммануель Бург

Правило № 42 Fight Club - "Обхідні шляхи - це відповіді". Отже, це відповідь. (Але інші кращі.)
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.