Вопрос № 54190: Здравствуйте уважаемые эксперты!!!
Буду благодарен за ответ на следующий вопрос по защите программы:
при первом запуске программа запрашивает пароль, при втором она этого уже не должна делать, если пароль был введен верно. Как это осуществить...Вопрос № 54191: Скоро школьная конференция. Можете предложить идеи для проекта?...Вопрос № 54212: 1)Как из Delphi6/7/8 добавить в реестр инфу из *.reg файла?
2)Как лучше осуществить функцию регистрации программы (для shareware-версии) через инет и serial/key file, стоит ли выносить процедуры в внешний dll (или это упростит задачу взлома, путё...Вопрос № 54238: Люди! Как можно скопировать содержимое Canvas'а (скажем из TImage)
в EMF? Срочно надо!!!...
Вопрос № 54.190
Здравствуйте уважаемые эксперты!!!
Буду благодарен за ответ на следующий вопрос по защите программы:
при первом запуске программа запрашивает пароль, при втором она этого уже не должна делать, если пароль был введен верно. Как это осуществить средствами дельфи? Спасибо.
Отправлен: 03.09.2006, 20:20
Вопрос задал: Piit (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Piit!
Очевидно, надо создать метку в системе, наличие которой будет проверять программа. Традиционно, это записывается в реестр, где-дь по адресу HKLMSoftware, хотя можно и спрятать в нетривиальное место - главное не удалить ничего лишнего. Причем, лучше в записывать пароль, а не просто метку-подтверждение, что он совпал. Либо записывать в какой-дь файл (например, ini), в одной папке с программой.
А далее, при запуске проги, проверять существование метки (записанного пароля). Если ее нет, то справшивать пароль. Если есть, то проверять пароль и если он верный, то начать основную работу программы, а если нет, то выходить.
Окошко для ввода пароля можно сделать в части кода, где создается форма:
Application.Initialize;
// сюда вставить окно с запросом пароля
Application.CreateForm(TForm1, Form1);
Application.Run;
--------- Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 04.09.2006, 05:28 Оценка за ответ: 5 Комментарий оценки: Почему лучше записывать пароль, а не просто метку?
Отвечает: Werewolf
Здравствуйте, Piit!
По логике:
1) проверить запрашивался ли пароль
2) если не запрашивался спросить
3) если спросили то записать где-нибудь (в файле/в реестре) об этом
Удачи.
Ответ отправил: Werewolf (статус: Студент)
Ответ отправлен: 04.09.2006, 14:18 Оценка за ответ: 5
Вопрос № 54.191
Скоро школьная конференция. Можете предложить идеи для проекта?
Отвечает: CoolBick
Здравствуйте, Томша Павел!
Я посоветую тебе тестирующую программу. Я например создал программу и занел 1 место в конференции. Программа была с база Access с учительской панелью где отображалось какие тесты пользователь выполнил и кто в данный момент какой тест выполняет.
Ответ отправил: CoolBick (статус: 1-ый класс)
Ответ отправлен: 03.09.2006, 20:56
Вопрос № 54.212
1)Как из Delphi6/7/8 добавить в реестр инфу из *.reg файла?
2)Как лучше осуществить функцию регистрации программы (для shareware-версии) через инет и serial/key file, стоит ли выносить процедуры в внешний dll (или это упростит задачу взлома, путём подмены возвращённого значения?). Есть или какие-нить статьи по этому поводу (НЕ криптография)?
Отправлен: 04.09.2006, 00:53
Вопрос задал: Keraberas (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Keraberas!
1)
а) С помощью regedit
ShellExecute(Form1.Handle {или nil}, 'merge', 'regedit', имя_reg_файла, nil, SW_HIDE);
Вместо 5-го параметра nil, можно задать рабочую директорию.
Возможно, выдастся стандартное сообщение с запросом на подтверждение о том, что вы действителльно хотите добавить информацию в реестр.
б) С помощью TRegistry
В Delphi есть юнит для работы с реестром - registry. Тогда придется самому немного разобраться в формате .reg-файлов. Есть, конечно, например, метод TRegistry.LoadKey(const Key, FileName: string): Boolean;
но им не всегда можно просто взять и загрузить файл - см. справку.
2) Если без наличия сети, наличие программы бесмысленно, то подходит следующий способ: вы создаете server-validator (приложение) и размещаете его на каком-дь хостинге. И любая программа, прежде чем начать работу, должна "зарегистрироваться" на сервере - послать ей свой ключ, а в ответ получить разрешение. Лучше тоже в виде какого-дь кода. Юридически, назвать это криптографией нельзя. Конечно, и тут можно переделать адрес уже в готовом exe-шнике, да и вам надо будет постоянно поддерживать этот сервер...
Вынос процедуры во внешнюю dll совсем немного упростит задачу взлома, но если вы ее в этой dll хорошенько переделаете...
Про антиотладочные приемы и пр. защиту можно прочесть в книге Криса Касперски "вирусы внтури и снаружи". Возможно, эта часть есть в инете отдельно от остальной книги.
serial/key file, на мой взгляд, самая плохая защита. Ее не надо ломать - ее надо просто купить. Одну копию. Если, конечно, серийнийк не генерируется на основе каких-то данных об устанолвенном оборудовании (так сделали разработчики одной из реализаций Smalltalk - Dolphin Smalltalk), что тоже довольно кривой способ.
В общем по п.2 сумбурно, но - что знал =)
--------- Не узнаешь - не попробуешь.
Отвечает: Werewolf
Здравствуйте, Яковлев Сергей Павлович!
procedure TForm1.ButtonClick(Sender: TObject);
procedure SaveToEmF(ACanvas: TCanvas; filename: string);
var
Metafile: TMetafile;
MetaCanvas: TMetafileCanvas;
begin
Metafile := TMetaFile.Create;
try
MetaCanvas := TMetafileCanvas.Create(Metafile, 0);
try
MetaCanvas.CopyRect(Canvas.ClipRect, Canvas, Canvas.ClipRect);
//тут можно задать другой Rect
finally
MetaCanvas.Free;
end;
Metafile.SaveToFile(filename);
finally
Metafile.Free;
end;
end;
begin
SaveToEmF(Canvas, 'C:1.emf');
end;
Ответ отправил: Werewolf (статус: Студент)
Ответ отправлен: 04.09.2006, 14:42
Отвечает: Mexes
Здравствуйте, Яковлев Сергей Павлович!
Насколько я знаю, канва хранит данные изображения в виде растра, а EMF - векторный формат рисунка. Поэтому, напрямую копирование сделать нельзя.
Правда, можно добавлять фигуры к EMF по мере рисования (т. е. рисуя, скажем, прямую, помимо вывода на канву добавлять эту прямую к EMF. Поскольку это уже другой вопрос, подробности опущу. (На случай, если такой вариант неприемлим).
Ответ отправил: Mexes (статус: 2-ой класс)
Ответ отправлен: 04.09.2006, 14:47