:: 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 :.
|
При использовании материала - ссылка на сайт обязательна
|
|