Возьня с DEP

Тема в разделе "WASM.WIN32", создана пользователем superakira, 7 фев 2018.

  1. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    389
    Хотел уточнить как лучше быть.
    Исходные - есть процесс с аппаратным депом, который до кучи ставит флажок перманент на странички.
    Ставит деп в рантайме (хотя так то не важно).
    Хотел бы узнать по NtSetInformationProcess еще актуально? Пока ревершу и перепроверяю ядро от 10, но малоли в курсе.
    Короче как бы мне сбросить деп, но без шума гама (да я могу залезть на стартре отловить что надо и не дать установить, но так не хотелось бы).

    Да.. есть еще момент и его пока разбираю. Кейс в том, что дергается NtSetInformationProcess через h-gates из-под wow для нативного 64 битного. Ну это если это еще рабочи вариант в принципе конечно.

    И плиз. Давайте не как обычно обсуждать =) Ну вы понели))

    Так как 10 апается со скорость электровеника, то хз, что тут актуально, поэтому спросил.

    Заранее спасибо.
     
    Последнее редактирование: 7 фев 2018
  2. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    389
    Решил свою задачу по другому, но таки надо этот момент не забыть и покопать попозже. Если буду успешен и что-то получиться дельное, то распишу и выложу.
     
  3. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    389
    Короче я сморозил дичь)
    NtSetInformationProcess не актуально в принципе на данный момент ибо деп - это перманент для 64 битов (если глобально не отключать, но это не нужно).
    По сути был сайд эффет и деп мне не мешает, но прикол с SetProcessMitigationPolicy а именно c ProcessDynamicCodePolicy, раньше на целевом апп эта штука была с AllowThreadOptOut, что позволяло моему потоку дропнуть эту штуку и алоцировать execute странички... таперича п*зда... везде C000604 и блджад это вот прям выкатилось. Как меня МС зателебомкал.. Какое-то ебобо)
    Отреверсив аппликуху, вижу где ставиться, они там негодяи еще перепроверяют себя.

    Хотя... Вот поменять атрибуты вроде как дает, а аллоцировать с execute нет. Либо меня глючит правда, проверяю этот вот момент.
     
  4. Indy_

    Indy_ Well-Known Member

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

    Эти механизмы либо наследуются, те отключить если запущены нельзя, либо для этого нужны соответствующие права. Это всё защита от OP, иначе просто получите соответствующие события и обработайте их(так как ваш код уже начал выполняться, то такая защита не имеет смысла). ProcessDynamicCodePolicy может вызвать проблемы, так как часто нужна исполняемая память. Но опять же, если ваш код получил управление, то выделять исполняемые буфера не особо нужно, например код можно выполнить через его эмуляцию, что не требует исполняемой памяти.
     
  5. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    389
    Indy_, выполнить код через эмуляцию - имешь ввиду собрать цепочку из существующего? это должен быть фрэймворк, который в любом процессе, на любой системе соберет мне цепочку по паттерну с параметрами... я хз сколько это по времени надо решать/делать и будет ли в итоге норм результат.
    Те это вопрос стабильности решения. И это 32/64 =) Те множим проблему на 2.
     
  6. Indy_

    Indy_ Well-Known Member

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

    Исполняемая память нужна для быстрого исполнения - прямого или динамической эмуляции, во втором случае поток инструкций копируется в буфер и там исполняется, для получения управления после исполнения блока дописывается ветвление. Обычная эмуляция это когда инструкция разлаживается на примитивы, имитируется её работа. Так работают ав эмуляторы, некоторые виртуальные машины или dbi инструменты, типо пина. Тогда не нужна исполняемая память, так как инструкция только читается(r-df), но есть недостатки у такой эмуляции - значительная просадка профайла(тормозит), очень большой размер эмулятора и как следствие его не стабильность.
     
  7. superakira

    superakira Active Member

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

    Хотя если условия жесткие.. то возможно эмуляция неизбежна..
     
    Последнее редактирование: 14 фев 2018
  8. Indy_

    Indy_ Well-Known Member

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

    Это единственный способ что то выполнить, если аллокация X-памяти заблокирована.

    Опишите задачу более подробно.
     
  9. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    389
    Indy_, да уже отписал. ты написал одновременно, пока я редактировал.

    Но остается вопрос.
    Если заблокирована испоняемая (выделение и смена атрибута на нее), но как перенаправить исполнение на свой код с сис апи?
    банальный сплайс. те эмуляция решит часть задачи, но эту вот непонятно (джамп в начале функи)
     
  10. Indy_

    Indy_ Well-Known Member

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

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

    Если вам нужно мониторить сервисы и варианты выше не подходят, то остаётся лишь один метод(без привилегий ядра) - использовать wmi логгер. Вот только я не видел реализаций, вам придётся самому это всё изучать, реверсить, а механизмы там не простые. Да и метод сомнительный и не обкатанный.
     
  11. superakira

    superakira Active Member

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

    Если есть доступ в ядро - то сбрасывается 1 бит. Это даже на паблике есть в блэкбоне. Единственный гемор - это не портабельно, оффсеты.

    Про вми логгер - это на долго и не понятен профит.
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.058
    Адрес:
    Russia
    Можно еще заюзать Intel IPT (вместо WMI) то такие да - реализация не тривиальна.
     
  13. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    389
    TermoSINteZ, привязываться к камню - вообще не хотелось бы.
     
  14. Indy_

    Indy_ Well-Known Member

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

    > Те если мы говорим про кейс с ловушками - то ты говоришь про програмную эмуляцию и отлов входа через отладчик встроенный - я правильно понял тебя?

    Я не понимаю вас. Ловушки это один из трёх типов событий(исключений), когда процессор прекращает выполнять инструкцию и вызывает спец код, который решает проблему. Про отладчик я ничего не говорил :)

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

    > Если есть доступ в ядро - то сбрасывается 1 бит.

    Если есть ядерный доступ, то и вопроса нет.
     
  15. superakira

    superakira Active Member

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

    Indy_ Well-Known Member

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

    Не знаю данный механизм, но любой подчиняется стандартной защите. Тоесть каким то образом событие будет передаваться между pl. А способ доставки событий определяет актуальность метода в данном случае. Даже если это и будет работать, то на новых площадках и тормозным способом. Обратная совместимость отсутствует.
     
  17. Indy_

    Indy_ Well-Known Member

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

    > код еще не в валидном образе.

    Есть куча системной защиты, для которой ваш код - невалид. Тот же например dep/cfg/cfi/etc. Я же говорил, опишите подробно задачу.
     
  18. superakira

    superakira Active Member

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

    Indy_ Well-Known Member

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

    Никак ваша задача кроме эмуляции не решается. Берите интел ксед, и его обёртку - пин и фиксите, собирайте. По профайлу это самый шустрый мотор(табличный декодер).
     
  20. superakira

    superakira Active Member

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