Полиморфная прога на С++ :) (ну или частично полиморфная)

Тема в разделе "WASM.HEAP", создана пользователем Box, 24 июн 2009.

  1. Box

    Box New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2009
    Сообщения:
    1
    Привет ВСЕМ-ВСЕМ!!!
    Как говорится дело было вечером, выпускной бал и всё такое... На утро жутко болела голова и сумашедшие мысли начали посещать голову... Я начинающий и на асме программлю год, писал в основном на сях. Короче говоря ударился в два направления САМОМОДИФИКАЦИЯ КОДА и ПОЛИФОРМИЗМ. Ассемблер мне нравится, классная штука, ещё бы мозгов побольше чтобы творить получше... Короче говоря изучал самодификацию в асме, пробовал на сях, тоже работает в основном на WriteProcessMemory и ReadProcessMemory. И очень не понравился тот факт, что не встречал статей по полиформизму программ на С++, правда написано на чистом API без MFC. Хочу услышать высказывания по поводу полиморфной проги на С++, в конце топика выхожу исходный код. (Суть такова может копировать себя в новое место или затирать сама себя в текущем месте с последующим запуском и востановлением параметров, код не похож на предыдущий, делает тоже самое, шифрование кода не использую). Матом просьба не крыть всё аргументирую.
     
  2. pr0mix

    pr0mix New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    107
    самомодификация на этих функциях конечно, жесть )
    Тогда уж лучше там какой-нить memcpy использовать.

    а какая разница? суть одна и таже.

    осталось только еще VCL прикрутить.

    молодец, оттачивай навык :)
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Box
    *морфизм - это когда код по сигнатуре не палится. при чем тут перенос с места на место?
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    GoldFinch
    суть видимо в том, что старая копия удаляется, а новая - отличается
     
  5. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    мнения о чем? собсна, высказывать пока не о чем. Ессно полиморфизм удобднее делать на яву, чем на асме. А какое мнение еще тебе нужно?
     
  6. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    MSoft
    бррррр =)

    Box
    Скажи что и для чего ты делаешь хотя бы.
    Налицо клиническое отсутствие понимания хотя бы смысла всех этих танцев за руку с пермутацией, морфингом и прочими страшными словами.
     
  7. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Зачем морфер? Напиши свой лоадер, и пусть он морфирует из интернет сервера, при заражении. И пусть евгений касперкий потом дебажет удаленно.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Это пикод, код для которого смещение в сегменте не имеет значения. Базовое понятие. Более сложный перекрёстный код, когда один процессор исполняет код, в тоже время другие процессоры его моифицируют. С морфингом абсолютно никак не связано, это всеголишь стиль оформления кода, он полноценно только на ассемблере может применяться, остальные языки не позволяют это выполнить без хака, если это пишется на них, то про рантайм среды можно забыть.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    _DEN_
    Что не так ?
    Что вобще есть морфинг - в моём понимании это перенос кода в другую область памяти с дизассемблированием его и последующей перестройкой, например замена ветвлений или рандомизация, где инструкции заменяются на эквивалентные блоки и код меняется до неузноваемости, без изменения общего функционала, тоесть действия выполняемые процедурой остаются незменными. Простая запись себе в код(Self - Modifying), как например код может быть перемешан с переменными - никакой не морфинг.
     
  11. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    _DEN_
    Хомяк нормуль
    хотя мож и не хомяк вовсе
     
  12. mms_mms

    mms_mms New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2009
    Сообщения:
    2
    На самом деле такой фигнёй уже не удивишь.
    Мой знакомый педагог показывал такие вещи... писал тоже на С++ разбивал весь код на функции, каждую функцию переводил в чисто ассемблерный вид, по-моему даже при помощи того же linker'a с ключом asm, затем размещал последовательность инструкций в отдельных секциях, при запуске прога сама грузила отдельные сегменты в память после всего построения передавала управление главному коду, хотя изюминка в том что возможно было заменять машинные инструкции, путать переходами, графическими функциями, менять имена секций и прочими вещами... При завершении весь код скидывался в секции почти совершенно непохожим :) Ну примерно так... Да написать такую прогу для вывода той же мессаги не составит труда =)
     
  13. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    mms_mms
    Да твой препод просто зверь:)
     
  14. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ану покажи-ка мастер класс
     
  15. mms_mms

    mms_mms New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2009
    Сообщения:
    2
    Звучит как то не очень доверительно, ведь всё что описано давно заюзанные функции на том же С, я конечно попробую сотворить нечто подходящее под описание, если уж так стрёмно показались мои слова. только на выходных, а то сейчас своей работы навалом.
    Что мешает создать в файле новую секцию, что мешает пихануть туда код функции, что мешает в ней найти нужную инструкцию (опкоды все известные) и заменить на случайную из массива аналогичных. Лично я вижу сложность в нахождении таких инструкций, например обнуление регистра слышал про 21 способ, а таких инструкций огого как много. (хотя наверное кто то уже это дело отклассифицировал, может исходники вирей на асме глянуть). Конечно такой код наверное с лёгкостью пропалинся на эвристике, поэтому наверное главная сложность в раставление вот этих прыжков и вызовах графических функций, на которых эвристика запнётся. Но алгоритм по сути не сложный, подумать часок с пивком и усё гуд.
     
  16. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ну что тебе сказать... кроме замены опкодов по таблице с чем еще можно столкнуться:
    1) анализ инструкции, выделение опкода (а они разной длины) из всей инструкции (ну допустим с дизасмом не сложно)
    2) анализ операндов - просто так мусор на мусор не поменяешь. Если у тебя lea ecx,[xxx + ebx*4], то такое ты быстро не заменишь
    3) анализ флаги, чтобы прыжок случайно не пошел не в том направлении
    4) анализ прыжков, вызовов и перекрестных ссылок - lea ecx,[xxx + ebx*4] - это указатель на адрес или просто число?
    5) анализ данных и кода - чтобы случайно не начать дизасмить данные
    6) анализ регистров. Если какой-то регистр занят, то глупо использовать его при морфинге какой-то инструкции

    ну навскидку это как бы все
    если сделаешь такое за выходные, респект
     
  17. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    вот она, смерть антивирусной индустрии
     
  18. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    и золотая жила производителей пива...
     
  19. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    а то и для производителей, чем черт не шутит :)