Возможен ли перехват инструкций?

Тема в разделе "WASM.ASSEMBLER", создана пользователем MagnumGT, 23 ноя 2007.

  1. MagnumGT

    MagnumGT New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    122
    Сабж
    Есть код

    mov eax, eax
    mov ebx, eax
    mov ecx, eax

    Возможно ли до начала выполнения каждой инструкции исполнять свой код, скажем, xor eax, eax не перестраивая оригинальный код? а просто как-то перехватывая начало новой инструкции

    Возможно ли это сделать, если да, то как? ЗЫ: int3 не предлагать
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    MagnumGT
    hardware breakpoint?
     
  3. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    наверное возможно для инструкций BOUND и DIV 0/IDIV 0 если задействовать обработчики прерываний INT 4 и INTO
     
  4. MagnumGT

    MagnumGT New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    122
    Финт в том, что код юзается в самоходной программе. Динамическая расшифровка. Юзать дедовским методом SEH не очень охота.

    q_q
    Думал уже об этом.
    Прийдется после каждой инструкции вручную бряк ставить.

    Да, dr-регистры вроде из р3 закрыты. Как установить хардварный бряк из программы?
     
  5. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    Возможен. Может быть скоро я выложу на паблик реализующую это библиотеку. Принцип работы - рекомпиляция кода по первому исполнению на лету с эмуляцией некоторых инструкций.

    UPD:
    Правда использовать ее в вашем случае - это из пушки по воробьям :)
     
  6. MagnumGT

    MagnumGT New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    122
    Если это секрет - можно хотя бы основные моменты в личку?
    На паблике это не появится.
     
  7. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    Ничего секретного в этом нет, но реализация гораздо сложнее, нежели к примеру самотрассировка. Еще реализация требует для своей работы с десяток мегабайт памяти.
     
  8. MagnumGT

    MagnumGT New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    122
    Про самотрассировку. Возможно ли разделить свой код на

    Код (Text):
    1. Part1:
    2. xor eax, eax
    3. ....
    4. mov eax, 1234
    5. ret
    6.  
    7. Part2:
    8. <тут обработчик>
    9. ...
    10. ret
    И методом самотрассировки после каждой выполненой инструкции выполнять код Part2, не юзая автоустановку хардвардных бряков?
     
  9. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    MagnumGT
    Shadow Walker.
    в юзермоде тебе надо поставить только один сех. В кернеле всё ещё прощще. Да и надёжнее. Это более универсальный механизм, чем всякие там прекомпиляции и т.д.
     
  10. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    MagnumGT
    Предлагаю int1.
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    k3internal
    А можно подробнее?
     
  12. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Возможно, поможет флаг EFLAGS.TF? Правда, для обработки исключения SEH использовать не удастся -- либо через отладочные события, ибо через ring0.
     
  13. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    TrapFlag + VEH
    На васме даже статья есть: http://www.wasm.ru/article.php?article=veh
     
  14. frisbee

    frisbee New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2007
    Сообщения:
    1
    mix_mix
    только для XP и выше. 2 к отдыхает.

    IceStudent
    хм. в юзермоде страничка с кодом получает статус сторожевой, при доступе к ней срабатывает seh, далее смотришь где сработало, если не то что надо операцию повторяешь. В кернеле аналогично, страничке устанавливаем атрибут нет доступа и вешаем обработчик на #PF.
     
  15. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    MagnumGT

    Да, dr-регистры вроде из р3 закрыты - SetThreadContext
    А чем TF из Flags не подходит.
     
  16. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    MagnumGT
    Как установить хардварный бряк из программы?
    :) Olly это делает.
     
  17. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    PROFi
    А я вот когда такими вещами делал так:
    1. ставил сех
    2. вызывал преднамерено багу
    3. В полученном контексте правил dr`ы
    4. делал продолжить работу

    Может сейчас уже это не работает?
     
  18. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    работает =) так например execryptor сопротивляется отладке. Но кажется больше путей нет кроме как этот и SetThreadContext
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    frisbee
    Я о Shadow Walker спрашивал, это оно и есть?
     
  20. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    EvilsInterrupt

    Да работает, только код на 64 бита плохо переносится - если нужно внедрить этот код.