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

Discussion in 'WASM.ASSEMBLER' started by MagnumGT, Nov 23, 2007.

  1. MagnumGT

    MagnumGT New Member

    Blog Posts:
    0
    Joined:
    Nov 9, 2007
    Messages:
    122
    Сабж
    Есть код

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

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

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

    q_q New Member

    Blog Posts:
    0
    Joined:
    Oct 5, 2003
    Messages:
    1,706
    MagnumGT
    hardware breakpoint?
     
  3. Mikl_

    Mikl_ New Member

    Blog Posts:
    0
    Joined:
    Nov 14, 2006
    Messages:
    907
    наверное возможно для инструкций BOUND и DIV 0/IDIV 0 если задействовать обработчики прерываний INT 4 и INTO
     
  4. MagnumGT

    MagnumGT New Member

    Blog Posts:
    0
    Joined:
    Nov 9, 2007
    Messages:
    122
    Финт в том, что код юзается в самоходной программе. Динамическая расшифровка. Юзать дедовским методом SEH не очень охота.

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

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

    ntldr New Member

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

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

    MagnumGT New Member

    Blog Posts:
    0
    Joined:
    Nov 9, 2007
    Messages:
    122
    Если это секрет - можно хотя бы основные моменты в личку?
    На паблике это не появится.
     
  7. ntldr

    ntldr New Member

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

    MagnumGT New Member

    Blog Posts:
    0
    Joined:
    Nov 9, 2007
    Messages:
    122
    Про самотрассировку. Возможно ли разделить свой код на

    Code (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

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

    crypto Active Member

    Blog Posts:
    0
    Joined:
    Dec 13, 2005
    Messages:
    2,533
    MagnumGT
    Предлагаю int1.
     
  11. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    k3internal
    А можно подробнее?
     
  12. Mika0x65

    Mika0x65 New Member

    Blog Posts:
    0
    Joined:
    Jul 30, 2005
    Messages:
    1,384
    Возможно, поможет флаг EFLAGS.TF? Правда, для обработки исключения SEH использовать не удастся -- либо через отладочные события, ибо через ring0.
     
  13. mix_mix

    mix_mix Михаил

    Blog Posts:
    0
    Joined:
    Oct 8, 2005
    Messages:
    277
    Location:
    Токио
    TrapFlag + VEH
    На васме даже статья есть: http://www.wasm.ru/article.php?article=veh
     
  14. frisbee

    frisbee New Member

    Blog Posts:
    0
    Joined:
    Nov 21, 2007
    Messages:
    1
    mix_mix
    только для XP и выше. 2 к отдыхает.

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

    PROFi New Member

    Blog Posts:
    0
    Joined:
    Jul 13, 2003
    Messages:
    690
    MagnumGT

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

    q_q New Member

    Blog Posts:
    0
    Joined:
    Oct 5, 2003
    Messages:
    1,706
    MagnumGT
    Как установить хардварный бряк из программы?
    :) Olly это делает.
     
  17. EvilsInterrupt

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

    Blog Posts:
    0
    Joined:
    Oct 28, 2003
    Messages:
    2,428
    Location:
    Russia
    PROFi
    А я вот когда такими вещами делал так:
    1. ставил сех
    2. вызывал преднамерено багу
    3. В полученном контексте правил dr`ы
    4. делал продолжить работу

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

    rain New Member

    Blog Posts:
    0
    Joined:
    Apr 22, 2006
    Messages:
    976
    работает =) так например execryptor сопротивляется отладке. Но кажется больше путей нет кроме как этот и SetThreadContext
     
  19. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    frisbee
    Я о Shadow Walker спрашивал, это оно и есть?
     
  20. PROFi

    PROFi New Member

    Blog Posts:
    0
    Joined:
    Jul 13, 2003
    Messages:
    690
    EvilsInterrupt

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