Как вы уже поняли, невозможно помешать клиентам модифицировать скрипты водонепроницаемым способом. Брюс Шнайер резюмирует это красиво: «Попытка сделать кусочки не копируемыми - это все равно, что сделать воду не мокрой».
Чтобы запустить скрипт, нужно скопировать его хотя бы в системную память - и в этот момент вы потеряли контроль. Что мешает скопировать скрипт в альтернативном месте и отредактировать его перед запуском? Ничего, если только у вас нет жесткого контроля над клиентом. Если у вас есть жесткий контроль, установка политики выполнения на подписанный предотвращает запуск неподписанных сценариев. Пока клиент не запустит Powershell из командной строки с ключом -Executionpolicy Bypass
. Политика выполнения не является системой безопасности, которая ограничивает действия пользователя .
Есть несколько подходов, которые могут помешать редактированию, но решительный хакер может их преодолеть. Итак, главный вопрос: почему? Почему клиенты не должны изменять скрипты? Это для защиты какого-то IP? Они пытаются достичь чего-то, для чего сценарии не предназначены? Что-то еще?
Простым решением является использование такого инструмента, как PS2EXE, который преобразует скрипт Powershell в исполняемый файл. Содержимое может быть извлечено и изменено, но это требует, по крайней мере, чуть больше усилий, чем запуск Блокнота.
Другой подход - модули. Распространите сценарии как модуль Powershell, который будут импортировать клиенты. Редактирование модуля требует немного больше усилий, чем редактирование простого файла сценария, но также вполне возможно.