Есть ли более простой способ проверить, были ли изменены несколько файлов? - PullRequest
0 голосов
/ 26 апреля 2019

Я работаю над проектом, содержащим около 40 файлов сценариев, и собираюсь упаковать сценарии, чтобы распространить их среди моих клиентов (вроде как выпуск версии).Я не хочу, чтобы мои клиенты меняли мои сценарии (по крайней мере, это затрудняет их изменение).

Я сделал определенные файлы доступными только для чтения, установив политику выполнения, но клиенты могут просто установить ее обратнодоступный для записи, поэтому я хочу добавить в несколько строк кода (желательно меньше 5), чтобы убедиться, что сценарии не изменены.

Я знаю, что использование свойства LastWriteTime подойдетэто, но мне нужно будет сделать это для каждого скрипта (хеш-таблица для отслеживания LastWriteTime для каждого файла будет длинной и недостаточно чистой), что не идеально.

У меня естьтакже считается Get-FileHash, но меня беспокоит, что хэш-код будет меняться при каждом его запуске.

1 Ответ

3 голосов
/ 26 апреля 2019

Как вы уже поняли, невозможно помешать клиентам модифицировать скрипты водонепроницаемым способом. Брюс Шнайер резюмирует это красиво: «Попытка сделать кусочки не копируемыми - это все равно, что сделать воду не мокрой».

Чтобы запустить скрипт, нужно скопировать его хотя бы в системную память - и в этот момент вы потеряли контроль. Что мешает скопировать скрипт в альтернативном месте и отредактировать его перед запуском? Ничего, если только у вас нет жесткого контроля над клиентом. Если у вас есть жесткий контроль, установка политики выполнения на подписанный предотвращает запуск неподписанных сценариев. Пока клиент не запустит Powershell из командной строки с ключом -Executionpolicy Bypass. Политика выполнения не является системой безопасности, которая ограничивает действия пользователя .

Есть несколько подходов, которые могут помешать редактированию, но решительный хакер может их преодолеть. Итак, главный вопрос: почему? Почему клиенты не должны изменять скрипты? Это для защиты какого-то IP? Они пытаются достичь чего-то, для чего сценарии не предназначены? Что-то еще?

Простым решением является использование такого инструмента, как PS2EXE, который преобразует скрипт Powershell в исполняемый файл. Содержимое может быть извлечено и изменено, но это требует, по крайней мере, чуть больше усилий, чем запуск Блокнота.

Другой подход - модули. Распространите сценарии как модуль Powershell, который будут импортировать клиенты. Редактирование модуля требует немного больше усилий, чем редактирование простого файла сценария, но также вполне возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...