Антивирусные компании столкнулись с новой проблемой: хакеры встраивают в вирусы защиту от работы в среде виртуальных машин, используемых для безопасного анализа вредоносного кода. Такие "поумневшие" вирусы ищут процессы или оборудование, специфичные для виртуальной машины, и отказываются "работать" – заражать компьютер и рассылать себя по Сети. Как сообщил аналитик Ленни Зельцер из центра Internet Storm (ISC) при институте SANS, 3 из 12-ти вирусов, пойманных недавно с помощью компьютеров-ловушек, отказались запуститься в VMware. Исследователи запускают пойманный вредоносный код на виртуальных машинах, чтобы, во-первых, избежать заражения системы при анализе и, во-вторых, протестировать работу этого кода и эффективность его удаления под разными версиями операционных систем на одном компьютере. Теперь же, по словам Зельцера, для полноценного анализа червя или троянца специалистам приходится искать и затирать код, отключающий работу в виртуальных машинах, что удлиняет время, необходимое для анализа. Возможно и более универсальное решение – модификация кода виртуальной машины так, чтобы вирусы не могли находить характерные для нее признаки. "Тот факт, что вирусописатели встраивают в свой код различные методы противодействия дизассемблированию, не является новостью, - говорит Рамиль Яфизов, ведущий технический консультант Symantec - Для наших лабораторий это не является проблемой еще и потому, что вне зависимости от степени защищенности этого кода, подход всегда один – рассмотреть функционал и выпустить «противоядие». И так как вовсе не обязательно, что все вирусы запускаются на виртуальных машинах, это помогает в данном конкретном случае. Есть и другие, перечисленные ранее подходы для решения данной проблемы". (ЦЕ) хакер.ру
боян. Code: #include <stdio.h> int main () { unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3"; *((unsigned*)&rpill[3]) = (unsigned)m; ((void(*)())&rpill)(); printf ("idt base: %#x\n", *((unsigned*)&m[2])); if (m[5]>0xd0) printf ("Inside VM\n", m[5]); else printf ("Not in VM.\n"); return 0; }