| |
Практическое руководство по
компьютерным приколам
У меня компьютер так глючит, что на нем
даже никакой вирус не запустится…
Кто из нас никогда не сталкивался с жестким
оккупационным режимом своего/соседского
железного друга? Наверняка тот, у кого этого
самого друга aka компьютера отродясь не было.
И, глядя, как кто-то другой, а не ты, гоняет
синюю ящерку по монитору, пуская пузырями
сопли и повизгивая от удовольствия, так и
хочется прогнать конкурента, дабы заняться
настоящим делом (Q3, Diablo, Heroes:)). Однако,
согласитесь: гораздо интереснее будет, если
сам оккупант сбежит от полного вирусами
компьютера, как от чумы. Нет вирусов,
говорите… А для чего тогда, по-вашему, эта
статья? Сейчас будем из вашей машины делать
некое подобие профессионального
глюкодрома.
Инструменты:
Borland Delphi 6.0 (1 шт.)
Компьютер (1 шт.)
Руки (2 шт.)
Голова (1-1,5 шт.)
1. Фундамент
Вначале было слово… И слово было 2 байта.
Итак, прежде чем приступить к описанию
самих пакостей, нужно обеспечить нашей
программе несколько вещей:
1. При активации программа должна быть
невидимой.
2. Через определенный период программа
должна выполнять какое-либо действие.
Для разработки всего этого счастья была
выбрана среда Borland Delphi за понятный
интерфейс и простоту использования.
Несмотря на это, все нижеприведенное можно
с таким же успехом реализовать и в любом
другом Win32 языке программирования,
работающем с WinApi. Как говорится, было бы
желание.
Запускаем Delphi. После красивого окошка с
логотипом перед нами появляется сама среда
разработки. Вверху находятся диалоги
открытия/закрытия файлов и панель
компонентов (вкладки Standart, Additional и т.д.)
Слева находятся Дерево Объектов (Object TreeView) и
Инспектор объектов (Object Inspector). Чуть правее
от них расположена наша главная форма. Для
начала сделаем так, чтобы она (форма) при
запуске приложения не была видна. Для этого
просто сделайте двойной клик на форме и в
открывшемся окошке с кодом введите строчку:
Application.ShowMainForm:=false;
Вновь возвращаемся к форме (F12) и помещаем на
нее из палитры компонентов — вкладка System
компонент, похожий на маленькие часики. Он
называется Timer и позволяет через
определенное количество времени
передавать управление вашему коду. Выделим
его кликом и посмотрим на инспектор
объектов. Видите значение Interval=1000? Это
значит, что код, записанный в свойстве OnTimer,
будет вызываться каждые 1000 мсек, т.е. каждую
секунду. Т.е., если вы хотите изменить
интервал, через который будет срабатывать
ваш прикол, просто измените свойство Interval.
Рекомендую для первой пакости установить
его значение в 4000. Делаем двойной клик по
компоненту Timer и вновь попадаем в окно кода.
После проделывания всего вышеприведенного
у вас там должен быть следующий код:
unit Unit1;
interface
uses
Windows, Messages, Sys-Utils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Se nder: TObject);
procedure Timer1Timer (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Procedure TForm1.FormCre-ate(Sender: TObject);
begin
Application.ShowMainForm:= false;
end;
procedure TForm1.Timer1Ti-mer(Sender: TObject);
begin
{Именно здесь мы будем писать код,
отвечающий за сами шутки}
end;
end.
Если все правильно, значит, фундамент
заложен хорошо, и можно с чистой совестью
переходить к следующим этапам создания
нашего приложения. Весь следующий код будет
писаться в обработчике OnTimer, поэтому очень
рекомендую после создания основы сохранить
ее как хороший шаблон для последующих
довесок.
2. Тихо сам с собою я веду беседу...
Ну вот почему, когда ты говоришь с Богом —
это молитва, а когда он с тобой — это
шизофрения?
Вы с компьютером когда-либо говорили? А он с
вами? Ничего, сейчас заговорит как
миленький. Есть довольно много
пользователей, которые для набора
небольших документов используют
встроенный в ОС Windows текстовый редактор "Блокнот".
Модификацией этой маленькой и безобидной
программы мы сейчас и займемся.
Перейдите в окно кода (F12) и найдите там
строчку из одного слова Var. Это слово
является сокращением от Variables, и после него
описываются все переменные, которые вы
хотели бы задействовать в своей программе.
Под строчкой Form1: TForm1; напишите:
Mas:array[1..5] of pchar; {здесь мы разместим 5 строк,
которые должен будет сказать наш "Блокнот"}
h:hwnd; {эти 2 переменные нужны, чтобы
адресовать текст именно в окошко "Блокнота"}
dc:hdc;
i:byte=1; {переменная для переключения между
выводимыми строками}
В процедуре TForm1.FormCreate добавьте строчки,
чтобы она выглядела так:
Procedure TForm1.FormCreate (Sender: TObject);
begin
{1}Application.ShowMainForm:=false;
{2}mas[1]:='Привет';
{3}mas[2]:='Ну чего ты так уставился?';
{4}mas[3]:='Блокнота говорящего не видел?';
{5}mas[4]:='Может ты и терминатора не смотрел?';
{6}mas[5]:='Ну и ладно. Все. Молчу.';
end;
Затем модифицируем процедуру TForm1.Timer1Timer
следующим образом:
procedure TForm1.Timer1Timer (Sender: TObject);
begin
{7}h:=FindWindow(nil,'Безымянный — Блокнот');
{8}if h<>0 then begin
{9}dc:=GetDC(h);
{10}textout(dc,5,i*15,mas[i],length(mas[i]));
{11}if i+1<6 then inc(i);
end;
end;
Проверим работоспособность. Скомпилируйте
программу (F9). Ваше окошко пропадет (не зря
же мы его скрывали), но сама программа будет
оставаться в памяти и терпеливо выжидать
свою жертву. Теперь запустите Пуск —
Программы — Стандартные — Блокнот и
наслаждайтесь:). Завершить работу вашего
приложения можно нажав Ctrl+F12.
Теперь немного теории (нужно же хоть
чуточку представлять, что ж вы натворили-то:)).
Строка {1}, как было сказано ранее, прячет
наше приложение от глаз пользователя (но не
от Ctrl+Alt+Del). Строки {2} — {6} описывают то, что
будет печататься в нашем "Блокноте".
Модифицируйте их на свое усмотрение. Строка
{7} получает дескриптор окна "Блокнота"
по его заголовку (это надпись вверху окна на
синем фоне). Поэтому программа будет
работать только с "Блокнотом", в
который не загружен текстовый файл. Строка
{8} проверяет, найдено ли это окно. Если да, то
работают строки {9}-{11}. В строке {9} мы по
дескриптору окна "Блокнота" получаем
его контекст устройства (белая область,
куда будут выводиться надписи). В строке {10}
мы выводим саму надпись в "Блокноте".
Надпись хранится в массиве mas[i] — их мы
задавали выше. Строка {11} проверяет, будет ли
переменная i при увеличении лежать в
пределах [1-5], и увеличивает ее для
отображения в следующий раз новой строки.
Сохраним программу (Ctrl+S). Вам придется
сохранить два файла: файл с кодом (имя
давайте любое) и имя проекта (совпадает с
именем *.exe-файла). Проект нужно называть так,
чтобы даже обнаружив программу противник
решил, что это системный файл. Примеры:
winsys32.exe, kern32.exe и т.д. Теперь достаточно
запустить *.exe-файл (лежит там, куда вы
сохраняли проект) и спокойно ждать, когда
жертва запустит "Блокнот". В случае,
если противник попытается отвечать
компьютеру, можно смело вызывать санитаров
и радостно ждать устранения "сумасшедшего,
пытающегося достойно ответить
Искусственному Интеллекту":).
3. Скажи пиратам нет!
Крупная корпорация ищет хакеров и пиратов
для сотрудничества. Наш сайт: www.microsoft.com.
Не сомневаюсь, что на компьютере-жертве
стоит ОС Windows, которой до лицензии, как Биллу
Гейтсу до моей стипендии:(. Но, поскольку
бедного дядю Билла все ругают и обижают,
нужно сделать хоть одно доброе дело на
благо его благ:). А именно — напоминать о
том, что Windows нужно регистрировать, каждые 5
минут. Посему снова загружаем наш фундамент,
устанавливаем значение Interval в 300000 (в
инспекторе объектов для объекта Timer) и
дописываем пару строчек в процедуре
TForm1.Timer1Timer:
Procedure TForm1.Timer1Timer (Sender: TObject);
begin
if GetDesktopWindow<>0 then begin
MessageBox(GetDesktopWindow,'Срок действия лицензии
вашей системы истек.', 'Windows XP', MB_OK);
end;
end;
И каждые 5 минут на бедного мальчика/девочку
будет вываливаться веселое окошко.
Опять немного теории. В этой программке все
гораздо проще. Все взаимодействие с
системой осуществляется по дескриптору
окна, которое есть почти всегда. Это окно
— ваш рабочий стол. Получить его
дескриптор можно с помощью функции GetDesktop
Window.
А процедура MesageBox выводит само сообщение,
где сначала выводится текст послания ('Срок
действия лицензии вашей системы истек'), а
потом заголовок окна ('Windows XP'). Запускаем…
наслаждаемся:).
4. Кофе подан, сэр!
Моя женя такая заботливая... Выйдешь ночью
водички хлебнуть... Возвращаешься, а кровать
уже застелена.
Почти все компьютерщики пьют кофе.
И не потому, что напиток этот вкусный такой,
а потому, что спать уж больно не хочется,
пока синяя ящерка еще пару уровней не
одолеет.
А как еще напомнить о кофе человеку,
сидящему перед монитором, как не выдвинуть
самую популярную под него подставку —
CD-ROM.
Можно даже диск у пользователя выпросить. К
тому же, как и в предыдущих случаях, код
весьма прост.
Грузим наш фундамент и выставляем
компоненту Timer значение Interval в 600000 (10 мин).
Затем в обработчике OnTimer пишем:
procedure TForm1.Timer1Ti-mer(Sender: TObject);
begin
MessageBox(GetDesktopWindow,'Слышь...Дай диска пожевать', 'CD-ROM',
MB_OK);
mciSendString('Set cdaudio door open wait', nil, 0, handle);
end;
Ищем в программе строчку, начинающуюся со
слова Uses (искать вверху кода).
После этого слова в Delphi описываются имена
подключаемых модулей. Для работы программы
нужно в конце дописать MMSystem;
Компилируем (F9) и... каждые 10 минут у бедного
дяди будет выскакивать нижеприведенное
окошко, просящее диск, и открываться привод
CD-ROM'а.
Для закрытия CD-ROM'а можно добавить одну
строчку в нашу программу:
…
MessageBox(GetDesktopWindow,'Слышь...Дай диска пожевать', 'CD-ROM',
MB_OK);
mciSendString('Set cdaudio door open wait', nil, 0, handle);
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
…
Получите удовольствие от кормежки своего
железного друга пиратскими копиями
программ.
Заключение:
Если вы сами знаете хорошие способы
хорошей шутки или желаете узнать о других
способах прикола, пишите мне, и я
обязательно постараюсь рассказать о них в
следующий раз.
Паша Либер aka Fireangel,
Fireangel@tut.by
© компьютерная
газета
Powered by X-ray.Издательство"Самопал"©2004
|