Полиморфные и метаморфные, это значит они самомодифицируются, изменяя себя до неузнаваимости, но я считаю это не кчиму, в моём примере он меняется примерно также но только на стадии компиляции, причём даже размер кода меняется.
>>Так у VMProtect'ора ВМ не заморфлена вроде. а я разве такое говорил? по-моему, полиморф - просто замена функций "синонимами", метаморф - все 4то им не есть, тоесть обратный проход покоду и создание его мутации (дизасм, минимизация кода, пермутация, расширение, сборка), и неважно делается ли это для куска кода, или для всей кодовой секции...
>>Так что они туда пихать будут если она заморфлена будет? сигатуру ВМ, как было с VmProtect и каспером (на 4то я намикал) Хорошо, начнем с основ. Для тех, кто еще не знает что такое метаморфизм, скажу, что суть этой техники заключается в ПОЛНОМ изменении тела вируса без изменения его функциональности. Проще говоря, это то же самое, что и полиморфизм декриптора, но примененный ко всему телу вируса. (C) Billy Belcebu Поверим бывшему мемберу 29a?
>>сигатуру ВМ, как было с VmProtect и каспером (на 4то я намикал) "заморфлен" (с то4ки зрения анализатора; незнаю по4ему ты так любишь это слово) будет ПИ-КОД()!!!, выпоняемый на декектируемой ВМ >>Поверим бывшему мемберу 29a? =) ну раз уж так, то в свою о4ередь процитирую ms-rem (Спец Хакер, №57, стр 58) Полиморф обы4но просто ДОБАВЛЯЕТ в код мусорные инструкции, 4тобы затруднить дизассмеблировние и анализ кода, а метаморф старается целиком ИЗМЕНИТЬ ВИД кода, сохряняя при этом оригинальный алгоритм его работы, для 4его он заменяет интрукции синонимами, состоящими в свою о4ередь из нескольких других инструкций. тоесть, вывод в обеих цитатах делается с упором на ПОЛНОЕ изменение кода, а не на ТЕЛО ВСЕГО ВИРУСА, т.к. цель всех манипуляций полиморфов\метаморфов - обмануть анализатор ТОЛЬКО в тех кусках кода, которые в этом нуждаются, а морфировать весь код не представляется нужным, т.к. это, за4астую, дополнительно такты процессора...
вот примерная структура метаморфного движка: Disassembler -> Shrinker -> Permutator -> Expander -> Assembler имхо неважно где код находится(сохраняется), а важно просто 4тобы входной файл(дамп и т.д.) пропускался 4ерез такую последовательность
Ну это понятно, но я имел ввиду, что сами вызовы ВМ(например у VMProtect'a они выглядят вроде так: push reg/mem puah reg/mem call xxx) тоже можно метморфизировать и за что тогда цепляться АВ?
не пробовал (по крайней мере если виртуализировать темидой, то она будет о4ень не довольна =), 4то понятно), но даже если это и работает, то я намекал на другое - про политику аверей, кидать в блэк саму VM даже не имея других вариантов - имхо неуважительно не только относительно девелоперов, но и коне4ных пользователей
Да только, что друг попросил глянуть файл т.к. он начал палиться каспером как Trojan.Win32.Pakes, оказывается он был просто запакован приватным пакером, который наверное или вышел на паблик или попал в руки какому-нибудь любителю пинчей)
Дизассемблирование и ассемблирование - имхо слишком геморный просесс, лучьше зашифровать код, разбить расшифровщик на байты(может есщё на слова и двойные слова), а потом сгенерировать случайную последовательность из набора инструкций или набора груп инструкций, способных модифицировать первую часть себя в расшифровщик кода вируса и передать на него управление, а ко всему прочему можно их(инструкции) ещё и поменять местами. А чем больше закладываешь в него инструкций, тем длинее получается код способный его найти, а значит и быстродействие АВ падает. А вот телько-что придумал, если между каждыми 3-5 инструкциями вставить вызовы функций, только-что расшифрованных предидущими, думаю тогда и регулярные выражения не помогут, потому-что будут палиться большая часть запускаемых файлов. Или добавить безполезные инструкции например: Code: mov [pos], val mov eax, val mov [pos], eax mov [pos], not val not val lea eax, [val+25] mov [pos], eax sub [pos], 25