![]() |
![]() |
![]() |
Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð² моде куча различных видов морфинга - полиморфинг, метаморфинг и тп. ОÑобнÑком идет пермутациÑ. Из бывшего СÐГ Ñ Ñлышал вÑего о паре человек, которые Ñтим занималиÑÑŒ (занимаютÑÑ).(еÑли кто-то еще Ñтим занимаетÑÑ, пишите на xdeviator@yahoo.com или кидайте в борду TopDevic'а = http://topdev.cjb.net) И так.. - Reminder. Ðедоделанный пермутатор - Zombie, Ñ ÐµÐ³Ð¾ неÑколькими верÑиÑми пермутаторов и метаморфиков. - 2b, Ñ ÐµÐ³Ð¾ Way To Full Morphing (гы... чем-то Ñозвучно Ñ Way To Hell :) - Ðгм...Я... ÐапиÑал Ñ metamorphic engine, поÑлал Янушу, а он Ñказал что Ñто не ÑÑ‚Ð°Ñ‚ÑŒÑ Ð¸ опубликовать не Ñможет. Вобщем там и Ñмотреть не на что, зато Ñ User Interfac'ом. :) Что предÑтавлÑет из ÑÐµÐ±Ñ Ñ„ÑƒÐ»Ð¼Ð¾Ñ€Ñ„Ð¸Ð½Ð³ должно быть понÑтно.. При напиÑании чего-нибудь подобного, вÑегда возникают 3 бооольшие проблемы (1 из них не очень большаÑ,но...) 1. РаÑчет прыжков 2. Определение данных 3. Определение комманд, которые Ñти данные иÑпользуют И так.. 1. РаÑчет прыжков довольно проÑÑ‚. Смотри примеры Reminder'a. 2. Рвот Ñто уже лажа. ЕÑть неÑколько ÑпоÑобов Ð¸Ð·Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ проблемы. - Хранить вÑе данные в отдельной облаÑти, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐµÑ‚ÑÑ Ð¸ Ñпециальным образом обрабатываетÑÑ Ð¿ÐµÑ€Ð¼ÑƒÑ‚Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼. Ðто вÑе хорошо, но немного напрÑжно. - Данные размеÑтить в коммандах. Ðапример Ñделать цепочку Push'ов которые в Ñтеке воÑÑтановÑÑ‚ вÑе нужные данные. Пермутатор возьмет данные из Ñтека и ÑоздаÑÑ‚ новую цепочку Push'ей которые Ñодержат данные. Довольно не плохо, но вот размер катаÑтрофичеÑки возраÑтает. - Мой метод (немного позаимÑтвованный у дизаÑÑемблера (типа IDA, Sourcer,etc)). ОпиÑание Ñмотри ниже. 3. ОпÑть таки, еÑли вÑе делаетÑÑ Ñ‡ÐµÑ€ÐµÐ· Ñтек, то такой проблемы не возникает ÑовÑем. Иначе приходитÑÑ Ñодержать дизаÑÑемблер, определÑть тип инÑтрукции и тп. И так, мой метод... Работает в 2 прохода. Первый проход. Идем по коду (пÑевдо-ÑмулируÑ), Ð¿Ñ€Ñ‹Ð³Ð°Ñ Ð¿Ð¾ Jump'ам и рекурÑивно обрабатываем Call'Ñ‹. При Ñтом Ñоздаем карту кода/данных. Где ÑмулÑÑ†Ð¸Ñ Ð¿Ñ€Ð¾ÑˆÐ»Ð° - код, где оÑталиÑÑŒ пÑтна - данные. ЕÑтеÑтвенно, на каждую комманду, даже по биту - жирно, поÑтому Ñ Ñделал вÑе в виде блоков. Блок характеризуетÑÑ Ñмещением и длиной. Блоки можно обьединÑть, еÑли они переÑекаютÑÑ Ð¸ тп. Ð¡Ð¸Ð»ÑŒÐ½Ð°Ñ ÑÐºÐ¾Ð½Ð¾Ð¼Ð¸Ñ Ð¿Ð°Ð¼Ñти. Заодно ведем таблицу Jmp'ов, комманд, которые работают Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸, и тп. Второй проход. СобÑтвенно пермутациÑ. Ðа входе - Ñмещение на пермутируемый код. Идем по буферу. ÐапрÑмую (без Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Call'ов и тп). ЕÑли данное Ñмещение принадлежит коду - берем размер комманды, возможно пермутируем ее и добавлÑем муÑор. ЕÑли не принадлежит коду - проÑто перепиÑываем байт. За одно проверÑем, указывает на Ñто Ñмещение что-то (Jmp,данные и тп). ЕÑли да, то заменÑем в таблицах нужное Ñмещение. По окончании вÑех проходов, пропатчиваем Call'Ñ‹,Jmp'Ñ‹,ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð½Ð° данные. Таким образом проиÑходит Ð¿ÐµÑ€Ð¼ÑƒÑ‚Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð´Ð° без Ð·Ð°Ñ‚Ñ€Ð°Ð³Ð¸Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…. Проблемы 1 и 2 решены. ОÑтаетÑÑ Ð¿Ð¾ÑледнÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°. Я иÑпользую проÑтейший дизаÑÑемблер, который опеределÑет обращаетÑÑ Ð»Ð¸ Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¼Ð°Ð½Ð´Ð° к данным или нет. ЕÑтеÑтвенно, могут быть глюки, но тут уж вÑе на голову программера ложитÑÑ. Вот вÑе Ñто Ñ Ð¸ реализовал в Deviator's Morphing Engine. ДополнениÑ. Ð’Ñпоминаем инÑтрукции типа Jxx (Jz,Jnz,etc). Они дают прыжок макÑимум на +-127 байт. ПоÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÑƒÑора, комманда может не "попаÑть" туда, куда нужно. Ðа текущий момент Jmp Short (0EBh) и вÑе Jxx заменÑÑŽÑ‚ÑÑ Ð½Ð° их длинные Ñквиваленты при пермутации. Ðналогично делаетÑÑ Ñ Loop'ами Фичи - Вроде первый почти полноценный пермутатор - ÑÑÑÑÑ...а какие еще фичи у пермутатора быть могут ? Текущие недоÑтатки. - ИÑходный буффер не должен переÑекатÑÑ Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼ буфером. (недоÑтаток движка) - Внешние данные не обрабатываютÑÑ. Короче, Ð¿ÐµÑ€Ð¼ÑƒÑ‚Ð°Ñ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° проиÑходить вÑего кода. (Ñкоро иÑправлю) - Плохой алгоритм пермутации комманд и Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÑƒÑора - Возможны некоторые глюки. :) ПрилагающийÑÑ Ð²Ð¸Ñ€ÑƒÑ - пермутант. Я так подумал - муÑор должен быть не отÑеиваемым, иначе никакого ÑмыÑла в муÑоре нет. И тут вÑтречаетÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° - при пермутации отпермутированной копии, муÑор также пермутируетÑÑ. Ð’ результате размер катаÑтрофичеÑки увеличиваетÑÑ. Deviator//HAZARD. |
||
![]() |
![]() |
![]() |