|

Борьба за выживание
Эдайн Гхэллах
Спецвыпуск 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
|