Стактрейс на AMD64

Тема в разделе "WASM.BEGINNERS", создана пользователем HoShiMin, 8 ноя 2017.

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.486
    Адрес:
    Россия, Нижний Новгород
    Доброго дня форумчанам. Пытаюсь получить стактрейс на х64 с помощью StackWalk64.
    На х32 всё работает, на х64 получаю стек адресов, по которым ничего не лежит: https://hastebin.com/oravicuwep.cpp

    upload_2017-11-8_2-41-56.png

    И сам стактрейс слишком маленький (на х32, повторюсь, всё работает). Оптимизации отключены. Что не так?
     
  2. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.486
    Адрес:
    Россия, Нижний Новгород
    Если получать стек чужого потока, то выдаёт меньше, чем нужно (адреса верные):
    upload_2017-11-8_17-33-36.png
     
  3. Indy_

    Indy_ Well-Known Member

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

    Никак вы не снимете бэктрейс на 64 в статике. Потому что это не поддерживает архитектура. Лишь при наличии дебаг символов, как делает это отладчик путём статического анализа и эвристики можно сформировать данный лог. Но это эмпирическое, вероятное решение, не удивительно что даже при не корректных адресах у вас на скрине снятие лога не прервано из за исключения. Коменты ведь есть в сурках нт, почему вы не читаете.

    Исходная задача какая, зачем вам стековый дамп ?
     
  4. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.486
    Адрес:
    Россия, Нижний Новгород
    Для антиинжекта: поставить хук на LdrLoadDll и смотреть, кто его вызвал, а также периодически проверять стактрейс потоков, чтобы отслеживать смену контекста через SetThreadContext
     
  5. Indy_

    Indy_ Well-Known Member

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

    Была уже тема, эти костыли не решение.
     
  6. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    Вообще решение есть, но требует драйвера и Intel платформы начиная с 5 Gen (лучше конечно с 6 Gen).
    Но со сменой контекста у вас все равно будут проблемы - PatchGuard
     
  7. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.486
    Адрес:
    Россия, Нижний Новгород
    Очень желательно всё сделать в юзермоде, применить любую эвристику, чтобы узнать об инжекте, будь то CreateRemoteThread(LoadLibrary), APC, AppInit_DLLs, оконные хуки или ручной маппинг. Визоры - слишком хардкор (плюс, защищать надо в том числе софт без исходников), а вмп от хуков апишек не защищает. Но и аудитория у защищаемого софта не настолько продвинутая, чтобы была действительная необходимость в абсолютной защите. Нужна лишь достаточная.
     
  8. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    Тогда вам надо забыть о трейсе, в юзере вы такое не получите, тем более, что софт без исходников.
    Как говорил инди - останутся только сплошные костыли, типа поставить хук на экспорты, поставить хук на аллокаторы памяти и проч, а потом в хуках, самому анализировать стек, что будет далеко не всегда точно.
     
  9. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.486
    Адрес:
    Россия, Нижний Новгород
    Как тогда получается у ProcessHacker'a? В исходниках тот же StackWalk64, драйвер отключен
    upload_2017-11-9_0-38-39.png
     
  10. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    HoShiMin,
    во первых, он не всегда такой полный
    во вторых - это ж саспенд состояние. + если посмотрите сорцы - берется из валиндого тред контекста, который содержит корректный стек фрейм. Я ж написал что - анализировать можно, но не всегда это будет так точно.
    пример явно левой хрени:
    phscr.jpg
     
  11. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.486
    Адрес:
    Россия, Нижний Новгород
    Эх, обидно
     
  12. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
    Я постараюсь написать как-нибудь статейку про защиту в юзер моде.