Консультация № 139965
14.07.2008, 16:13
0.00 руб.
0 4 2
Здравствуйте.
Мне нужно сделать так, чтобы программа работала только в течении определенного срока (30 дней). Как сделать это таким образом, чтобы изменение системного времени не влияла на продолжительность работы программы?
Спасибо.

Обсуждение

Неизвестный
14.07.2008, 16:58
общий
это ответ
<font color=blue><b>!!!</b></font>
Здравствуйте, Vassea!

Самое простое что приходит в голову - записывать в какой-то "секретный" файл или ключ реестра время, проработанное на этой машине. Например при запуске и завершении программы, ну и по таймеру. Лучше к этому значению прибавлять что-то и шифровать.
Огромный недостаток - <font color=blue><s>палится</s> определяется</font> на ура <font color=blue><s>регмоном/файлмоном</s> с помощью</font> <a href=http://technet.microsoft.com/en-us/sysinternals/bb896652.aspx>RegMon</a> / <a href=http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx>FileMon</a> и подменяется.<p><fieldset style=‘background-color:#EFEFEF; width:80%; border:blue 1px solid; padding:10px;‘ class=fieldset><font color=blue><i>Исправлен сленг, добавлены ссылки на рекомендуемое ПО.</i>
-----
</font><font color=#777777 size=1><b>• Отредактировал: <a href=http://rusfaq.ru/info/user/18359 target=_blank>Николай Владимирович / Н.В.</a></b> (Профессор)
<b>• Дата редактирования:</b> 14.07.2008, 19:53 (MCK)</font></fieldset>
давно
Старший Модератор
31795
6196
14.07.2008, 19:39
общий
Есть такой компонент <a href=http://www.delphihelp.org/tfilefinder.html>TFileFinder - механизм поиска файлов</a>, лично я его не иследовал.Как идею могу предложить поигратся со временем создания, последнего доступа и модификации.Эти значения можно спокойно получить с помощью <b>WinApi : FindFirstFile | FindNextFile</b>, но таких компонентов в самом Delphi я не встечал, только <b>FindFile | FindNext</b>, которые дают единственное время создания файла. Под видом поиска установленных компонентов, можно организовать проверку системного времени и времени создания файлов. Если 30-ть дней прошло или разница дней ушла в минус можно спокойно делать выход из программы.Ещё могу посоветовать посмотреть анализ систем защиты различных программ, в статьях <a href=http://www.wasm.ru/author.php?author=%D0%9A%D1%80%D0%B8%D1%81%20%D0%9A%D0%B0%D1%81%D0%BF%D0%B5%D1%80%D1%81%D0%BA%D0%B8>Криса Касперски</a> можно встретить много полезной информации о том как это делается и почему так не нужно делать.Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
14.07.2008, 20:21
общий
Спасибо, посмотрю.
Неизвестный
18.07.2008, 16:48
общий
это ответ
Здравствуйте, Vassea!
Если приложение рассчитанно на работу в среде NT (Windows NT, XP, Vista), то простейшее - записать в поток исполняемого файла (что и делает, например сканер Касперского), информация без специальных средств не видна, а файл никоим образом не затрагивается (содержимое). Можно сделать "самодифференцированный".. когда информация (дата, например) пишется в сам файл, чаще для этого используют библиотеку, без неё работать не будет, а с ней только так как надо.. Кстати, совершенно не к чему использовать тип DateTime - для этого вполне сгодится и длинное целое (секунды, например). Ну.. или например, "привязаться" к дате системного файла - ядра, например, рискованно конечно.. но есть надежда, что без переустановки ОС, сбросить счетчик не выйдет.
Определенным способом зашифровать дату и записать в реестр - например, хэш программы и дата старта, или, вычислить хэш даты и потом сравнивать с константой.. В общем, вариантов множество :)
Форма ответа