Некоторые производители программного обеспечения привязывают свой продукт к определенным временным рамкам, в пределах которого программа сохраняет свою работоспособность. При завершении такого периода она либо перестает запускаться, либо продолжает работать с функциональными ограничениями, а ежели это ShareWare, то начинает требовать регистрацию. Мотивация таких мер может быть совершенно различна. Чаще всего это попытка воспрепятствовать нелегальному распространению своей продукции. При этом программа во время инсталляции сохраняет каким-нибудь образом стартовую дату и при каждом запуске сверяет ее с заданным интервалом, в пределах которого она работает в демонстрационном или полнофункциональном режиме.
По ходу работы мне приходится сталкиваться и с другими случаями. Вот, например, последний. Всемизвестная фирма регулярно выпускает электронный каталог своей продукции с ценами и техническими характеристиками. "Регулярно" потому что цены актуальны только в пределах определенного времени, да и ассортимент время от времени пополняется новыми позициями, а старые снимаются с производства. Каталог этот выпускается каждые полгода, соответственно и "срок годности" у него рассчитан на этот период. Но беда в том, что своевременно обновлять этот каталог не получается. Поэтому приходится продлевать жизнь просроченному. Как правило, сверка даты происходит во время запуска программы. Это самый распространенный случай, обход которого и будет рассмотрен ниже. Я также встречал проверку спустя непродолжительный интервал времени (примерно 30 сек). Все зависит от хитрости разработчиков, они ведь тоже не глупые люди :-) Но даже и с таким вариантом справиться очень легко с помощью BackTime!
Рассмотрим исходник BackTime, написанный на Delphi:
program BackTime; {$APPTYPE CONSOLE}
uses ShellApi,Windows,SysUtils;
var Today:TDateTime;
bkTime, bkProgram: String;
Interval, j: SmallInt;
begin
Today:=Date; // фиксируем реальную дату
if ParamCount<>3 then begin // если параметры не заданы то печатаем подсказку
WriteLn(output,'BackTime (c)DSKalugin ICQ#177363 http://deep.nightmail.ru');
WriteLn(output,'---------------------');
WriteLn(output,'BackTime.exe T I P');
WriteLn(output,'T - Date;');
WriteLn(output,'I - Interval, [sec];');
WriteLn(output,'P - Program');
WriteLn(output,'---------------------');
WriteLn(output,'Example:');
WriteLn(output,'BackTime.exe 04.01.2000 15 "C:\Program Files\program.exe"');
end
else begin
bkTime:=ParamStr(1); // 1й параметр - дата
Interval:=StrToInt(ParamStr(2));// 2й параметр - интервал в секундах
bkProgram:=ParamStr(3); // 3й параметр - полный путь к программе
WinExec(PChar('cmd /c date '+bkTime), SW_HIDE); // установка необходимой даты
ShellExecute(0, 'open', PChar(bkProgram), nil, nil, SW_SHOW); // запуск программы
j:=0;
while j<Interval do begin // задержка в секундах
sleep(1000);
inc(j);
end;
WinExec(PChar('cmd /c date '+DateToStr(Today)), SW_HIDE); // восстанавливаем реальную дату
end
end.
Как видите, все очень просто! Предлагаемая утилита BackTime запускается из командной строки с тремя параметрами:
Как теперь это использовать? На рабочем столе создаем ярлык...
Скачать BackTime.zip (47Kb) (c)DSKalugin ICQ 177363