На счет морфера, ведь он сможет работать только с нормальной программой, без самомодифицирующегося кода и всяких извращений? Верно ли я представляю себе технологию морфинга: Берем бинарик, от точки входа начинаем разбор кода, строим графы, находим процедуры, строим таблицу связываний и вызовов, и далее выделяем память и обрабатываем по очереди каждый блок кода, обрбатываем -- морфим код, а далее исходя из таблицы все это связываем. Тут получается и PE загрузчик не нужен. Поправьте.
Да, именно так. За исключением графов - до сих пор не понимаю, зачем они нужны. Если ты дизассемблируешь код, выделишь функции и построишь таблицу связей, то на кой черт тебе графы?
нууу... например, в генерируемом коде можно делать обращения к аргументам функции. Выглядит довольно правдоподобно, автоматический анализатор ав не сможет выкинуть этот код из функции
Как же морят вирусы, они же в основном написаны сложным образом для морфинга. Есть кстати паблик сорцы, кроме одного который я как-то находил с рускими коментами? Или может Hello World на ассемблере морфленый два раза выложит, или в личку?
дык вирусы никто не морфит используют обычные полиморфные крипторы. А они имеют при себе декриптор и загрузчик, такие сложные технологии не применяются. И при написании вирусов о морфинге никто не думает - все расчитывают на сторонние крипторы. Если вдруг какой-то вирус и затачивается под метаморф, то он имеет ряд ограничений. Например, никаких данных в коде, простой и понятный код, отстутствие определенных инструкций, которые сложно мутировать в данном конкретном движке, который встроен в сам вирус. Т.е. морфер пишут не универсальный, а под конкретный файл. mistfall, metaphor - это первое, что приходит на ум. Есть в 29а.
Для морфига применяется только статический анализ исполняемого файла? Сейчас попгуглю линки на исходники.
Ну а как динамически анализировать? Надо эмулировать вдобавок еще ведь, да? Если не сложно можно ссылки на вышеописаные перемутаторы. А то проблемно найти.
> нууу... например, в генерируемом коде можно делать обращения к аргументам функции. дык и построим свои функции! как нам нужно, а не будем использовать уже готовые. тем более определение функций - та еще задача.
MSoft Ну так графом это будет в любом случае, именные ссылки - способ определения дуг между вершинами, для удобства чтения.. а суть не меняется.
Граф необходим дабы отказаться от адресов, иначе как вы будите менять код. Вместо адресов в ветвлениях вводятся ссылки на части графа.