PE Loader и TLS

Тема в разделе "WASM.WIN32", создана пользователем jeer0, 8 дек 2017.

  1. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    326
    Indy_, я так понял это белоруский хумор)? Что за фэйк? Что за кум? Хорошо хоть без картошки =) Я потерял интерес к беседе в таком ключе.
     
  2. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    326
    Для тех кто решит использовать такую технику.
    По факту она рабочая. На всех виндах работает. Тестил 7-10 32/64.
    Из проблемных моментов - это работа в EPM. Имеется в виду митигэйшион на создание исполняемой памяти. Те отвал в ZwMapViewOfSection c флажком EXECUTE со статусом C0000604, ну и хуков на апи в нтдлл. Но это обходиться легитимными средствами как ни странно, если пореверсить ядро и посмотреть откуда там этот статус растет.
    Из неприятного.
    Тот же PcHunter видит, что есть хайджек модуля, который подменили. Но теперь после апдейта он не работает, так что пойдет.

    НО.
    Это всяко лучше чем смопальное говно. Всего просто не учесть. А так полный рантайм со сложным кодом работает без проблем. Что открывает перспективы к норм кодированию, без своих велосипедов, чисто энтерпрайз)
     
    PaperMoon и Indy_ нравится это.
  3. Indy_

    Indy_ Well-Known Member

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

    В ядре 8-ки данного статуса нет, как и на msdn. Последний там следующий:

    Но данный статус находит гугл как STATUS_DYNAMIC_CODE_BLOCKED. Это значит что система отклоняет запрос на аллокацию исполняемой памяти. Не вижу проблемы в этом случае.
     
  4. superakira

    superakira Active Member

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

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    326
    Апну тему еще раз...
    не очень приятный момент с релокацие образа нтдлл - ибо аваст/авг и прочие ставят хуки и при релокации они тянуться с собой.
    Предпринял попытку взять чистый образ с диска, ручную загрузку чистого с установленными хуками и вызов LdrLoadDll уже там, но как всегда лулзы - так как хип не настроен и хэндл на него лежит внутри, то валится. остальное норм, до хипа не дотянуться портабельными средствами ибо он дергается в основном из Ldrp* (те не эекспортируется), дернуть стартовую для процесса не вариант. ибо там помимо хипа куча всего (для образа exe), проверил линейку ядер от 7 до последней 10... думал выцепить дизассемблером переменную из функи, но черт... сигнатуры плывут, код сильно меняется. Это не решение.
    Откатывать образ нтдлл уже загруженный не хотелось бы.. хотя.. в общем будет идея как дотянуться до хипа- маякните.
     
  6. Indy_

    Indy_ Well-Known Member

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

    А что именно не так с нэйтивом ?
    Он не релоцируется, хоть имеет релоки на 86, но загружается первым и содержит глобальные указатели. На 64 rip адресация и релоки не нужны. Это значит что можно его копировать как строку.
    Сброс загрузчика необходим лишь в одном случае - это запуск образа с тлс. Но это очень плохой способ, отвалится многое. На 86 первый фейл будет при соеденении с csrss, повторное подключение невозможно.
     

    Вложения:

    • RPE.rar
      Размер файла:
      8,5 КБ
      Просмотров:
      42
  7. superakira

    superakira Active Member

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

    PaperMoon New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2017
    Сообщения:
    16
    Я попробовал, отлично получилось с дллкой. А вот с PE не очень понятно можно ли грузануть экзешник, вроде LoadLibrary отрабатывает, бинарь обрабатывается Ldr* ф-циями, релоки отрабатывают, но при попытке на точку входа прыгнуть, падает на ЦРТ ф-циях. Это вообще возможно, бинарь загрузить данной техникой?
     
  9. superakira

    superakira Active Member

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

    PaperMoon New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2017
    Сообщения:
    16
    Вру. Сейчас чекнул на минимальном фасмовском сепле Hello World x86, не обрабатываются импорты, секции не мапятся в вирт память, релоков тож нет, нифига короче не делается по сути. Попробую найти на чём зытыкается загрузчик, я так думаю что кроме отсутствия IMAGE_FILE_DLL 0x2000 в Characteristics ещё на чём-то
     
  11. superakira

    superakira Active Member

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

    Indy_ Well-Known Member

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

    > Ну и кастани инде в тред - он думаю уже пробовал и скажет точнее.

    В кодовой секции не хранятся переменные, никак это не может влиять на хип. Есть специфическая функция, которая обычно не включается, это отладочный механизм - страничный хип(page heap). Он саппортится верифером - патчатся апи хипа верифером, это никогда обычно не запускается.
    Так что я не вижу проблемы. А на счёт загрузки exe - гиблая затея, это никак ровно не сделать, если инициализация процесса прошла, я говорил.
    Блокировка исполняемой памяти - с этим ничего не поделать. Но и просто так данный запрет не используется, отвалится в обычном апп многое.
     
  13. superakira

    superakira Active Member

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

    superakira Active Member

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

    Indy_ Well-Known Member

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

    Во первых нужно ровно всё делать, согласно архитектуре, заранее всё продумать, ну а если есть косяки то они за минуты разбираются отладчиком.
    А во вторых загрузочный логгер весьма годный инструмент. Он позволяет отследить весь ход загрузки в мельчайших подробностях.