![]() |
|
|
#1
|
|||
|
|||
|
Дано: Программа - только EXE-файл.
Задача - вписать в исходник проверку текущей даты с датой первого запуска программы (притом в дату запуска добавить точное время). Цель - заблокировать запуск если накрутилось н-ое кол-во дней и дать возможность ввести ключик. Генерация ключей - реализована. А вот проверку - не умею. ![]() |
|
#2
|
||||
|
||||
|
Немного теории...
Дату тервого запуска можно хранить в 2-х местах...в реестре или в файле...можно хранить в явном или зашифрованном виде, но это уже реализция... Дата в Delphi хранится в виде дробного числа, целая часть количество дней с какой то даты (по моему 1 декабря 1899 года), дробная чать время(формат не помню)... Получешь текущую дату, получаешь дату первого запуска, вычитаешь одну дату из другой и сравниваешь количетсво дней... Вот функции работы с датой и временем... http://www.helloworld.ru/texts/comp/.../var/var54.htm Последний раз редактировалось NIch, 23.11.2009 в 12:42. |
|
#3
|
|||
|
|||
|
спасибо... А можно все-таки в EXE-шник записать?
И если реализовывать то как?(DLL, TXT.....) |
|
#4
|
||||
|
||||
|
Если экзешник засунуть и можно, то это проблематично...С таким никогда не сталкивался...
Вот немного инфы по защите программ... http://www.z-oleg.com/secur/articles/progprotect.php http://www.delphisources.ru/forum/showthread.php?t=9934 Почитай...защита шарованых программ дело неблагодарное... |
|
#5
|
|||
|
|||
|
Можнто-то можно, в ресурсы. только вот учти, что мнгие антивирусы это дело отловят и покажут пользователю, а это уже дыра в защите. Вообще, я бы посмотрел в сторону нормальных "навесных" защит, которые умеют нормально интегрироваться с программой и предоставляют кучу хороших возможностей для защиты.
|
|
#6
|
|||
|
|||
|
Тогда приведите, пожайлуста пример записи/чтения переменной в Реестр или еще как нибудь, кроме TXT.
![]() |
|
#7
|
|||
|
|||
|
просмотрел, спасибо. Но задача поставлена - надо как-то решить... Хотя бы на примитивном уровне. Там где будут ее использовать взламывать вряд ли будут.
|
|
#8
|
||||
|
||||
|
Работа с реестром...Автор Алексей Федоров...
Код:
unit RDUnit;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Registry;
type
TForm1 = class(TForm)
Memo1: TMemo;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation{$R *.DFM}var
RegFile: TRegIniFile;
const
//Подсекция
SubKey: string = 'Software\RegDemo';
// Элемент для хранения логических данных
BoolKey: string = 'BoolKey';
// Элемент для хранения целочисленных данных
IntKey: string = 'IntKey';
// Элемент для хранения строчных данных
StrKey: string = 'StrKey';
procedure TForm1.FormCreate(Sender: TObject);
begin
// Создать экземпляр класса
RegFile := TRegIniFile.Create(SubKey);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Записать целочисленное значение
RegFile.WriteInteger(IntKey, 'Value', 1998);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// Записать булево значение
RegFile.WriteBool(BoolKey, 'Value', True);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
// Записать строку
RegFile.WriteString(StrKey, 'Value', 'Demo');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
// Считать целочисленное значение
Memo1.Lines.Add('Int Value = ' +
IntToStr(RegFile.ReadInteger(IntKey,
'Value', 0)));
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
// Считать булево значение
if RegFile.ReadBool(BoolKey, 'Value', False) then
Memo1.Lines.Add('Bool Value = True')
else
Memo1.Lines.Add('Bool Value = False');
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
// Считать строку
Memo1.Lines.Add(RegFile.ReadString(StrKey, 'Value', ''));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Удалить секцию
RegFile.EraseSection(SubKey);
// Освободить память
RegFile.Free;
end;
end. |
|
#9
|
|||
|
|||
|
Не получалось копированием(а странно) - как только ручками набрал - заработало!
Последний раз редактировалось AntoNechayuk, 24.11.2009 в 09:05. |
|
#10
|
|||
|
|||
|
с реестром все получилось! Огромное спасибо NIch.
Теперь прошу - дайте пример как с ресурсом сделать!! И желательно чтоб "как для новичка". Заранее благодарен. |
|
#11
|
||||
|
||||
|
За спасибо пожалуйста...
А работа с ресурсами уже поднималась...пользуйся поиском... |