Изменение алгоритма программы

Тема в разделе "WASM.ZEN", создана пользователем sniper, 14 май 2017.

  1. DelAlt

    DelAlt Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    62
    UbIvItS
    О чем вы говорите? Речь не идет о полиморфе, как минимум.
     
  2. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    то есть? нужен же изменяемый код? изменения могут происходить на целевой машине, но там всё-таки аверка (антивирус) стоит и самый простой способ задетектить полиморфа -- это сам факт записи в executable memory. зачем данным писаться в исполняемую память?:scratch_one-s_head::grin:
     
  3. DelAlt

    DelAlt Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    62
    Мы говорим о разном. Речь о метаморфном двигле.

    > самый простой способ задетектить полиморфа -- это сам факт записи в executable memory

    Не знаю откуда вы это взяли :) В моих сообщениях не было ни слова о записи данных (каких данных?) в executable memory, но было обобщенно о том, каким образом должна создаваться следующая копия на основе предыдущей. Будет ли это инфект донорского файла, запись в виде отдельного бинарника на локальной фс, запись на удаленную машину через эксплуатацию сетевой уязвимости -- абсолютно не важно, это вопрос реализации. Задача преобразования актуальна для любых векторов распространения. Кажется, вы что-то себе не то нафантазировали.
     
  4. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    абсолютно неважно собирается ли код в озу иль на фс ==>> есть поведенческие маркеры, по коим аверка может отслеживать вирий без надобности особо глубокого исследования его кода.. вот, навскидку некоторые маркеры:

    1. запись в исполняемую память (озу).
    2. запись в файлы *.exe/*.vbs/*.bat/..
    3. попытка изменения важных разделов реестра.
    4. попытка переполнения буфера/стека, чрез механизмы межпроцессного/сетевого взаимодействия.
    итд-итп.
    ==============================================
    не решив Вопрос сокрытия поведенческих маркеров, остальные разговоры == НИоОчЁМъЪ. :)
     
  5. DelAlt

    DelAlt Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    62
    UbIvItS
    > не решив Вопрос сокрытия поведенческих маркеров, остальные разговоры == НИоОчЁМъЪ. :)

    не решив вопрос с приобретением персонального компьютера, остальные разговоры -- ниочем;
    не решив вопрос с текстовым редактором, остальные разговоры -- ниочем;
    не решив вопрос с оплатой электроэнергии, остальные разговоры -- ниочем.
    (;
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Atari,

    > Смысл тогда вообще в компиляции?! Почему не использовать просто свой же бинарь и не преобразовывать его?

    Обработка машкода на уровне регистров и ветвлений это полиморфизм. При этом нельзя выполнить глубокую перестройку кода, так как для этого необходима декомпиляция. Если код декомпилится - выполняется свёртка в более общий вид и далее вносятся изменения на уровне компилятора это пермутация. Но так как для произвольного кода реализовать её не представляется возможным, то вместо свёртки кода используется исходный высокоуровневый код - это метаморфизм.

    DelAlt,

    > а) использовать свой бинарь и преобразовывать его -- здесь очевидная сложность

    Сложность, в частности из за:

    > Indy допишет парсер map-файлов, что подитожит все предыдущие достижения

    - невозможности однозначно определить что данные это код.
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    UbIvItS,

    > простой способ задетектить полиморфа -- это сам факт записи в executable memory.

    А зачем туда писать ?
    Даже если и нужно по какой то причине, то можно отменить исполнение RE -> RW. Или к примеру использовать отображения в память, так к примеру делается что бы не использовать опасный RWE - проецируется секция два раза, RW и RE. В первую пишем код, исполняем его во второй проекции.
     
  8. DelAlt

    DelAlt Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    62
    Indy
    > Сложность, в частности из за:
    >> Indy допишет парсер map-файлов, что подитожит все предыдущие достижения
    >- невозможности однозначно определить что данные это код.

    Именно поэтому вариант со сверткой нет смысла копать, это тупиковое направление. Для случая, когда у нас нет ничего, кроме голого машкода и его надо анализировать, можно использовать на покрытии частичную эмуляцию + эвристику -- то, что я пробовал описать раньше. Но в ситуации, когда мы можем притащить с собой любую интересующую информацию, глупо это не использовать и создавать себе искусственные ограничения.

    > Обработка машкода на уровне регистров и ветвлений это полиморфизм. При этом нельзя выполнить глубокую перестройку кода, так как для этого необходима декомпиляция. Если код декомпилится - выполняется свёртка в более общий вид и далее вносятся изменения на уровне компилятора это пермутация. Но так как для произвольного кода реализовать её не представляется возможным, то вместо свёртки кода используется исходный высокоуровневый код - это метаморфизм.

    Такое толкование терминов очень корявое. Непонятно кто и когда это первый ляпнул, так же как непонятно, как это все стало общепринятым.

    > "Мета- (с греч. μετά- — между, после, через), часть сложных слов, обозначающая абстрагированность, обобщённость, промежуточность, следование за чем-либо, переход к чему-либо другому, перемену состояния, превращение, ..."

    Метаморфизмом должно называться и перестроение из высокоуровневого кода, и свертка машкода в высокоуровневое представление с последующей генерацией из него (то, что вы называете пермутацией). Оба варианта используют в конечном итоге ребилд из абстрактного представления, не важно как оно было получено.

    UPD:
    > "Пермутация -- перестановка, изменение в последовательности каких-либо элементов" (https://ru.wiktionary.org/wiki/пермутация)
    Пермутацией -- это исключительно изменение последовательности, без преобразования самих элементов. Пермутацией должны называться локальные техники, меняющие последовательность: следования инструкций, использования регистров в качестве операндов и т.д. Какая свертка, какие изменения на уровне компилятора?(:
     
    Последнее редактирование: 23 май 2017
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    DelAlt,

    > Оба варианта используют в конечном итоге ребилд из абстрактного представления, не важно как оно было получено.

    Разница именно в том, как это абстрактное представление получается - хранится в исходном виде или восстанавливается. Для метаморфика не нужно решать сложные задачи по декомпиляции.
     
  10. DelAlt

    DelAlt Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    62
    > Для метаморфика не нужно решать сложные задачи по декомпиляции.

    Для метаморфика не важно, нужно ли решать сложные задачи по декомпиляции. Единственное что важно -- это перестроение на обобщенном, абстрактном уровне. Перестаньте тиражировать этот допотопный, школьный vx-словарь.
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    DelAlt,

    Это общепринятые понятия. А что вы будите перестраивать, если нечего, нет исходного кода. А имея его и метаморфить ничего не нужно, обфускация же.
     
  12. DelAlt

    DelAlt Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    62
    > Это общепринятые понятия.

    Мне глубоко пофиг что там общепринятое, если оно неправильное.

    > А что вы будите перестраивать, если нечего, нет исходного кода.

    Свертка производится для получения абстрактного представления, которое впоследствии преобразуется. Мы работаем с абстрактным представлением. Это -- метаморф.
     
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    опять-таки как мы можем уйти от Поведенческих Маркеров? любой вариант упирается не в код как таковой, а в набор применяемых апи и в последовательность их применения. + заметь: аверка может пользовать список "белых" прог. То бишь ПМ становится ещё более определённым. К примеру, зачем мс ворд лезть в настройки дров в реестре?
     
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    UbIvItS,

    > любой вариант упирается не в код как таковой

    В общем случае без запуска кода нельзя узнать что он делает, в статике. Событие записи к примеру в реестр может быть обнаружено только системным фильтром. Эвристика заточена на использование в виртуальных машинах, но никак не в реалтайме. Если кернел фильтр обнаружит событие, то он не будет запускать эвристик, во первых потому, что нет пока годного способа это сделать - должен быть запущен визор для дальнейшего анализа.
     
  15. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    а что тут анализировать? если все корневые апи надёжно перехватываются, то все события в системе и источники оных могут быть отслежены. правда, аверка практически должна дублировать ядро выни. но, для снижения выч. затрат на эвристики, иного варианта нет.