Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 587
от 09.09.2006, 16:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 372, Экспертов: 65
В номере:Вопросов: 4, Ответов: 6


Вопрос № 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
Скоро школьная конференция. Можете предложить идеи для проекта?
Отправлен: 03.09.2006, 20:26
Вопрос задал: Томша Павел (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: 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 сумбурно, но - что знал =)
---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 04.09.2006, 06:22


Вопрос № 54.238
Люди! Как можно скопировать содержимое Canvas'а (скажем из TImage)
в EMF? Срочно надо!!!
Отправлен: 04.09.2006, 09:46
Вопрос задал: Яковлев Сергей Павлович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное