Exception Directory и загрузчик PE

Тема в разделе "WASM.X64", создана пользователем Process Hacker, 16 сен 2017.

  1. Process Hacker

    Process Hacker New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2017
    Сообщения:
    2
    Всем привет.

    Есть PE-файл со static-линковкой который требуется отработать в памяти (приложение на C++, собирается в VS 2015). Падает не доходя до точки входа (стадия инициализации рантайма).
    Отладка подсказала, что происходит следующее сравнение

    Код (Text):
    1. cmp dword ptr ds:[rcx + rax], 0
    где rcx - смещение, rax - imagebase пациента, но rax == 0, через что мы и падаем..
    Судя по предшествующему этой проверке коду, вопрос касается VEH. По константам нагуглил такое - https://github.com/DarthTon/Blackbone/blob/master/src/BlackBone/ManualMap/MExcept.cpp . Посредством отладчика заполнил в динамике rax и место откуда оно его тянет - всё работает.
    Как-то мысли сошлись к тому, что я просто не добавил указатель на элементы IMAGE_DIRECTORY_ENTRY_EXCEPTION пациента в таблицу (RtlpDynamicFunctionTable) посредством RtlAddFunctionTable(), все же гостевое приложение обильно использует исключения. Ок, делаем - возвращает TRUE, но приложение все равно падает (вот у человека аналогичная проблема - https://wasm.in/threads/rtladdfunctiontable-i-dll-v-pamjati.24773/).

    Прежде чем с головой нырять в анализ рантайм-хлама или правку кода загружаемого, вопрос: как быть с ImageBase? В peb подмену производил - не помогает. Какие пути решения?

    Случай редкий, встречается не только у меня. Загрузчик написан и работает нормально. Пациент тоже нормально, но видать реализация MS-рантайма почему-то дает сбой.. в динамической версии (/MD) всё работает.

    Спасибо за внимание!
     
    yashechka нравится это.
  2. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Что за загрузчик? Что-то типа reflective DLL loader?
     
  3. Process Hacker

    Process Hacker New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2017
    Сообщения:
    2
  4. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Ответа не знаю, но хотел добавить что два примера которые вы предоставили (загрузка DLL без LoadLibrary) называется reflective DLL loader в среде infosec (metasploit, хакеры-шмакеры).

    Конкретно по вопросу, если есть crashdump (.dmp), могу посмотреть и подсказать в чём проблема. Компрессируйте 7z и закачивайте на любой сервис (Google Drive, Microsoft OneDrive, etc).

    Удачи.
     
  5. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Что такое АП?
     
  6. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    684
    наверное адресное пространство ...