| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |