Статьи - Вірусологія

Assembler Мова Асемблера Статті Низькорівневе програмування для сучасних Уроки Крекінг DirectX/OpenGL &nbsp Оптимізація &nbsp Компілятори & nbsp Вірусологія &nbsp Мережа &nbsp Процесори &nbsp Дослідження програм Інструментарій Вихідники

У книзіІгоря Коваля"Як написати комп'ютерний вірус"(2000 рік, видавництво "Символ-Плюс") розглядається можливість реалізації завантажувального вірусу, здатного функціонувати під Windows. Під можливістю функціонування розуміється здатність програми вражати стандартні цілі - бут-сектора дискет.

Для початку наведемо стандартний алгоритм простого нефайлового вірусу ("form", "stone", ін.). Перехопивши тим чи іншим способом процес завантаження з вінчестера, вірус, якщо він збирається бути активним (резидентним) протягом усього сеансу роботи комп'ютера, використовує перехоплення переривання з метою стежити за зверненнями програм користувача до дисковода і, вибравши момент, перенести своє тіло на дискету в її BOOT-сектор.

Найпростіше, що можна зробити (і було зроблено багато разів) у цьому напрямку – це перехопити сервіс BIOS переривання int 13h, призначене для роботи з жорсткими дисками та дискетами. Такий вибір пояснюється такими причинами:

  • Вірус отримує керування перед/після виконання програм MBR або BOOT активного розділу жорсткого диска, коли доступними для перехоплення є лише сервіси BIOS - операційна система ще не активізувала переривання;
  • Більшість програм користувача при роботі з дискетами опосередковано через сервіси OS викликають int 13h і нескладні перевірки на номер драйву, сектора і доріжки дозволяють легко ідентифікувати момент зараження дискети.

Таким чином, все, що необхідно для функціонування такого класу програм - це OS, яка використовує для роботи з накопичувачами ТІЛЬКИ сервіси, що надаються BIOS.

Однак що ж буде в "поганому" для нас випадку, коли неприємна операційна система з тих чи інших причин не бажає використовувати стандартні засоби для доступу до драйвів, а намагається використовувати свої драйвера?

Причому, перевірка наявність команди jmp short (cmp byte ptr es:[bx],0ebh) начебто й необов'язкова. Це я перевірив, коли поставив типу beep всередину цих перевірок, і стежив, коли він лунає при завантаженні вінди, читанні дискети.

Якоюсь несподіванкою для мене виявилося те, що такий алгоритм працює не тільки у разі форматування! А також і у разі безневинного звернення до дисковода… Навіщо Windows (або ще хтось) читає в цей момент з вінчестера завантажувальний бут-сектор – для мене поки що загадка. Може, параметри які вивіряє?

Чому Windows викликає прехоплювач int 13h, що встановився при завантаженні (з MBR) у всіх своїх завданнях?