Нужен совет по влому.

Тема в разделе "WASM.ZEN", создана пользователем Booster, 1 сен 2008.

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Приветствую всех.
    В программулине у контролов адреса обработчиков сообщений выставлены в FFFF05EF, похоже что в обработчике исключений это дело ловится. Оля не даёт поставить бряк на доступ по этому адресу, пишет что адрес указывает в никуда. Прога на VCL, глубоко копать влом. Конечно можно попробовать найти исключение которое за это ответственно, но может ещё что посоветуете?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    По-моему, найти исключение -- самое простое. Тем более, что та же Olly позволяет перехватывать исключения. Или же можно поставить точку останова например на KiUserExceptionDispatcher.
     
  3. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Olly врёт. Один может видеть адреса обработчиков, если использует Spy++ или что-то.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Sol_Ksacap
    Действительно SPY показал нормальный адрес. Что это за приём такой?
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Booster
    Хендлы. Судя по всему, это стандартные обработчики, так что имеет ли смысл туда лезть?
    Передать управление на такой обработчик можно с помощью CallWindowProc, которой в качестве адреса подсовывается хендл, а как Spy получает настоящие адреса, не скажу.. Слышал только про функцию NtUserDereferenceWndProcHandle, но она вроде не экспортится
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Nouzui
    А куда ещё то лезть? Я полагаю, надо перехватить нажатие на кнопку активации проги, вылезти в основной модуль и посмотреть что там. Для удобства думаю использовать сабкласинг кнопки.

    Эта прога генерит кучу исключений, плюс делает множество махинаций с помощью SetWindowLong. Когда сабкласировал кнопку, и вызвал старый обработчик полученный через GetWindowLong, то словил исключение. Получается GetWindowLong может возвращать левый обработчик?
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Booster
    не берусь советовать.. имхо, все равно управление в прогу вернется в виде возврата из GetMessage или какаог-нибудь ее аналога

    вызвать нужно только через CallWindowProc. Это даже когда сам пишешь, безо всяких манипуляций
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Спасибо, вылетело из головы.

    Незнаю, вроде родительскому приходят сообщения - извещения, но сами мессаги вроде идут только соответствующему контролу.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Продолжаю эпопею. В обработчик попал, и после нескольких шагов трассировки, не вылезая из USER32 попадаю на call 77D3B3BF, а по этому адресу - INT 2B. После этого Olly отказывается продолжать трассировку. Это видимо какая-то стандартная фича винды, так как это происходит на всех программах. Что за прерывание, и как тут быть?