Теоретически, вы никогда не сможете скрыть эту переменную вообще. Тем не менее, вы можете затруднить поиск или чтение. Чтобы узнать, как скрыть переменную, вы должны сначала узнать некоторые распространенные способы ее получения.
Типичные проблемы и решения
Как другие теоретически могут получить значение вашей переменной
- Декомпиляция вашей программы одним щелчком мыши с помощью .NET Reflector или любой другой программы .NET Decompilation.
- Анализировать память ПК во время работы программы и извлекать значение оттуда.
- Если ваше значение было сохранено в файле, пользователь может легко найти его, проанализировав активность ввода-вывода жесткого диска с помощью ловушки или сравнения дампа.
- Если ваше значение было сохранено в реестре, простой хук реестра или инструмент сравнения дампов реестра могут выяснить, где хранится значение.
- Если ваше значение зашифровано, метод № 1 (декомпиляция программы) может быть использован для выяснения того, как можно расшифровать.
Решение возможных проблем выше
- Можно использовать общую программу запутывания, чтобы усложнить декомпиляцию приложений. Для этого я предлагаю SmartAssembly . Кроме этого, есть инструмент под названием Spoon Studio (ранее назывался PostBuild), который перекомпилирует ваше приложение в код сборки (а также заставит его работать без установленного .NET Framework).
- Класс SecureString может быть использован для затруднения поиска и дешифрования значения, пока оно находится в памяти. Этот класс также очищает себя после использования, но обычно он немного медленнее, чем обычная строка.
- Хранение файлов в файле не является плохой идеей (даже если люди могут прослушивать файловую активность), поскольку вы всегда можете хранить переменную не очень приятным образом. Например, у вас может быть файл с именем IsFullScreen.bin, который содержит значение вашей логической переменной (1 или 0, или true или false), даже если он не имеет ничего общего с полноэкранным рендерингом. Это сделало бы это немного запутанным, но и не очень красивым в программировании.
- Для реестра все в решении # 3 все еще применяется.
- Шифрование также не является плохой идеей, и трудно дешифровать некоторые типы шифрования (например, шифрование с открытым / закрытым ключом, если у вас есть сервер) или хеширование (например, MD5 или SHA1).
- В вашем случае вы могли бы вместо этого сохранить значение на сервере?
Итак, подведем итог ...
Вы не можете полностью защитить свое приложение. Но вы можете использовать некоторые из приведенных выше решений (или комбинировать их) для лучшей защиты, что усложнит задачу.
Конечно, преждевременная безопасность - это плохо. Если это булево значение не ОЧЕНЬ важно, тогда, на мой взгляд, тоже подойдет простое шифрование.
Есть еще ...
Редактировать 1
Я только что заметил, что вы прокомментировали свой собственный ответ, сказав, что файл не должен быть "действительным" после копирования его на другой компьютер и чтения его оттуда.
Если это так, вы можете использовать шифрование на основе ключей, такое как шифрование XOR, а затем использовать MAC-адрес ПК или серийный номер материнской платы в качестве ключа для этого шифрования.
Находясь на компьютере, на котором был создан файл, необходимо будет также прочитать файл. Если вам это интересно, добавьте комментарий, и я приведу пример кода.