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

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

  1. MagnumGT

    MagnumGT New Member

    Blog Posts:
    0
    Сабж
    Есть код

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

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

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

    q_q New Member

    Blog Posts:
    0
    MagnumGT
    hardware breakpoint?
     
  3. Mikl_

    Mikl_ New Member

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

    MagnumGT New Member

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

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

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

    ntldr New Member

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

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

    MagnumGT New Member

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

    ntldr New Member

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

    MagnumGT New Member

    Blog Posts:
    0
    Про самотрассировку. Возможно ли разделить свой код на

    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
    MagnumGT
    Shadow Walker.
    в юзермоде тебе надо поставить только один сех. В кернеле всё ещё прощще. Да и надёжнее. Это более универсальный механизм, чем всякие там прекомпиляции и т.д.
     
  10. crypto

    crypto Active Member

    Blog Posts:
    0
    MagnumGT
    Предлагаю int1.
     
  11. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    k3internal
    А можно подробнее?
     
  12. Mika0x65

    Mika0x65 New Member

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

    mix_mix Михаил

    Blog Posts:
    0
    TrapFlag + VEH
    На васме даже статья есть: http://www.wasm.ru/article.php?article=veh
     
  14. frisbee

    frisbee New Member

    Blog Posts:
    0
    mix_mix
    только для XP и выше. 2 к отдыхает.

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

    PROFi New Member

    Blog Posts:
    0
    MagnumGT

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

    q_q New Member

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

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

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

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

    rain New Member

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

    IceStudent Active Member

    Blog Posts:
    0
    frisbee
    Я о Shadow Walker спрашивал, это оно и есть?
     
  20. PROFi

    PROFi New Member

    Blog Posts:
    0
    EvilsInterrupt

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