+ Reply to Thread
Results 1 to 5 of 5

Thread: Дебаггинг SEH

  1. #1

    Default Дебаггинг SEH

    Здравствуйте! Имеется кусок кода, который насколько я понял, устанавливает SEH.
    Code:
    .code:008714CD push    ebx             ; Это адрес нового хэндлера
    .code:008714CE push    large dword ptr fs:0 ; Это сохранение предыдущего хэндлера
    .code:008714D5 mov     large fs:0, esp
    .code:008714E2 int     1               ; - internal hardware - SINGLE-STEP
    .code:008714E2                         ; generated at end of each machine instruction if TF bit in FLAGS is set
    Хочу отдебажить этот хэндлер. Для этого беру адрес, который был запушен командой
    Code:
    push ebx
    . Его же я вижу, используя команду !exchain.
    Code:
    WINDBG>!exchain
    002ffcbc: image011e0000+1d60 (011e1d60)
    002ffd28: ntdll!RtlAddMandatoryAce+33c (7761e125)
    Invalid exception stack at ffffffff
    Хочу посмотреть, что по этому адресу находится, в IDA жму G, ввожу 011e1d60. И вижу следующее (приатачил архив с фото). Как функция, данные значения не распознаются. Если ставлю hardware брейкпоинт, приложение просто падает. Да и вообще, непонятно что это за значения. В общем, как мне отдебажить нужный мне хэндлер? И второй вопрос. Хэндлер начинает выполняться, после инструкции
    Code:
    int 1
    , но я не понимаю почему. 1 - это ведь номер прерывания для дебаггинга. При чем тут он? После этой инструкции что-то явно происходит, потому как меняется значение регистра eax. Трейс данного участка ничего не дает.
    Attached Files
    Last edited by thatskriptkid; 02-02-2018 at 16:38.

  2. #2
    Darwin's Avatar

    Default Re: Дебаггинг SEH

    Скорее всего есть VEH (Vectored Exception Handler) обработчик, в котором и происходят все проверки. Он вызывается раньше SEH-обработчика.
    Счастлив кто отдал, а не взял. (с) Inception

  3. #3

    Default Re: Дебаггинг SEH

    Это простой антиотладочный трюк: int 1 вызывает исключение, и если программа не под отладчиком, то выполнится обработчик, в противном случае дебаггер должен проигнорировать исключение, чтобы управление было передано на хендлер. Не имеет значения, как было сгенерировано исключение, это может быть int 3, обращение по неверному адресу или что-то иное.
    Используйте команду gn в WinDbg, которая пробросит исключение в программу. Что касается дизассемлера, то сконвертируйте байты в код и перейдите на точный адрес обработчика, там есть что-то похожее на код. Хотя проще использовать u, раз вы в WinDbg.
    Last edited by MorteNoir; 03-02-2018 at 11:58.

  4. #4

    Default Re: Дебаггинг SEH

    Использую IDA с windbg. Прикладываю еще один скрин, с ним намного понятнее. На нем изображены два куска кода, в первом идет создание SEH, во втором VEH. Но до VEH еще дело не доходит, как вы можете увидеть. Проблема у меня, именно в первом куске кода, до
    Code:
    or ebp, 1
    Скорее всего есть VEH (Vectored Exception Handler) обработчик
    Есть такой, но он объявляется позже.

    int 1 вызывает исключение
    К сожалению, в иде, не вижу, что генерируется исключение.

    Что касается дизассемлера, то сконвертируйте байты в код и перейдите на точный адрес обработчика, там есть что-то похожее на код.
    В иде, команда Edit - Functions - Create function (P) не дает результата.
    Attached Files

  5. #5

    Default Re: Дебаггинг SEH

    К сожалению, в иде, не вижу, что генерируется исключение.
    Попробуйте в другом отладчике вне Иды. Вообще, на будущее рекомендую не ограничивать себя какими-то определёнными инструментами. Те же дебаггеры не всегда ведут себя, как ожидаешь, и тогда нужно переключаться на иной.

    В иде, команда Edit - Functions - Create function (P) не дает результата.
    На первом скрине у вас массив из двордов, который создала Ида, он может не сконвертироваться в код, нужно сначала преобразовать его в байты кнопкой d.

  6. Пользователь сказал cпасибо:
    dukeBarman (06-02-2018)
+ Reply to Thread

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:20
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org