IDP, перенаправление выборки DF на нужное место

Тема в разделе "WASM.WIN32", создана пользователем zerodawn, 18 авг 2018.

Метки:
  1. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.017
    Так вот в этом etc" и ваш ответ, разбирайтесь как это раскодируется, в формате. Там всё просто предельно, это и есть эффективный адрес. Наличие его возвращает дизасм, либо можно задать таблицей. Могу вам её дать, но обычно она не нужна - любой дизасм эту инфу возвращает. Вы будите использовать ксед(лучший дизасм, от вендора IA), там это тоже есть.
     
    zerodawn нравится это.
  2. zerodawn

    zerodawn Member

    Публикаций:
    0
    Регистрация:
    16 янв 2018
    Сообщения:
    97
    спасибо за ответы, особенно за xed, а то я тут ### с дизасмом ручным)))))))

    кому линк надо https://intelxed.github.io/
     
    Последнее редактирование модератором: 25 авг 2018
  3. Indy_

    Indy_ Well-Known Member

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

    Использовалась вообще то связка dizahex-xed. Диза хороший мотор, но он не поддерживает наборы расширений, математику например. Ксед тоже хороший, это быстрый табличный декодер, но он большой. Выбор дизасма видимо от целей зависит, если не важен профайл, то возможно и ксед не самое лучшее решение.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.017
    А есчо я забыл упомянуть важный момент. Из за тех. деталей оно теряется из вида.

    У ав эмулятора апи существуют в двух варинтах, это либо простейший стаб, который возвращает какие то данные, типо констант, либо это вм-маркер, сменяющий мод. Это некоторая кодовая последовательность, при обнаружении которой запускается механизм эмуляции апи/ядерных функций. Такой вызов изолирован от исполняемой среды. Это значит что последовательно исполняя инструкции и дойдя до такого вызова, те фактически разложив функцию на компоненты трассировкой(визором), эмулятор ломается на выборке данных. Хотя вм-шлюз реализован обычно как корректный код(для декодера, но не обязательно для исполнения - это сделано что бы остался вызов апи при её перемещении в памяти), это например невалид инструкция с префиксами блокировки, она будет исполнена и на этом эмуляция закончится. Либо возникнет #GP, либо #AV при выборке вм аргументов.
     
    zerodawn нравится это.
  5. Indy_

    Indy_ Well-Known Member

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

    Апну тему, мне интересно что у вас получилось.
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.017
    Интересная и самая актуальная тема по виксам, как всегда заглохло :dntknw:

    Один человек поинтересовался, да и тот пропал. Вот так всегда :dntknw:

    По ней есчо куча работы:

    Все PTR наследуются и передаются в ав-шлюзы. Для эффективного противодействия этому, что бы эмуляция была невозможна принципиально, необходимо использовать анклавы(IDP). Тоесть это должно использоваться для всех указателей в приложении, например локальных переменных. В таком случае возникает масса тех. задач. Не ясно возможно ли системное решение, нужно копаться в ядре, сделав N/A(PG) стековый регион врядле обработка возможна. Наследование указателей так же до конца не решённая задача из за её сложности.

    Вот и весьма печально получается что всем пофиг, эти все публикации и обсуждения совершенно бесполезны, всем нужно всё готовое, никто в разработках не участвует :dntknw:
     
  7. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    342
    пустая трата времени если для малварки. те идея забавная, но больше для легальных продуктов аля прот (да и то... разработчику надо будет потрогать свой код чтобы заработало норм так), чтобы реверсить больно было.
    а так ав будут просто детектить сам механизм перенаправления да и все. проживет это максимум неделю.
    но если у автора есть контр пример то будет круто (те живой сэмпл).
     
    vx1d нравится это.
  8. Indy_

    Indy_ Well-Known Member

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

    Не согласен. Вы не видите в целом картину, рассматривая лишь эмулятор. Фактически тут сразу аверам две проблемы встаёт, одна решается одна не решается принципиально. Что бы из км прочитать юзер память(анклав) во первых нужно снизить мод, те впрыснуть юзер код из км. Который там выполнит выборку через кучу диких извратов, это реализовать врядле возможно. Во вторых вм - перезапуск выборки невозможен.
    Всё упирается в плавающий размер структур(не известны лимиты при выборке). Но есть теоретическое решение - использование WS монитора и перезапуск сервисов при выходе за пределы блока данных. Это позволяет реализовать архитектура - каждый аргумент передаваемый в ядро проходит проверку на лимиты.
     
    Последнее редактирование: 13 сен 2018
  9. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    342
    То что ты описал идеально для пакеров, возможно дрм кстати для софта типа игр, но не для малвари. те отдельно эта техника мало что сможет решить. плюс она тяжелая, плюс ее будут детектить тупо в статике - если в бинаре будут сигнатуры кседа итд + магия с вехом, то эмулировать все и не надо. дошло до определенной точки + наличие определенных сигнатур - детект.
    Возможно как часть рк только юзермодного. И то надо думать о применении.
     
  10. Indy_

    Indy_ Well-Known Member

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

    > отдельно эта техника мало что сможет решить.

    Задачи клином не сошлись на вм. Есть сканер памяти, это динамическая защита, не эмулятор. И анклавы единственный способ решения, помимо изменения кода.
    Авер в своей сути не корректно реализован, не верная архитектура. Его обработчики изолированы от текущего режима, это нарушает dfg. Вм не расчитаны на столь хитрые техники. Это ошибка в самой архитектуре - обработка должна про исходить без смены мода, иначе невозможно связать потоки данных. На анклаве вм прекращает работу, так как обработка события невозможна.

    > будут сигнатуры кседа итд + магия с вехом

    Тут запутанно из за обширного применения техник - одновременно это разработка защиты, обход её етц. В простейшем случае не нужен декодер инструкций. Он используется визором для быстрой обработки в реалтайме(защита от OP-inject). Если же задача - сломать вм, то можно это всё построить и на исключениях. Так это изначально и работало. Это лишь разные варианты реализации задачи по треку выборки(df).

    IDP - это анклав, реализованный через указатель в памяти. То же самое можно сделать с регионом, на который ссылается указатель - заблокировать(из за гранулярности памяти это по простому не получится) его и отслеживать аппаратно выборку, сработает ловушка. Но механизм этот столь медленный, что совершенно не пригоден для работы в реалтайме, Поэтому каждая выборка отслеживается визором, а для этого используется табличный декодер, соотвественно он тяжёлый, большой по размеру.

    Видимо в общем тут нет смысла говорить, всё зависит от целей.
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.017
    Допишу что бы было понятно.

    Обычно есть три проблемы по теме - ядерный вызов(указатели не могут быть в анклав) , VM-атом и событие сканера памяти.

    Их объединяет один механизм. Всё апп должно быть анклавом. Все указатели должны быть захвачены и реализован анклав для них. При этом память апп N/A.

    Единственный способ ав которым он может обойти анклавы - копирование данных(DF) в локали(стек). По этой причине есть лишь один способ противодействия. Все ссылки(указатели) в апп должны мониториться, при вызове шлюза изменяться(idp). Тогда вызов атома станет просто невозможным из за отсутствия выборки(df).
    Но такое решение весьма сложно реализовать. Фактически анклав может быть двух типов - статик, когда сам блок данных N/A и динамик, это выборка по указателю(ссылкам).
    Задача довольно сложна, она требует для решения механизм наследования указателей(PFG), тоже самое нужно и для реализации защиты(OP).

    Это обширная тема и куча не решённых по ней задач.