Защита от подмены адреса WndProc

Тема в разделе "WASM.WIN32", создана пользователем Lex2029, 18 ноя 2007.

  1. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Привет, хотел посоветоваться.
    Как защищают программы, от подмены адреса Обработчика окна?
     
  2. CnCVK

    CnCVK New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    108
    можно по таймеру сравнивать значение WndProc
    Код (Text):
    1. LRESULR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    2. {
    3. ...
    4. if (message == WM_TIMER)
    5. {
    6.    if (GetWindowLongPtr(hWnd, GWLP_WNDPROC) != &WndProc)
    7.    {
    8.       // error code
    9.    }
    10. }
    11. ....
    12.  
    13. }
    или вообще при любом сообщении - но это может замедлить работу.
     
  3. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Сообщение таймера тоже можно перехватить...
    Мне просто интересно, как icq защищается. У меня не получается сменить ей адрес процесса, ни одному едит окну. Но она норм при этом работает. А Квип, просто клинит сразу, но тоже не получается.
     
  4. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Кстати, когда у обычной icq стал сообщение таймера перехватывать, ее так же клинить как и квип стало :)
    Как буд-то вообще на внутренних компонентах нет обработчика процессов.
     
  5. CnCVK

    CnCVK New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    108
    А как ты перехватываешь?
    Отдельная dll, в которой WndProc заменяется? (SetWindowLongPtr(hWnd, GWLP_WNDPROC, MyNewWndProc);

    Там может быть поток который постоянно проверяет WndProc окна.
     
  6. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Да, я делаю так. Просто странно, почему тогда их клинит, а не просто адрес функции обратно заменяется.
    Кстати, а есть что-нибудь такое, как например hackerView, только для ехе файлов. Чтоб не надо было как в IDA, в которой у меня так и не поучилось получить нормальный код... Вон в HV, так легко, открыл файлик, исправил байты, которые нужно, и сохранил... Даже компилять ничего не нужно. А в IDA, хрен поймешь, как из полученого вообще опять ехе сделать, даже без изменений.
     
  7. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Сорри за оффтоп, не удержался :))

    Lex2029
    А есть что-нибудь навроде топора, чтобы там подтесать, или клин забить? А то мне из инструментов пилу посоветовали, ей пока подтешешь, запаришься. А как гвоздь забить - это вообще хрен поймешь.

    А если по теме - не думаю, что у аськи или квипа есть специальная защита от подмены WndProc. Скорее, какая-нибудь бага у тебя. Или ты не учитываешь, что ВСЕ окна могут быть созданы на базе одного класса. И иметь в основе какую-нибудь борландовскую TWindow. И могут сами себя субклассировать :))

    Поскольку ранее было вот это: http://www.wasm.ru/forum/viewtopic.php?id=23770, то опять же, код в студию! Что там у тебя в длл, которую внедряешь?
     
  8. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    Спасибо, домой приеду выложу сразу.
     
  9. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Существует единственный способ - следить за этим адресом и в случае подмены, возвращать старый. Но, как сказал FatMoon, вряд ли где-то такое реализовано, ибо смысла и толка в этом ноль. Я, по крайней мере, таких прог не встречал...