Практика
Дополнительная защита для Windows?

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика


Недавно нашел в интернете исходник программы, описание к которой меня очень заинтересовало. Вот что было сказано в описании:

Программа накладывает на вынды (с XP/2000 НЕРАБОТАЕТ!) дополнительный слой защиты, для доступа к компу нужен пароль, обойти невозможно (по крайней мере пока не удалось ни кому).

Начало многообещающее. Мне сразу захотелось разобраться, о чем идет речь, и почему даются такие гарантии безопасности. Итак, данная программа прописывается в автозапуск и запускается при старте системы...

С этого момента остановимся подробнее на механизме защиты, который предлагает нам автор. Мы не будем просто копаться в коде, а на его основе напишем свою программу. Пример немного упрощен, но если вам интересно посмотреть оригинал, его можно скачать в конце статьи.

uses IniFiles;

// Опишем функцию RegisterServiceProcess из Kernel32.dll
function RegisterServiceProcess( dwProcessID, dwType: Integer ): Integer; stdcall;
   external 'KERNEL32.DLL';

// Необходимые переменные
var
  Form1: TForm1;
  Int: longint;
  TaskBar: HWND;
  WinDir: array[0..255] of Char;

procedure TForm1.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
  Wallpaper: string;
  bm: TBitmap;
begin
   // Получаем путь к Windows
   GetWindowsDirectory( WinDir, SizeOf( WinDir ) );

   // Отключаем Alt+Tab и Ctrl+Alt+Del
   SystemParametersInfo( 97, word( true ), @Int, 0 );
   // Находим TaskBar...
   TaskBar := FindWindow( 'Shell_TrayWnd', nil );
   // ...и убираем его
   ShowWindow( TaskBar, SW_HIDE );
   // Убираем программу из списка
   // "Завершение работы программы"
   RegisterServiceProcess( GetCurrentProcessID, 1 );

   // Меняем стиль формы
   BorderStyle := bsNone;
   // Растягиваем форму на весь экран
   Left := 0;
   Top := 0;
   Width := Screen.Width;
   Height := Screen.Height;
   // Выравниваем панель
   Panel1.Left := Width div 2 - Panel1.Width div 2;
   Panel1.Top := Height div 4;

   // Смотрим, что творится о обоями на рабочем столе
   Ini := TIniFile.Create( WinDir + '\win.ini' );
   Wallpaper := Ini.ReadString( 'Desktop', 'Wallpaper', text );
   if Wallpaper = '(None)' then
      Self.Color := clBackground
   else
   begin
      bm := TBitmap.Create;
      bm.LoadFromFile( Wallpaper );
      if ( bm.Width < Image1.Width ) or ( bm.Height < Image1.Height ) then
         Self.Color := clBackground
      else
         Self.Image1.Picture.LoadFromFile( Wallpaper );
   end;
end;

Не забываем вернуть все на место по завершении программы.

procedure TForm1.FormDestroy(Sender: TObject);
begin
   // Вертаем все на место
   SystemParametersInfo( 97, word( false ), @Int, 0 );
   ShowWindow( TaskBar, SW_SHOW );
end;

Еще необходимо отключить Alt + F4. Напишем процедуру для Form1.FormKeyDown, а затем, для всех элементов, которые могут получить фокус, в свойстве KeyDown выберем FormKeyDown.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   // Отключаем Alt+F4
   if ssAlt in Shift then
      if Key = VK_F4 then
         Key := 0;
end;

Для "злоумышленника", не знаюшего пароль, мы предусмотрим возможность завершения работы компьютера.

procedure TForm1.Button2Click(Sender: TObject);
begin
   // Вырубаем винды к черту
   ExitWindowsEx( EWX_Force or EWX_PowerOff or EWX_ShutDown, 0 );
end;

С проверкой правильности кода мы мудрить не будем (в данном случае это не играет принципиальной роли). В качестве пароля выберем любое слово, например 'test'.

procedure TForm1.Button1Click(Sender: TObject);
begin
   if Edit1.Text = 'test' then
      Close
   else
   begin
      Edit1.Clear;
      Edit1.SetFocus;
   end;
end;

Вот и все. Теперь несколько слов о надежности защиты. На первый взгляд программа весьма надежна, отключено все, что можно отключить - Alt + F4, Alt + Tab, Ctrl + Alt + Del. Если программу немного подправить, то можно убрать и курсор мыши. Ну что тут может сделать обычный пользователь? Но не все так хорошо. Все дело в том, что программа прописывается в автозапуск и стартует оттуда. Весь фокус в том, что автозапуск можно отключить. Для этого достаточно держать клавишу Shift в начале загрузки Windows, или просто загрузиться в "Режиме защиты от сбоев". Вот и получается, взломать возможно не получится, но обойти можно.

.: Пример к данной статье :.
.: Пример от LaG :.


При использовании материала - ссылка на сайт обязательна