то есть? нужен же изменяемый код? изменения могут происходить на целевой машине, но там всё-таки аверка (антивирус) стоит и самый простой способ задетектить полиморфа -- это сам факт записи в executable memory. зачем данным писаться в исполняемую память?
Мы говорим о разном. Речь о метаморфном двигле. > самый простой способ задетектить полиморфа -- это сам факт записи в executable memory Не знаю откуда вы это взяли В моих сообщениях не было ни слова о записи данных (каких данных?) в executable memory, но было обобщенно о том, каким образом должна создаваться следующая копия на основе предыдущей. Будет ли это инфект донорского файла, запись в виде отдельного бинарника на локальной фс, запись на удаленную машину через эксплуатацию сетевой уязвимости -- абсолютно не важно, это вопрос реализации. Задача преобразования актуальна для любых векторов распространения. Кажется, вы что-то себе не то нафантазировали.
абсолютно неважно собирается ли код в озу иль на фс ==>> есть поведенческие маркеры, по коим аверка может отслеживать вирий без надобности особо глубокого исследования его кода.. вот, навскидку некоторые маркеры: 1. запись в исполняемую память (озу). 2. запись в файлы *.exe/*.vbs/*.bat/.. 3. попытка изменения важных разделов реестра. 4. попытка переполнения буфера/стека, чрез механизмы межпроцессного/сетевого взаимодействия. итд-итп. ============================================== не решив Вопрос сокрытия поведенческих маркеров, остальные разговоры == НИоОчЁМъЪ.
UbIvItS > не решив Вопрос сокрытия поведенческих маркеров, остальные разговоры == НИоОчЁМъЪ. не решив вопрос с приобретением персонального компьютера, остальные разговоры -- ниочем; не решив вопрос с текстовым редактором, остальные разговоры -- ниочем; не решив вопрос с оплатой электроэнергии, остальные разговоры -- ниочем. (;
Atari, > Смысл тогда вообще в компиляции?! Почему не использовать просто свой же бинарь и не преобразовывать его? Обработка машкода на уровне регистров и ветвлений это полиморфизм. При этом нельзя выполнить глубокую перестройку кода, так как для этого необходима декомпиляция. Если код декомпилится - выполняется свёртка в более общий вид и далее вносятся изменения на уровне компилятора это пермутация. Но так как для произвольного кода реализовать её не представляется возможным, то вместо свёртки кода используется исходный высокоуровневый код - это метаморфизм. DelAlt, > а) использовать свой бинарь и преобразовывать его -- здесь очевидная сложность Сложность, в частности из за: > Indy допишет парсер map-файлов, что подитожит все предыдущие достижения - невозможности однозначно определить что данные это код.
UbIvItS, > простой способ задетектить полиморфа -- это сам факт записи в executable memory. А зачем туда писать ? Даже если и нужно по какой то причине, то можно отменить исполнение RE -> RW. Или к примеру использовать отображения в память, так к примеру делается что бы не использовать опасный RWE - проецируется секция два раза, RW и RE. В первую пишем код, исполняем его во второй проекции.
Indy > Сложность, в частности из за: >> Indy допишет парсер map-файлов, что подитожит все предыдущие достижения >- невозможности однозначно определить что данные это код. Именно поэтому вариант со сверткой нет смысла копать, это тупиковое направление. Для случая, когда у нас нет ничего, кроме голого машкода и его надо анализировать, можно использовать на покрытии частичную эмуляцию + эвристику -- то, что я пробовал описать раньше. Но в ситуации, когда мы можем притащить с собой любую интересующую информацию, глупо это не использовать и создавать себе искусственные ограничения. > Обработка машкода на уровне регистров и ветвлений это полиморфизм. При этом нельзя выполнить глубокую перестройку кода, так как для этого необходима декомпиляция. Если код декомпилится - выполняется свёртка в более общий вид и далее вносятся изменения на уровне компилятора это пермутация. Но так как для произвольного кода реализовать её не представляется возможным, то вместо свёртки кода используется исходный высокоуровневый код - это метаморфизм. Такое толкование терминов очень корявое. Непонятно кто и когда это первый ляпнул, так же как непонятно, как это все стало общепринятым. > "Мета- (с греч. μετά- — между, после, через), часть сложных слов, обозначающая абстрагированность, обобщённость, промежуточность, следование за чем-либо, переход к чему-либо другому, перемену состояния, превращение, ..." Метаморфизмом должно называться и перестроение из высокоуровневого кода, и свертка машкода в высокоуровневое представление с последующей генерацией из него (то, что вы называете пермутацией). Оба варианта используют в конечном итоге ребилд из абстрактного представления, не важно как оно было получено. UPD: > "Пермутация -- перестановка, изменение в последовательности каких-либо элементов" (https://ru.wiktionary.org/wiki/пермутация) Пермутацией -- это исключительно изменение последовательности, без преобразования самих элементов. Пермутацией должны называться локальные техники, меняющие последовательность: следования инструкций, использования регистров в качестве операндов и т.д. Какая свертка, какие изменения на уровне компилятора?(:
DelAlt, > Оба варианта используют в конечном итоге ребилд из абстрактного представления, не важно как оно было получено. Разница именно в том, как это абстрактное представление получается - хранится в исходном виде или восстанавливается. Для метаморфика не нужно решать сложные задачи по декомпиляции.
> Для метаморфика не нужно решать сложные задачи по декомпиляции. Для метаморфика не важно, нужно ли решать сложные задачи по декомпиляции. Единственное что важно -- это перестроение на обобщенном, абстрактном уровне. Перестаньте тиражировать этот допотопный, школьный vx-словарь.
DelAlt, Это общепринятые понятия. А что вы будите перестраивать, если нечего, нет исходного кода. А имея его и метаморфить ничего не нужно, обфускация же.
> Это общепринятые понятия. Мне глубоко пофиг что там общепринятое, если оно неправильное. > А что вы будите перестраивать, если нечего, нет исходного кода. Свертка производится для получения абстрактного представления, которое впоследствии преобразуется. Мы работаем с абстрактным представлением. Это -- метаморф.
опять-таки как мы можем уйти от Поведенческих Маркеров? любой вариант упирается не в код как таковой, а в набор применяемых апи и в последовательность их применения. + заметь: аверка может пользовать список "белых" прог. То бишь ПМ становится ещё более определённым. К примеру, зачем мс ворд лезть в настройки дров в реестре?
UbIvItS, > любой вариант упирается не в код как таковой В общем случае без запуска кода нельзя узнать что он делает, в статике. Событие записи к примеру в реестр может быть обнаружено только системным фильтром. Эвристика заточена на использование в виртуальных машинах, но никак не в реалтайме. Если кернел фильтр обнаружит событие, то он не будет запускать эвристик, во первых потому, что нет пока годного способа это сделать - должен быть запущен визор для дальнейшего анализа.
а что тут анализировать? если все корневые апи надёжно перехватываются, то все события в системе и источники оных могут быть отслежены. правда, аверка практически должна дублировать ядро выни. но, для снижения выч. затрат на эвристики, иного варианта нет.