▄▄ █ ▀▀▀ Virus Magazine █ Box 176, Kiev 210, Ukraine IV 1998 ▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀ █▀▀▀▀▀▀▀█ ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█ ▌ █ ▄▀█ █ ▄▀▀ █▄▄ █ █ ▀▀█ █ █ █ █ █▀ █▀ █ █ █▀ █ █ █ █ █ █ █ █ █ █ █ ▄▄█ █ █ ▐ ▐ ▐ ▐▄▄ ▐▄▄ ▐ ▐▄▄ ▐▄▀ ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄ █ █ █▄▄ █ ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █▄▄▄▄▄▄▄█ (C) Copyright, 1994-98, by STEALTH group WorldWide, unLtd. КАК УБРАТЬ БОЛЬШИНСТВО ФЛАГОВ TBSCAN'a by Havoc The Chaos Однажды, пытаясь убрать все возможные флаги ThunderByte AV из одного из моих вирусов, я начал интересоваться способами, с помощью которых можно обойти как можно больше флагов. Я начал с флагов, которые я убрал сам, затем добавил флаги, способы подавления которых были предложены другими людьми. В результате я хотел получить документ, который бы как можно более полно описывал флаги TBSCAN'a. Весь нижеизложенный текст написан мною лично, кроме мест где это специально оговорено. F Подозрительные функции работы с файлами; нижеприведенный код может быть способен инфицировать файлы. mov ax, 5701h int 21h ; флаг 'F' mov ax, 5700h inc al int 21h ; без флага mov ax, 4301h int 21h ; флаг 'F' mov ax, 4300h inc al int 21h ; без флага т.е. любоой код, восстанавливающий первоначальное состояние файла, может вызвать появление флага. E Нефиксированная точка входа; данный код может вызываться из любого места файла. Весьма специфично для вирусов, не так ли ? call $+3 pop bp ; флаг 'E' call $+3 int 3 pop bp ; без флага B Возврат в точку входа; данный код отдает управление жертве после своего исполнения. Очень часто встречается в вирусах. mov ax, 100h jmp ax ; флаг 'B' mov ax, 200h shr ax, 1 jmp ax ; без флага S Код содержит процедуру для поиска исполняемых (.COM or .EXE) файлов. comspec db '*.COM',0 ; здесь появится флаг comspec db ').COM',0 ; без флага, затем кусочек кода inc byte ptr [bp+offset comspec] lea dx, [bp+comspec] int 21h dec byte ptr [bp+offset comspec] ; изменит маску поиска с ').COM' на '*.COM'. Ну я думаю, что вы себе это представляете :) T Некорректное время. Некоторые вирусы используют это для пометки зараженных файлов. Установка года больше чем 2000 или секунд больше чем 59 не вызовет появление данного флага. Z Определение типа фала; данный код пытается определить, является ли файл EXEшником, или же это COM-файл.Вирусам необходимо знать это для заражения программ. cmp word ptr [bp+buffer], 'ZM' ; отмечено флагом ! cmp word ptr [bp+buffer], 'MZ' ; отмечено флагом ! cmp byte ptr [bp+buffer], 'Z' ; без флага cmp byte ptr [bp+buffer], 'M' ; без флага G Мусорные инструкции. Код содержит в себе инструкции, которые теорети- чески могут использоваться только для двух целей - расшифровки тела вируса или запутывания вирусных сканеров. Я смог добиться появления этого флага только используя A86. Когда я откомпилировал тот же вирус с помощью TASM'а (в 2 прохода), то данный флаг больше не появлялся. @ Появление в коде опкодов, которые не могут быть сгенерированы асемблером, но могут быть сгенерированы каким-либо мусорным генератором. Вот что писал по этому поводу Qark из VLAD: "Возьмем для примера инструкцию 'OR CX,CX'. Она может быть представлена двумя способами: db 09h,0c9h or db 0bh,0c9h Первая комбинация байт вызовет появление флага, вторая же - нет. TBSCAN абсолютно верно поступает в этой ситуации, т.к. первый вариант 'or cx,cx' никогда не может быть получен в результате работы компилятора" Другими словами, когда вы будете писать свой mutation engine, НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ДЕБАГЕР ДЛЯ ПОЛУЧЕНИЯ ОПКОДОВ!. Для этой цели лучше использовать TASM (или чего-то в этом роде :) Когда я тестировал собственный engine, TBSCAN начинал ругаться. Я прочитал вышенаписанный текст, и использовал дебагер для получения опкода 'or cx,cx'. Опкод выглядел как 09C9h. В результате работы компилятора мы бы получили 0BC9h. U Вызоов недокументированного прерывания/функции ДОС.В принципе, обычная программа может быть настолько извратно написана, но скорее всего с помощью нижеприведенного кода вирус проверяет свое присутствие в памяти. Ссылка на : Qark/VLAD mov ax, 6e00h ; Здесь все в порядке. int 21h mov ax, 6f00h ; Тут появится флаг. int 21h mov ax, 09191h ; Здесь все в порядке. int 13h mov ax, 09191h ; Тут появится флаг. int 0b6h A Подозрительная работа с памятью. Данный код использует нестандартный способ для распределения памяти. Ссылка на: Qark/VLAD cmp byte ptr [0], 'Z' ; Работа напрямую с MCB. ? Несовместимый (?) заголовок EXE-файла. Это может быть вирус, но также может быть и баг. Кто-нибудь может что-то сказать по этому поводу ? Я знаю только, что если значения в заголовке по смещениям 10-18 больше чем 50, то это вызовет появление данного флага. Как я понимаю, это не есть контрольная сумма. В файле, при проверке которого появился данный флаг, я вообще не заметил ничего необычного. Стек не был нечетным, распределение памяти было корректным, точка входа CS:IP также была правильной. L Код перехватывает функцию загрузки программы. Может быть вирусом, который заражает файла при запуске. Перехват функции 4Bh 21 инта будет вызывать появление данного флага. Гораздо лучшей идеей для резидентных вирусов будет заражение файла при закрытии. M Данный код может резидентно остаться в памяти. mov word ptr ds:[21h*4], offset int21 mov ds:[21h*4+2], es ; появляется флаг Прямые манипуляции с векторами прерываний всегда вызовут появление данного флага.Способ обойти это - трассировка, сплайсинг и затем вызов оригинального 21 инта для собственных нужд. Или вы делаете так, или получаете флаг :) Вот, в принципе, и все, что я хотел рассказать по поводу флагов TBSCAN'a. Многие люди, увидев такое количестов анти-Thunderbyte информации, вероятно подумают, что все вышеизложенное было написано мною с целью облажать TBSCAN. Это не так. Я хочу сказать, что это _ДЕЙСТВИТЕЛЬНО ХОРОШИЙ_ программный продукт, не лишенный, впрочем, некоторых недостатков. C'est la vie. Я хочу поблагодарить Qark'a за предоставленную информацию по флагам, также я хочу поблагодарить Dark Angel'a из Phalcon/Skism за его помощь с флагом '?'. Перевод by ShadowMaker