Скрин-сейвер своими руками (Delphi) INATTACK.RU :: Архив документации для хакера
Многие думают, что вирусов в скрин-сейверах быть не может. Это не совсем так. Ведь скрин-сейвер - обычная программа с расширением *.scr. А доказательством этого есть следующий пример: И так, запускай Delphi, дави крысой File>New>Application.Далее делаем так, чтобы нашу форму никто не мог «перекрыть». Для этого для свойства формы FormStyle устанавливаем значение равное “fsStayOnTop” (без кавычек соответственно). Для свойства “Color” (всё той же формы) устанавливаем значение “clBlack”, для свойства “BorderStyle” значение bsNone и для свойства “WindowState” устанавливаем значени равное “wsMaximized”. (*Все выше указанные действия можно было сделать или в инспекторе объектов или программно. Я это сделаю программно *).
Идем дальше. Теперь нам понадобятся 5 процедур:
1. FormСreate –Скрываем курсор мыши и производим несколько. настроек 2. OnTime –здесь код самой заставки 3. OnMouseMove-отлавливаем движение мыши. 4. FormHide –Показываем Курсор. 5. TimeToExit –Процедура для обработки сообщений.
Опиши в разделе var твоего Unit’a новую переменную с именем crs типа TPoint.В ней мы будем хранить координаты мыши во время запуска проги. Расположи на форме компонент Timer и создай обработчик события OnTimer для него, затем напиши там следующую строчку:
Суть этой строки такова: в произвольном порядке на форме рисуется символ ‘@’ с помощью процедуры TextOut, которая имеет 3 значения: 1-ое: горизонтальное положение, 2-ое: вертикальное положение и 3-я: текст для вывода.
В обработчике события OnСreate для формы напиши следующий код:
RanDoMiZe; //Устанавливаем интервал для таймера Timer1.Interval:=300; //Устанавливаем обработчик событий для сообщений Application.OnMessage:=TimeToExit; //Прячем курсор мыши ShowCursor(False); with Form1 do begin //Выставляем размер выводимого текста Canvas.Font.Size:=17; //Выставляем имя текста Canvas.Font.Name:='COmicSansMs'; //Выбираем цвет текста Canvas.Font.Color:=clRed; //Получаем позицию курсора GetCursorPos(crs);
{Настраиваем форму}
//Скрываем Заголовок BorderStyle:=bsNone; //Позиция формы "поверх всех" FormStyle:=fsStayOnTop; //Цвет фона для формы Color:=clBlack; //Растягиваем на весь экран WindowState:=wsMaximized; end;
В радела interface опиши следующую процедуру:
Procedure TimeToExit(var Msg : TMsg; var Handled : boolean);
Затем кликай по ней правой кнопкой и в появившемся меню выбери “Complete class at cursor”.
В появившейся процедуре напиши следующие.
//ЕСли полученно сообщени if (Msg.message = WM_KEYDOwn) //Нажата кнопка на клавиатуре or (Msg.message = WM_LButtonDown)//Нажата левая кнопка мыши or (Msg.message = WM_RButtonDown)//..правая or (Msg.message = WM_SysKeyDown)//Нажата системная кнопка or (Msg.message = WM_MButtonDown)//Нажата средняя кнопка мыши
then close;
Едем дальше. Создай обработчик события OnMouseMove для формы, затем напиши там следующий код:
if (abs(crs.X-X) > 5) or (abs(crs.Y-Y) > 5) then close;
Здесь мы закрываем окно только мосле того, как мышка двинулась больше чем на 5 пикселей всторону.
Создай обработчик события OnHide для формы, затем напиши там следующий код:
//Запрещаем сообщения Application.OnMessage:=nil; //Возращаем курсору видимость ShowCursor(True);
Как вы видите, скрин-сейвер - обычная программа. Так что вмонтировать сюда какой-нить вирь-код не составит трудности.