Аналог ptrace в win64

Тема в разделе "WASM.WIN32", создана пользователем semen, 4 май 2009.

  1. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Ну вот и нашелся сисколл (не знал), только нам от этого не легче, если недостаточно проверяются поля структуры CONTEXT и привилегии, это мне пока не критично. Неужели брякнуться на сисколл такая непосильная задача для винды :dntknw:
     
  2. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    semen
    Можно и через msr, просто тут на форуме видел заметку, что такой перехват может конфликтовать с программами которые сами модифицируют msr, но как я понимаю такие ситуации не слишком часты :).
    Насчет трейсов я не могу подсказать к сожалению.
     
  3. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Значит пока осталось 2 направления возможного решения:
    1. Найти кернел отладчик с уже подписанным драйвером, который можно использовать.
    2. Исследовать возможность более-менее официального хука сисколов. Качаю WRK, надеюсь в нем есть поддержка трейсов и можно будет посмотреть как они сделаны.
     
  4. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    о чем вообще эта тема?
     
  5. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    ohne
    Найти лучший аналог никсового API ptrace в винде. Единственное что может ptrace и не может винда - брякнуться на сисколе. Сделать это в винде и есть тема.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ну так в чём проблема, запиши Int3 на хэндлер и обрабатывай исключение :lol:
     
  7. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    На хэндлер чего? Нужно брякнуться на инструкции sysenter.
    Если речь о кернел моде то такие методы как обход патчгуарда, перезапись msr, использование dr* крайне нежелательны. Хочется найти более-менее официальный метод через каллбеки (пока есть надежда, т.к. трейсы както релизованы же), если до кернела вообще дойдет.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    semen
    А что эта инструкция делает знаешь ?
    Вот на хэндлер точку останова и ставим.
    Кстати в манах сказано что регистр флажков можно заранее определить:
    Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A
    4.8.8 Fast System Calls in 64-bit Mode
    • EFLAGS — Loaded from R11.
    Не знаю что за регистр, но вероятно в него можно записать маску для EFlags.TF и тогда при вызове будет сгенерировано трассировочное исключение.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    ps: хотябы не поленился почитать, читать за вас это уже совсем наглость.
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    R11 -- это обычный регистр общего назначения в 64битном режиме. Их 8 штук добавилось, R8-R15.
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Тогда не подходит, его пользовательское приложение ведь изменить может если он общего назначения.
     
  12. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    semen
    Посмотрите в wrk файлы, имеющие отношение к WMI events (Ntwmi.h, Callouts.c), похоже это то, что вам нужно.
     
  13. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Clerk
    Конечно я смотрел как работает эта инструкция еще до старта топика. Почему и написал в самом начале, что dr* мне ничем не помогут, поставить бряк на этот хендрер нельзя т.к. произойдет перегрузка контекста и dr* будут уже другими.
    TSS
    Вот это и смотрю сейчас.
     
  14. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    semen
    >Под никсами реализовал через ptrace - все работает
    Можно подробнее? Просто в винде как я понял Trace API нужен для профилирования и статистики, и если ктото выполнит sysenter, то это мы увидим, поймав event, но изменить то уже не сможем. Хотя там можно установить нотификаторы вроде как... Вобщем расскажите как это работает в линуксе, оч интересно )
     
  15. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    semen
    без хуков в язде тут не обойтись, иначе производительность будет падать тк придеться проверять каждую инструкцию, хотя есть такая проблема что чтобы проверять надо знать что делает конкретный вызов, а это значит писать по сути обработчик для всех "опасных вызывов" да ко всему этот способ не документированный.. короче куча минусов, и узких мест.


    PS не понимаю что в этой теме изначально было не понятного, автор все ясно расписал еще в первом посте.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    SPA
    Описал он не ясно, ибо сам не понимает. Почему адрес обработчика мср не записать нужный ?
    Это не подходит, обязательно надо как в линукс.. нужно чтоб трассировочное исключение возникало.
    Да будет известно что механизм входа в сервис и возврата реализован криво в виндоз и не позволяет выполнять какойлибо останов или нотификацию дебуггера, за исключением релоада Dr - контекста.
     
  17. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    TSS
    ptrace -- древнючий (и некогда единственный) способ отладки в UNIX. В linux, например, его уже нет, но в FreeBSD 6.2, например, еще можно встретить. Позволяет отлаживать только непосредственного потомка отладочного процесса, и то, только с позволения отлаживаемого процесса (трассируемый процесс должен сам выполнить ptrace с командой PT_TRACE_ME). С помощью ptrace можно читать и писать в адресное пространство отлажваемого процесса и получать некоторые события из него.

    Почитать про ptrace можно, например, здесь: http://www.freebsd.org/cgi/man.cgi?query=ptrace&apropos=0&sektion=0&manpath=FreeBSD+7.2-RELEASE&format=html
     
  18. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    А, ну это аналог debug api в винде практически. Значит WMI ф-ции которые я посоветовал выше не подходят, они реализованы для профилирования и в данной задаче ничем не помогут. Остается только хватать sysenter.
     
  19. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    TSS
    Именно, трейс апи нам не поможет для реализации задуманного, но возможно мы можем сделать "хороший" перехват сисколов так же как это делает трейс апи, если дойдет до решения в кернеле.
    В никсах сделано очень просто - есть калбеки непосредственно для ptrace: http://lxr.free-electrons.com/source/arch/x86/kernel/entry_64.S
    В юзерможе же надежна на уже существующий и подписанный драйвер от какого-нибудь отладчика или самого мс. Ведь процесс подписи драйвера процесс не быстрый и не бесплатный, а не подписанный драйвер только для домашних поделок годится, где можно отключить проверку подписи.
    SPA
    Я просто неверно рассчитывал, что все знают, что такое ptrace. Отредактировать, увы, уже не могу.
     
  20. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Clerk
    Я знаю про перехват через msr, я же его сам предложил TSS вместо установки dr. Криво не криво, а както сделать придется. Если я не прав и установкой dr в юзермоде можно обойтись - поправь, это первое что я попробовал и не получилось, потом и прочитал что не выйдет и почему. Да и странно бы было, что юзермодный отладчик вдруг брякнутля на инструкции в 0м кольце. Мне не обязательно отладочное исключение, мне всеравно как, но лучше обойтись без кернела, например с уже существующим драйвером через иоктл пообщаться, я не против.
    Mika0x65
    В линуксе он никогда не исчезал, даже в самых последних кернелах. У х64 кернела даже долгое время был эксполит его юзающий. А другого адекватного АПИ для отладки в нем и нету до сих пор (покрайней мере проштудировав все сисколы x64 кернела я не нашел другого).