tonyStark обоснуй, по каким критериям круче? в каких случаях и т.д. А то "просто" круче это обычно соседу по парте говорят.
ну есть разница между просто шифровкой данных которые надо спрятать от аверов, а тело расшифровщика постоянно меняется и изменения тела декриптора на уровне инструкций(опкодов) с сохранением логики проги
нус зависит от рук которые его писали....в общем случае метаморф обеспечивает облом сигнатурного анализа + эвристики + к этому хороший антиэмуль и должно выглядить довольно таки успешно
чего это о пермуторе? я не говорю за тупо разбить код на блоки и рэндомно менять их местати с сохранением функциональности и вообще работоспособности, а о том что бы разложить инструкции на составляющие, генерировать множество путей к одной цели. вообщем -то я так понимаю что здесь мнения о полиморфике и метаморфике у каждого свое )))) полиморф -код декриптора зарбавляется мусорными инструкциями в случае метаморфа команды меняюся на уровне опкодов.....т.е. генерим множество путей к одной команде например команду MOV можно разложить на xor/add, push/pop, xor/or, xor/and и т.д. mov eax,ebx xor eax,eax add eax,ebx т.е. был опкод 8B C3, а стал 33 С0 03 С3
http://z0mbie.daemonlab.org/metamorf.txt http://z0mbie.host.sk/permut.html прочитайте это, и все встанет на свои места. где пермутация, а где метаморфизм
))))))))) ну и что с этого? что я не так в Вашем понимании не так написал? т.е. ты ты и полиморф и метеморф все относишь к пермутации, твое право
метаморфизм - это создание (мутация) только декриптора. пермутация - это мутация самого кода программы.
тю, а я о чем писал в предыдущем топике помоему по контексту понятно, что о коде декриптора идет речь
dtt, tonyStark Что вы несете? Мир и радость или стало быть что-то еще (троллинг)?.. Пермутация, если приложить этот термин к коду, это скорее можно представить как перестановку инструкций (связка push 302h; popfd не должна быть нарушена), пусть регистров в инструкциях, термин этот встречается к примеру в комбинаторике и появился он там раньше чем в computer science. Полиморфизм - код между экземплярами изменяется, каждое представление имеет неизменную семантику (смысл кода, абстрактно - общий алгоритм). Для генерации каждого семпла как правило берется за основу оригинальный код (должен присутствовать в неизменном виде, либо деобфускация уже обработанного движком кода). Метаморфизм - исходный машинный код преобразуется в абстрактное представление (intermediate language), изменения производят на этом уровне, после чего это все транслируется в машинный код. Впринципе можно я думаю назвать метаморфизмом и без явно выделенного этапа преобразования к абстрактной части. Например при обработке группы инструкций как единого целого и тд.
это и есть Permutating viruses are NOT containing such encrypted data, they are using only current code to generate new polymorphic copy. Разница в мифическом "encrypted data". Честно говоря мне не понятно значение метаморфизма. Все о чем вы говорите - это пермутация. Есть статичный декриптор, каждый раз он разбивается на на некий список элементов, происходят изменения списка, после чего все это собирается обратно в бинарный код.
Ой, хосподи. Наворотили-то. Полиморфный программный код - любой код, выполняющий один и тот же алгоритм, но имеющий различное двоичное представление от копии к копии. Благодаря этому, он не имеет постоянной байтовой сигнатуры. Если отдельные "островки" остаются, такой код называют "одигоморфным" (т.е. "недополитморфным"). Большинство полиморфных малварей строятся по наиболее простой схеме: содержат 1) изменяющийся от копии к копии шифровщик/расшифровщик и 2) шифруемое с переменным ключом тело. Такая малварь и получила название "обычные" или "простые полиморфики". Для видоизменения шифровщика/расшифровщика используются разные идеи: 1) разбавление команд мусором; 2) переставление отдельных команд и больших кусков местами (пермутация); 3) эквивалентная замена отдельных команд и больших кусков ("mov eax, 0" на "xor eax, eax" и т.п.); 4) random push или random move: расшифровщик состоит из большого числа pusheй и/или моvов, расположенных в случайном порядке и формирующих где-то в памяти или стеке код расшифровщика. Так же есть более сложная схема. Малварь не делится на расшифровщик и тело, а видоизменяется себя всю целиком. Вот такая малварь и называется "метаморфной". Фактически, "метаморфы" - это более сложная разновидность "полиморфов". При этом используются все те же идеи, ничего нового. Самые первые эксперименты такого типа (лет 12-13 назад) использовали идею перестановки кусков + разбавление мусором, их назвали "пермутантами". Потом (лет 10 назад усилиями Z0mbIE) начали использовать идею перестановки кусков + эквивалентной замены, посчитали, что это круче и назвали "метаморфами" или "фулморфами". Сейчас считается, что это тоже не круто, и современные "метаморфы" используют все идеи одновременно: и пермутацию, и разбавление, и замену, и random push и т.п. - для всего своего кода. Таким образом, - в "простом полиморфе" мутирует маленький фрагмент, а остальная часть - шифруемые числовые данные; - в "метаморфе" мутирует весь код. Вот и все. И не надо ничего лишнего выдумывать. Все уже выдумано и названо.
Еще раз. Все что вы перечислили - пермутация, включая мусор, замены, перестановки етц... Видимо слово "декриптор" воспринимается многими как xor дешифратор в 10 строк кода (полиморфный декриптор), нафаршированный слоем мусора. В контексте пермутации и крипторов, декриптор это большой кусок кода, отвечающий и за дешифрацию тела упакованой программы, и за настройки импорта и за все прочее. И получается, что декриптор = "все целиком" = тело вируса. Скорее всего путаница между метаморфизмом и пермутацией вызвана статьей mental driller, там он рассматривает пермутацию, как составную часть метаморфизма. У зомби есть четкое разделение и описание, лично я, придерживаюсь его трактовки.
На самом деле Полиморфизм Метаморфизм это просто понятия, но что одна реализация (криптованые данные) что 2ое (разбитие простой команды на состовляющие и преобразования) детектится на рас 2а, т.к. красота всего полиморфа метаморфа в большинстве случаев никак не похожа на код генерируемый компилятором, составляются маски по преоразованым блокам типа push 0 pop eax и прочие извраты, ксоры и.т.д. даже обычно просто составить процентное соотношение байт по исполняемому коду размером 1000h результат будет весомо отличатся от обычного кода сгенеренного компилятором, а больше для детектирования и не надо, еще пару признаков по структуре размещения данных и все. Воттут указан более извратный метод детекта, зато более универсальный. hччp://vx.netlux.org/lib/vpa00.html