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

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

Метки:
  1. Indy_

    Indy_ Well-Known Member

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

    zerodawn Member

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

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

    Indy_ Well-Known Member

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

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

    Indy_ Well-Known Member

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

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

    Indy_ Well-Known Member

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

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

    Indy_ Well-Known Member

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

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

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

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

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

    superakira Guest

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

    Indy_ Well-Known Member

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

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

    superakira Guest

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

    Indy_ Well-Known Member

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

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

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

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

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

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

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

    Indy_ Well-Known Member

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

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

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

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

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

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Пример, написанный в прошлые выходные для темы cpuid на кряклабе. Это базовая рабочая сборка визора(не блочная сборка, а простейшая). Там нет пакетной обработки, так как она не нужна для тестов адресного декодера. Поэтому работает весьма медленно, но очень стабильно. Адресный декодер можно убрать, так как трансляция происходит через замену опкода(это для тестов что бы упростить). Так же можно реализовать анклав, изменив MODRM кодировку, добавив disp32.

    Тут тестовики https://yadi.sk/d/6j89l3RY1IVIdA

    В принципе можно тестить на любом модуле без защиты. Иначе будет как минимум детект по таймингу.

    f13nd

    Ты там обосрал всё, вот полистай и скажи как это можно в пару строк реализовать.
     

    Вложения:

    • DyeBase.7z
      Размер файла:
      457,8 КБ
      Просмотров:
      528
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Допиленная версия визора https://yadi.sk/d/bLWoylqfLmsBsg

    Это не самая профайл сборка, тоесть задача по выборке данных(мотор пилится под конкретную задачу), можете на кряклабе посмотреть. В отличие от предыдущих сборок запилено на протекторы. Любой прот берётся под визор и снимается его активность, визор наблюдает. Можно этим брать на анализ крипторы, прибивая их активность после дефейна EP.

    Я позже вернусь к задаче оптимизации(блочное исполнение, задача solved, но я пока оставил реализацию, тк появилась иная задача^).
     
  14. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    301
    щас бы найти сорцы
     
  15. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
  16. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    301
    тут ничего нет
     
  17. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Как же так? И действительно! Потеряна илитарная информация. Придется продолжать читать бэхоцэ и коноплировать сплоет от заката и до рассвета включительно ,D
     
    Aoizora нравится это.
  18. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Когда крелка в очередной раз застыдили, он всё файло с ядиска снес и сказал хрен вам, а не мой визер.
     
  19. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    f13nd, или просто искать самого себя с левых никнеймов перестало быть мейнстримом и теперь поцыенты ищут свои же сорцы (а вдруг кто-то за десятилетие таки проникся и сохронил log.txt, и всё-всё-всё)
     
  20. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    301
    а где клерк щас тусит ?