Использование SEH для защиты от отладчиков.

Тема в разделе "WASM.RESEARCH", создана пользователем jangle, 14 мар 2005.

  1. jangle

    jangle New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2005
    Сообщения:
    56
    Адрес:
    Russia
    В одной из статей прочитал о том, что генерация SEH позволяет остановить отладку приложения. Решил проверить это на практике, скомпилировал простое приложение генерирующее SEH, оно в архиве. Запуская его под отладчиком PEBrowsePro получаю такое сообщение:



    SEH.EXE has encountered an exception code of -1073741819 (0xC00000005) at 004033A7



    Отладка после этого действительно останавливается!

    Однако, мне не ясно будет ли этот прием работать против

    Soft-Ice и ему подобных? И насколько сложно будет сломать

    такой антиотладочный прием?



    [​IMG] 2112030705__seh.zip
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Ну так отладчик для этого и предназначен, сообщать о багах в коде







    Нужно в опциях отладчика отключить реагирование на exception или ходить по shift+F9 (олли)
     
  3. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    отладчики боле мени ловятся на int3 в seh фрейме(это можно отключить). SI вроде ловится на int1 в seh(будет разница адрессов ошибки).
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    При возникновении исключения система вызывает зарегистрированный отладчик пользовательского режима.

    А сайс не отладчик, а драйвер, его на такие трюки не купишь :)
     
  5. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    S_T_A_S_ ловится на int1 по простой причине, если айса нет, то int1 доступна только из r-0 и соответственно вызывает ошибку сразу. Если айс работает, то int3 доступно из r-3 и происходит трассировка.
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ProgramMan

    Т.е. лучше использовать int 1, чтобы поймать любой отладчик, даже SoftIce, так?
     
  7. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Да не поймать его так. Все давно описано во вторых упаковщиках. Уровень DPL изменять. IceExt это делает. Не надоело еще старые вещи повторять?
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Так я поэтому и удивился. Хотя всё равно обработчик первого прерывания в сайсе должен вызвать задержку, так что я попробую его поймать измеряя время выполнения ловушки SEH...
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Quantum

    Было и это :)

    На форуме лежат измерения задержек при отладчике и без. Ссылку не помню, надо искать.
     
  10. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    volodya,речь идёт о SI а не о SI+IceExt....

    о том что IceExt возвращает idt в нормальный вид я в курсе.
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    IceStudent

    Чем по форуму искать... В общем, я уже измерил. Отладчик ловится в большинстве случаев, что меня вполне устраивает, а если и не поймается, то не страшно, т.к. это только первый уровень защиты :)
     
  12. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    А что ее искать, тема называется "IsDebuggerPresent?"