Борьба за выживание Эдайн Гхэллах Спецвыпуск 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 таким простым триком не обмануть, но большинство дизассемблеров выдают в этом месте всякий бесполезный мусор. Чего и требовалось добиться. Заключение Как ни старайся, полностью не защитишься от антивирусников. Как ни пытайся, не создашь абсолютно недетектируемый вирус. Вирусы и антивирусы – две стороны одной медали. И не будет одного без другого. Но это уже философия. Сейчас, если вирус не является полиморфным, его шансы выжить равны нулю. На распространение вируса требуется какое-то время. На написание “лечилки” для вируса также нужно время. Причем чем меньше первое время, и больше второе – тем лучше. |