Как выбраться из SEH'a?

Тема в разделе "WASM.RESEARCH", создана пользователем Scr[1]pt0S, 13 ноя 2006.

  1. Scr[1]pt0S

    Scr[1]pt0S New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    6
    Часто встречаю в отладчике(Олька) антиотладочный приём seh.
    При трасировке кидает то в ядро,то к чёрту на рога,но ни как на необходимый участок
    кода :dntknw:
    Нужны хотябы приблизительные методы(не откажусь от конкретных решений) каких образом всё это безобразие закончить?
    Ведь "не затирать" же mov eax,fs:[0]
    Статьи Мэта Питрека читал как мог,но мне статьи такого класа почти непосильны
     
  2. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Shift+Fx; where x=[7,8,9]
     
  3. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Scr[1]pt0S
    Попробуй в натройках отладчика включить игнор на сехи. Alt+O -> Exception и поставь все галки, можеш добавть последнее исключение на игнор, или поставь range исключений от 0 до FFFFFFFF.
     
  4. Scr[1]pt0S

    Scr[1]pt0S New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    6
    Спасибо за решения,но почему-то данные способы не помогают.
    Процесс терменируется,но при этом приложение запускается исправно,так было и до этого,смотрю в список потоков их там аж 10,каким образом проследить код в потоках?
    может быть они ответственные за выкидывание процесса?
     
  5. researchist

    researchist New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2006
    Сообщения:
    21
    столкнулся с этой же проблемой..
    включение игнора исключений не помогает
    как быть ?
     
  6. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Scr[1]pt0S
    Может ты пытаешся протектор какойто отлаживать (похоже ЕхеКриптор :)) читай инфу по снятию прота.
    researchist
    Тожесамое.
     
  7. researchist

    researchist New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2006
    Сообщения:
    21
    PEID и другие подобные проги не видят никаких протекторов....
     
  8. Scr[1]pt0S

    Scr[1]pt0S New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    6
    Криптором там и не пахнет,пакеров и близко не видно,просто такой
    антиотладочный трюк(походу арифметическая операция приводит к плохому результату
    -1,0,nil и срабатывает seh не ОС а проги)
     
  9. researchist

    researchist New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2006
    Сообщения:
    21
    да так оно и есть, только вот странно, что про обход этого нет информации...
    может и правда можно как то "затереть" эти mov eax,fs:[0] ?
     
  10. Scr[1]pt0S

    Scr[1]pt0S New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    6
    Это конечно можно сделать только стек прийдётся выравнивать,что есть гимор.
    researchist а ты случайно не при креке встретился с этим?
    может быть вместе решили бы эту проблему,как считаешь?
     
  11. tar4

    tar4 New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    43
    Ты имеешь ввиду трассировку Seh-ов в Оле? Если так, то проще Seh-ы проходить через скрипт. А если в ручную, то попадая
    на Seh, в стеке по [esp+4] находится его вершина. Ставишь бряк на этот адрес и далее Shift-F9 и ты на вершине и можешь продолжать трассировку.
     
  12. researchist

    researchist New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2006
    Сообщения:
    21
    Scr[1]pt0S
    да именно при нем

    tar4
    точно!
    есть какой на примете?
     
  13. tar4

    tar4 New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    43
    researchist
    В Оле есть плугин ollyScript, там ассемблероподобный язык. Примеров куча.
     
  14. Scr[1]pt0S

    Scr[1]pt0S New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    6
    Недавно перечитал статьи Мэта.И вот что надыбал
    по адресу fs:[0] хранится теb потока
    первое двойное слово говорит о ExecptionRegistration(данная структура представляет из
    связанный список,первый dword говорит о обработчике ИС который будет вызван при
    exception).Так вот его и надо править т.к защита в проге ставит свои обработчики(то что
    программер накодил,кроме этого ОСь оставляет по одному дефолтному обработчику на
    каждый поток).Попытался с помощью скриптов хотябы прочитать адреса обработчиков
    выглядело это у меня как будто так:

    mov addr_meth,fs:[0] <-- error
    mov addr,[addr_meth]
    log addr

    плугин скриптов жутко ворчит на ошибку,похоже что нельзя использовать fs регистр?
    вобщем дело техники,но у меня с практикой туго, помогите советов,буду благодарен.
     
  15. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Scr[1]pt0S
    Что-то вы с researchist вокруг да около топчетесь, но кроме общих слов и "воплей о помощи" от вас еще ничего не слышали ;)
    Конкретный вопрос - прочитать адреса обработчиков. Конкретный ответ - если прога еще не успела тебе напакостить, то достаточно в Оле кликнуть View -> SEH chain и увидишь всю цепочку.
    Что касается общего вопроса, то SEH для антиотладки может использоваться по разному, в том числе и для неявной передачи управления в другое место, в том числе и "к черту на рога". Если прога обнаруживает отладчик, то она может открытым текстом материться и\или легально идти на выход через ExitProcess. А может хитро попортить тебе кровь, послав тебя к черту на рога через SEH - ты будешь долго взывать о помощи и изучать Мэта, после чего окажется что дело совсем не в этом и при нормальной работе прога в этот сэх вовсе не попадает (например путем путанных вычислений при отладке получается деление на 0, а без отладчика не на 0).
    С игнором\не-игнором исключения тоже дело обстоит хитрее. Например, не так давно была тема по INVALID_HADLE - сначала явно вызывается RaiseExeption, который отладчику нужно игнорировать, а затем CloseHandle c инвалидным параметром и т.к. при этом исключение происходит только под отладчиком, то его игнорировать нельзя. Поэтому пока Asterix не усовершенствовал свой HideDebugger, эту фишку можно обойти только ручками, включая и выключая игнор исключения. (Кстати попытка зайти в сэх по Shift+F8/F9 при RaiseExeption в Оле не срабатывает - нужно смотреть адрес обработчика, ставить на него бряк и перезапускать прогу - в надежде на то, что прога не обнаружит этот бряк и не вылетит раньше ;))
    Вывод - нужно рассматривать конкретные ситуации, а не задавать риторические вопросы на все случаи жизни ;)
     
  16. tar4

    tar4 New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    43
    это можно сделать примерно так:
    mov bptmp,00BAC4FB //последнее исключение
    eoe @L
    run

    @L:
    cmp eip,bptmp //ищем последнее исключение
    je @R0

    esto
    jmp @L

    @R0: //этот блок можно не использовать
    findop bptmp,#83C404#
    cmp $RESULT,0
    je @Er
    bp $RESULT
    esto
    bc $RESULT
    ........
     
  17. PE_Kill

    PE_Kill New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    107
    Если заигнорил все исключения, и это не криптор, то SEH тут вообще не при чем, нужно искать антиотладку, а SEH таковым не является, это скорее антитрэйс, но ни как не антиотладка. Так что с игнором исключений всё должно запускаться.

    PS Мог бы дать ссылку на программу, тебе ответили конкретней, а так....
     
  18. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    PE_Kill
    К инвалидному CloseHandle это не относится - см.мой пост выше, а также тут и тут
    Можно элементарный крякми сделать с RaiseException и CloseHandle, который под отладчиком будет выбрасывать прогу к "черту на рога" как при игноре, так и при не-игноре исключений ;)

    Интересно, а обнаружение отладчика и передача управления мягко говоря не туда - это не антиотладка ?