2010-02-18 1 views
2

Я хочу, чтобы exe-файл не мог быть скопирован или вырезан из файловой системы Windows, чтобы вставить его.Как предотвратить копирование или вырезание файла в файловой системе Windows?

EXE выполнен на C#. который должен быть только на одном ПК.

Я работал с FileSystemWatcher, NSIS, Clipboard. но для всех мне нужно определить, копируется ли этот файл.

Я также видел «Предотвращение» (http www free-download-blog.com disable-cut-paste-copy-delete-rename-functions-using-prevent), но мне нужно предотвратить только этот конкретный exe от копирования или вырезания.

Любой указатель или идея помогут.

+1

Привет, Я не уверен, почему вы это делаете, но не существует альтернативы, например, писать в реестре путь от того, где в первый раз запускается exe, и проверять этот реестр или что-то в этом роде? – 2010-02-18 07:50:13

+0

Хороший и простой вариант .. спасибо. – 2010-02-18 08:59:58

+0

Вот один пример, но похоже, что нет такого ключевого ключа: http://techrepublic.com.com/5208-6230-0.html?forumID=49&threadID=51219&messageID=310118&tag=content;leftCol Я имею в виду По-моему, ctrl + C не поврежден. – 2010-02-18 09:13:58

ответ

1

Ну, это сложная проблема. Даже если вы запустите explorer.exe, чтобы отключить вырез &, что мешает пользователю использовать окно команд? Или написать свой собственный exe, чтобы сделать это? Загрузка в Linux и чтение?

Тем не менее, у вас есть несколько вариантов (там будет больше, скорее всего), которые вы можете попробовать:

  • Используйте правильные разрешения: Установите разрешений таким образом, чтобы пользователи, которые вы не» t хочу вырезать & паста не может прочитать файл.

  • Напишите драйвер устройства, который может подключить к вызовам файловой системы и сделать это для вас.

  • Зашифровать файл.

И некоторые Hacky вариантов, как:

  • Используйте ключ системного реестр AppInit_DLLs поставить свой собственный DLL, загружаемый в каждый процесс (я не уверен, если это будет работать с процессом консоли, хотя). Затем на вашей DLL-загрузке подключитесь к IAT, чтобы заменить вызовы файлов kernel32.dll.

  • Замените kernel32.dll на свою собственную версию. Возможно, придется немного побеседовать с форматом ПЭ и т.д.

У нас нет гарантий. Если, например, вы ожидаете, что они смогут его выполнить, но не скопировать, вы, вероятно, застряли.

+0

Выполнение должно быть разрешено .. а не копировать/вырезать. Загрузка в Linux и чтение также являются проблемой. Я действительно застрял, но я все еще думаю, что должен быть способ. На данный момент я думаю, что я должен подумать о некоторых других, более приятных, чем материал для защиты от копирования. Благодарим за быстрый ответ. Я буду работать над обоими способами. – 2010-02-18 08:58:28

+0

IMO - единственное предложение, которое вы упомянули о том, что имеет какую-либо отдаленную возможность, - «написать ... драйвер ...». См. Также: http://msdn.microsoft.com/en-us/library/ms793580.aspx - конечно, способность делать что-то в этом направлении не делает его хорошей идеей. – 2010-02-18 10:07:01

+0

Если вы можете его выполнить, вы можете скопировать его, как упомянули другие. Когда вы его выполняете, он уже скопирован в память. Вы должны быть ОС, чтобы безопасно контролировать память, и даже тогда я всегда мог бы запустить все это на виртуальной машине ... вы не можете добиться такой защиты от копирования. У Джеймса есть мудрая цитата из Шнайера. – 2010-02-18 11:29:15

0

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

+4

«Цифровые файлы нельзя сделать недоступными, не более, чем вода может быть сделана не влажной». --Bruce Schneier – James

2

Если вам нужно, чтобы exe исполнялся, вам необходимо разрешить его загрузку в память. Как только вы это сделаете, каждый может прочитать его в памяти с помощью ReadFile, а затем записать в произвольное место с помощью WriteFile.Не задействовано обнаружение оболочки.

Хорошее чтение: Raymond's post and its comments on preventing copying.

+0

Точно, если пользователь может прочитать файл, он также может скопировать его, период. И даже если у него нет привилегий для его чтения, любой достаточно решительный злоумышленник сможет обойти любую защиту, если у него есть права на локальный доступ или права администратора. –

+0

Другой способ: можно также выполнить программу внутри отладчика и выгрузить память процесса обратно в файл. – grawity

0

, если вы могли бы укомплектовать блокировать исследователь от копирования или перемещения файлов, то все и нужно это третье программное обеспечение стороннего для копирования файлов (но убедитесь, что он может фильтровать расширение файлов), например Copy Handler

1

Как полагают другие вы не сможете легко отключить поведение копирования/вырезания.
Альтернативой должно быть отключить выполнение скопированных версий.
В исполняемый вы можете проверить многие вещи, как:

  • Путь настоящего исполняемого файла явно your_path
  • именем машины и пользователя, который вы санкционировать

Вы могли бы даже запретить выполнение файла более одного раза с использованием записей реестра Windows (если уже 1 не запускаться). Это не будет совершенным, так как любой экспериментированный пользователь может изменить это, полагая, что они ищут это. Но в зависимости от вашего профиля пользователей этого может быть достаточно.

0

Настройка переменного окружения в машине

В своем коде добавить проверку если (переменное окружение == «То же, как определено») // Выполнить код еще // Приостановить исполнение

 Смежные вопросы

  • Нет связанных вопросов^_^