Привет ВСЕМ-ВСЕМ!!! Как говорится дело было вечером, выпускной бал и всё такое... На утро жутко болела голова и сумашедшие мысли начали посещать голову... Я начинающий и на асме программлю год, писал в основном на сях. Короче говоря ударился в два направления САМОМОДИФИКАЦИЯ КОДА и ПОЛИФОРМИЗМ. Ассемблер мне нравится, классная штука, ещё бы мозгов побольше чтобы творить получше... Короче говоря изучал самодификацию в асме, пробовал на сях, тоже работает в основном на WriteProcessMemory и ReadProcessMemory. И очень не понравился тот факт, что не встречал статей по полиформизму программ на С++, правда написано на чистом API без MFC. Хочу услышать высказывания по поводу полиморфной проги на С++, в конце топика выхожу исходный код. (Суть такова может копировать себя в новое место или затирать сама себя в текущем месте с последующим запуском и востановлением параметров, код не похож на предыдущий, делает тоже самое, шифрование кода не использую). Матом просьба не крыть всё аргументирую.
самомодификация на этих функциях конечно, жесть ) Тогда уж лучше там какой-нить memcpy использовать. а какая разница? суть одна и таже. осталось только еще VCL прикрутить. молодец, оттачивай навык
мнения о чем? собсна, высказывать пока не о чем. Ессно полиморфизм удобднее делать на яву, чем на асме. А какое мнение еще тебе нужно?
MSoft бррррр =) Box Скажи что и для чего ты делаешь хотя бы. Налицо клиническое отсутствие понимания хотя бы смысла всех этих танцев за руку с пермутацией, морфингом и прочими страшными словами.
Зачем морфер? Напиши свой лоадер, и пусть он морфирует из интернет сервера, при заражении. И пусть евгений касперкий потом дебажет удаленно.
Это пикод, код для которого смещение в сегменте не имеет значения. Базовое понятие. Более сложный перекрёстный код, когда один процессор исполняет код, в тоже время другие процессоры его моифицируют. С морфингом абсолютно никак не связано, это всеголишь стиль оформления кода, он полноценно только на ассемблере может применяться, остальные языки не позволяют это выполнить без хака, если это пишется на них, то про рантайм среды можно забыть.
_DEN_ Что не так ? Что вобще есть морфинг - в моём понимании это перенос кода в другую область памяти с дизассемблированием его и последующей перестройкой, например замена ветвлений или рандомизация, где инструкции заменяются на эквивалентные блоки и код меняется до неузноваемости, без изменения общего функционала, тоесть действия выполняемые процедурой остаются незменными. Простая запись себе в код(Self - Modifying), как например код может быть перемешан с переменными - никакой не морфинг.
На самом деле такой фигнёй уже не удивишь. Мой знакомый педагог показывал такие вещи... писал тоже на С++ разбивал весь код на функции, каждую функцию переводил в чисто ассемблерный вид, по-моему даже при помощи того же linker'a с ключом asm, затем размещал последовательность инструкций в отдельных секциях, при запуске прога сама грузила отдельные сегменты в память после всего построения передавала управление главному коду, хотя изюминка в том что возможно было заменять машинные инструкции, путать переходами, графическими функциями, менять имена секций и прочими вещами... При завершении весь код скидывался в секции почти совершенно непохожим Ну примерно так... Да написать такую прогу для вывода той же мессаги не составит труда =)
Звучит как то не очень доверительно, ведь всё что описано давно заюзанные функции на том же С, я конечно попробую сотворить нечто подходящее под описание, если уж так стрёмно показались мои слова. только на выходных, а то сейчас своей работы навалом. Что мешает создать в файле новую секцию, что мешает пихануть туда код функции, что мешает в ней найти нужную инструкцию (опкоды все известные) и заменить на случайную из массива аналогичных. Лично я вижу сложность в нахождении таких инструкций, например обнуление регистра слышал про 21 способ, а таких инструкций огого как много. (хотя наверное кто то уже это дело отклассифицировал, может исходники вирей на асме глянуть). Конечно такой код наверное с лёгкостью пропалинся на эвристике, поэтому наверное главная сложность в раставление вот этих прыжков и вызовах графических функций, на которых эвристика запнётся. Но алгоритм по сути не сложный, подумать часок с пивком и усё гуд.
ну что тебе сказать... кроме замены опкодов по таблице с чем еще можно столкнуться: 1) анализ инструкции, выделение опкода (а они разной длины) из всей инструкции (ну допустим с дизасмом не сложно) 2) анализ операндов - просто так мусор на мусор не поменяешь. Если у тебя lea ecx,[xxx + ebx*4], то такое ты быстро не заменишь 3) анализ флаги, чтобы прыжок случайно не пошел не в том направлении 4) анализ прыжков, вызовов и перекрестных ссылок - lea ecx,[xxx + ebx*4] - это указатель на адрес или просто число? 5) анализ данных и кода - чтобы случайно не начать дизасмить данные 6) анализ регистров. Если какой-то регистр занят, то глупо использовать его при морфинге какой-то инструкции ну навскидку это как бы все если сделаешь такое за выходные, респект