Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #35, ОКТЯБРЬ 2003 г.

Борьба за выживание

Эдайн Гхэллах

Спецвыпуск Xakep, номер #035, стр. 035-060-3


Практика. Anti*-tricks

Когда вирус попадает в антивирусную контору, его начинают мучить всеми возможными способами. Его отлаживают, дизассемблируют, натравливают ему кучу маленьких файлов-приманок и еще много всего. Поговорим о том, как защитить вирус от подобных издевательств.

Использование SEH – один из лучших и универсальных способов. Во-первых, эмулятор антивируса на таком коде обламывается, во-вторых, отладчики тоже обламываются, причем все. Как ты знаешь, SEH – структурный обработчик ошибок. Мы можем назначить свой обработчик, и при возникновении любой ошибки он будет вызван. Удобно конечно, но смысл способа не в этом.

Я приведу пример, и ты сам поймешь:

call .init_seh

mov esp,[esp+8]

pop dword [fs:0]

pop eax

; здесь код вируса

.init_seh:

push dword [fs:0]

mov [fs:0],esp

xor ebx,ebx

div ebx ; вызываем ошибку

Человеку, конечно, понятно, что при возникновении ошибки управление передается на код вируса, который выполняет здесь роль SEH-обработчика, но вот эмулятору или отладчику до такого понимания ой как далеко.

Можно определять наличие отладчика “легальным” способом. Для этого существует соответствующая API функция – isDebuggerPresent. Применять ее просто:

call isDebuggerPresent

or eax,eax

jnz _we_under_debug

Этот метод прекрасно работает для WDasm или OllyDbg, но, конечно же, он бесполезен в борьбе с SoftIce'ом.

Можно очень легко определить, установлен ли в системе SoftIce (и так же легко это обойти). Достаточно попробовать открыть драйвер айса. Имя драйвера: SICE, SIWVID для Win9x, NTICE для WinNT.

sice9x db '\\.\SICE'

...

push sice9x

call [CreateFileA]

cmp eax,-1

jne SoftICE_Detected

Если открытие было успешным – значит, SoftIce установлен. Параллельно можно искать подозрительные записи в реестре - HKEY_LOCAL_MACHINE\Software\NuMega\SoftICE, и файлы, типа loader32 или sivwid.386. Для обмана дизассемблеров также есть несколько приемов. Например, вот такой хитрый прыжок:

jmp .ntdbg+2

.ntdbg:

dw 0xc606

..........

IDA таким простым триком не обмануть, но большинство дизассемблеров выдают в этом месте всякий бесполезный мусор. Чего и требовалось добиться.

Заключение

Как ни старайся, полностью не защитишься от антивирусников. Как ни пытайся, не создашь абсолютно недетектируемый вирус. Вирусы и антивирусы – две стороны одной медали. И не будет одного без другого. Но это уже философия.

Сейчас, если вирус не является полиморфным, его шансы выжить равны нулю.

На распространение вируса требуется какое-то время. На написание “лечилки” для вируса также нужно время. Причем чем меньше первое время, и больше второе – тем лучше.

Назад на стр. 035-060-2  Содержание  Вперед на стр. 035-060-4