Логотип
Главная 
Практика 
Игры 
Софт 
Ссылки 
Анекдоты 
Баланс звука
ПРАКТИКА
Изменение баланса
Предыдущая тема  |  Практика. Тема 12  |  Следующая тема

Запрет изменения системной даты.

         Как известно, любые настройки программы, которые необходимо сохранить после выхода из неё, можно хранить либо в системном реестре, либо в дополнительном файле с расширением, читаемым только программой, а также с любым иным расширением, в том числе ".ini".

         В некоторых программах при запуске необходимо автоматически отключать возможность пользователя залезть в реестр, например. Это могут быть программы-вирусы, но могут быть и программы, выполняющие полезные функции по администрированию системы. Например, программа, контролирующая действия пользовтеля с правами "Гостя" в ОС WindowsXP.

         Часто разработчика ShareWare - программ сталкиваются с необходимостью разрешить пользователю пользоваться незарегистрированной версией программы лишь в течение определённого периода времени - обычно месяца. При первом запуске в реестр или файл записывается дата первого запуска программы. От неё и ведётся отсчёт оставшегося времени. Запрет на более длительное использование легко обойти, если изменить системную дату компьютера. Поставит пользователь по истечении месячного периода системную дату на месяц назад, и снова у него целый месяц работы незарегистрированной версии! И так до бесконечности.

         Так как же запретить менять системное время или дату незарегистрированному пользователю? Существует несколько известных способов, имеющих свои достоинства и недостатки, которые делятся на принципиально отличающиеся группы:

I. Программирование запрета на изменение системных даты и времени.

1. Запретить возможность изменения системных даты и времени в системном реестре просто нельзя.
2. Удаление или переименовывание в WindowsXP файла "C:\Windows\System32\timedate.cpl", хранящего настройки свойств времени и даты, ничего не даёт, так как при попытке получить доступ к управлению свойствами системных даты и времени через двойной щелчок левой кнопкой мыши по часам в системном трэе создают данный файл управления со свойствами по умолчанию.
3. Программировать запрет изменения системных даты или времени вообще не имеет смысла, так как текущие настройки может легко изменить любой более-менее продвинутый пользователь, минуя системный реестр Windows, через DOS или командную строку. Нажмите "Пуск" - "Выполнить". Ввведите в текстовое поле: "command.com", нажмите "ОК". Теперь наберите "Date" или "Time" и свободно меняйте то, что Вам нужно - дату или время.

II. Программирование контроля за изменением системных даты или времени.

1. Избрать другой способ ограничений для незаригистрированной версии программы. Этот путь, решив одну проблему, обязатльно поставит другую.
2а. Сохранять дату запуска программы каждый запуск, а перед сохранением проверять, не стала ли дата более ранней, чем дата предыдущего запуска?
2б. Для программ, работающих в фоновом режиме, для которых важен запрет на изменение не даты, а времени, запоминать время каждой активации, а через интервал времени до следующей активации при очередной активации проверять, равно ли текущее время сумме времени прошлой активации и прошедшего интервала. Точного соответствия по секундам может не быть, если компьютер слабый, поэтому целесообразно добавлять к сумме максимально допустимую задержку от 0 до n секунд.
3а. По истечении разрешённого периода использования незарегистрированной версии программа должна ставить в реестре или в файле специальную метку, наличие которой должно проверяться при каждом запуске программы в случае, если она ещё не зарегистрирована. Если при очередном запуске программы интервал времени по системной дате ещё не истёк, а метка уже стоит, значит, системная дата была переведена пользователем назад.
3б. Ставить метки как в предыдущем пункте Несколько раз в течение разрешённого периода использования незарегистрированной версии, чтобы более хитрый пользователь не смог перевети системную дату до истечения разрешённого времени.
4. Считать абсолютный промежуток времени между предыдущим и текущим запуском программы и добавлять его к общему времени работы программы. В этом случае хитрый пользователь, который переведёт системную дату назад, получит не вычитание, а добавление времени к общему времени использования программы, так как добавляться к общему времени будет не величина со знаком "-", а её модуль - Abs(x). Конечно, есть возожность перед каждым запуском программы ставить одну и ту же системную дату.

         У способов, работающих с сохранением параметров в реестре или в файле, есть недостаток - возможность нахождения контрольных дат и меток в реестре и изменения их наиболее продвинутым пользователями. Поможет крайняя мера - запрет на доступ к редактированию реестра, но эта мера является явно дурным тоном в программировании, а потому недопустима.

         Остаётся одно - путать следы: при хранении настроек в реестре использовать отдельные ветви реестра и не наводящие на Вашу программу названия разделов и параметров; в случае использования файла - прятать его где-нибудь в папке операционной системы, давать не ведущее к Вашей программе название, перед записью в него кодировать информацию, применять эксклюзивное расширение. Наилучший способ - дублировать контрольные даты и метки и в реестре, и в файле, а затем сверять их соответствие при запуске программы.

И напоследок:
1. Степень защиты всегда надо выбирать в зависимости от объёма и ценности программы, так как овчинка должна соответствовать выделке.
2. Вслед за особо продвинутыми пользователями по иерархии идут хакеры. Против лома нет приёма, так как теоритически любая программа может быть взломана, любая защита преодолена.

Предыдущая тема  |  Практика. Тема 12  |  Следующая тема

alexansol@mail.ru