|
Вопрос # 275/ вопрос решён / |
|
Как сделать чтобы программа запускалась по паролю. Чтобы пароль задавался в коде программы (програмка исключительно для себя)
 |
Вопрос задал: Pokemonchyk (статус: Посетитель)
Вопрос отправлен: 20 января 2007, 22:08
Состояние вопроса: решён, ответов: 4.
|
Ответ #1. Отвечает эксперт: Сергей Устинов
Здравствуйте!
Самый простой вариант - в файл проекта перед строкой Application.CreateForm(TForm1, Form1); введите:
if InputBox('Внимание!','Введите пароль!','')<>'pass' then exit;
(не забудьте перед этим в Uses добавить модуль Dialogs).
Если же нужно будет пароль при вводе делать со звездочками - проще всего создать отдельную форму, которая будет грузиться первой. В нее Вы будете вводить пароль, если не правильный - закрываете приложение, если правильный - открываете нужную форму.
Удачи
Приложение: Переключить в обычный режим- program Project1;
-
- uses
- Forms, Dialogs,
- Unit1 in 'Unit1.pas' {Form1};
-
- {$R *.res}
-
- begin
- Application.Initialize;
-
- then exit;
- Application.CreateForm(TForm1, Form1);
- Application.Run;
- end.
 |
Ответ отправил: Сергей Устинов (статус: 2-ой класс)
Время отправки: 20 января 2007, 22:36
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Pokemonchyk!
В этом вопросе все зависит от соотношения Ваших умений к необходимой стойкости защиты. Я всегда рекомендую в таких случаях шифровать часть кода программы в файле, а затем расшифровывать в памяти введенным паролем или гаммой, полученной из него. Далее сверяете несколько первых расшифрованных байт с оригиналом и делаете вывод верен пароли или нет. Даже если потенциальный вломщик обойдет этот момент - программа все-равно не будет корректно работать, поскольку часть кода осталась зашифрованна.
Если интересно, могу поделиться рабочим кодом.
Есть еще очень простой и удобный вариант - воспользоваться PE Password Encryptor от SMT - эта малюсенькая программка подобно протектору шифрует часть кода в точке входа и вставляет туда загрушку в виде диалога ввода пароля. Если пароль введен верно - программа нормально запускается.
См. прикреплённый файл. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
Ответ #3. Отвечает эксперт: Alex Van Glukhman
Добрый день!
Создаём отдельную форму для авторизации (см. код ниже)
При создании главной формы приложения на событие OnCreate пишем вызов формы авторизации
FPass:=TFPass.Create(Application);
try
if FPass.ShowModal=mrOk then ;
finally
FPass.Free;
FPass:=nil;
end;
Удачи
Приложение: Переключить в обычный режим- unit uPass;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, DB;
-
- type
- TFPass = class(TForm)
- LLogin: TLabel;
- LPass: TLabel;
- ELogin: TEdit;
- EPass: TEdit;
- BGo: TButton;
- BExit: TButton;
- procedure BGoClick(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure ELoginChange(Sender: TObject);
- procedure BExitClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- FPass: TFPass;
- FlagClosed: Boolean = false;
- Attempt: Integer = 0;
-
- implementation
-
- {$R *.dfm}
-
- procedure TFPass.BExitClick(Sender: TObject);
- begin
- Application.Terminate;
- end;
-
- procedure TFPass.BGoClick(Sender: TObject);
- begin
- if (ELogin.Text='USER') AND
- (EPass.Text='PASSWORD') then
- begin
- FlagClosed:=true;
- ModalResult:=1;
- end
- else
- begin
- if Attempt=2 then
- begin
- ModalResult:=1;
- Exit;
- end;
- inc(Attempt);
-
- ELogin.SetFocus;
- end;
- end;
-
- procedure TFPass.ELoginChange(Sender: TObject);
- begin
- if (ELogin.Text<>'') AND (EPass.Text<>'') then BGo.Enabled:=true
- else BGo.Enabled:=false;
- end;
-
- procedure TFPass.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- if not FlagClosed then Application.Terminate;
- end;
-
- end.
 |
Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 21 января 2007, 12:02
Оценка за ответ: 5
Комментарий к оценке: Здравствуйте! Большое спасибо за ответ. Все работает {с даного примера я также понял что все компоненты лучше называть своими именами, а не Edit1,Edit2,...а потом сидеть и голову ламать где что :)}
Если не трудно, то подскажите еще где надо покопаться чтобы звездочками показывало пароль (я думаю это как-то звязано с MaskEdit)
Я конешно могу и монитор выключать на если доведется ввести пароль при посторонних, но все же... :)
|
Ответ #4. Отвечает эксперт: min@y™
Чтоб пароль показывало звёздами - поставь свойство Edit.PasswordChar := '*';.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 22 января 2007, 08:20
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 22 января 2007, 17:08; участников в обсуждении: 4.
|
mvp (статус: 4-ый класс), 20 января 2007, 23:09 [#1]:
2 Сергей Устинов
мда - злая защита Читаем о хеш-функциях
P. S. Без обид, но такая защита - ф топку.
P. P. S. 2Pokemonchyk - если прога для себя, то зачем пароль?
P. P. P. S. Всё сказанное - ИМХО
|
|
Сергей Устинов (статус: 2-ой класс), 20 января 2007, 23:19 [#2]:
2mvp Я не спорю, что это очень просто, но не буду же я вставлять, например, модуль для создания md5('pass') - человеку идея понятна, а нужна будет более сильная защита - будет копать в сторону шифрования, к тому же пользователь говорит, что программа для себя... (хотя зачем пароль тогда... от младшей сестры чтоли ... )
|
|
Pokemonchyk (статус: Посетитель), 20 января 2007, 23:22 [#3]:
Программа как ра и содержит пароли универсальные мои.
При нажатии некоторых кнопок - пароль копируется в буфер, и я вставляю его где надо (12 символов).
Но если кто-то скопирует и вставит ето в текстовый файл- пароль налицо
|
|
Pokemonchyk (статус: Посетитель), 21 января 2007, 00:02 [#4]:
Сергей Устинов, если можно вышлите мне на почту
файлы, которые использовались. Ибо чето у меня неладное из строкой №5
"Unit1 in 'Unit1.pas' {Form1};"
|
|
Сергей Устинов (статус: 2-ой класс), 21 января 2007, 00:08 [#5]:
Создаете стандартный проект (Делфи 7)
Вместо внутренности проекта вставляете приложение (не вместо внутренности модуля, а вместо внутренности файла *.dpr проекта). И все. Больше изменений не было.
|
|
Pokemonchyk (статус: Посетитель), 21 января 2007, 00:53 [#6]:
если чесно, никогда еще не открывал блокнотом *.dpr...
з.ы.
все работает. я довольный,пока-что с меня этого хватит. Спасибо!
|
|
Сергей Устинов (статус: 2-ой класс), 21 января 2007, 00:59 [#7]:
его можно открывать не блокнотом, а, например нажав Ctrl+F12 (в делфях) и выбрав там Progect1.
|
|
Alex Van Glukhman (статус: 7-ой класс), 21 января 2007, 19:38 [#8]:
У компонента TEdit есть свойство PasswordChar в данном случае PasswordChar:='*';
|
|
Pokemonchyk (статус: Посетитель), 21 января 2007, 19:47 [#9]:
Спасибо!
И вообще, СПАСИБО ВСЕМ, кто уделил мне немного времени
|
|
mvp (статус: 4-ый класс), 22 января 2007, 17:08 [#10]:
2 Сергей устинов: извините, - погарячился - видно, что Pokemonchyk и этого достаточно.
Ещё раз примите мои извинения
|
31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|