MFC (42) Message Maps: декодирование

Тема в разделе "WASM.RESEARCH", создана пользователем Smile, 16 фев 2006.

  1. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
    Слегка запарился, видел plugin под IDA-4.15, но такой версии нету качать нехочится.



    Ловлю событие(галочка в checkbox), нахожу окконую процедуру ставлю там условный breakpoint, а потом след теряется в дебрях MFC42.DLL



    Еще есть вариант найти функцию AfxDisptachCmdMsg, но она не экспортируется, а компилируется в код, вообщем тоже ненашел :)



    Насколькоя понял самый простой вариант отлювить событие, это найти в карте сообщений, нужний ID элемента управления и тамже будет лежать указатель на функцию обратного вызова(обработчик события).



    Вообщем как с наименьшими затратами найти функции обработчиков?
     
  2. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
    Вообщем уже нашел, надо поймать функцию CCmdTarget::OnCmdMsg которая экспортируется как #4424 там единственная функция с 7 параметрами AfxDispatchCmdMsg, на ней поставить условный бряк [ESP+8] == ID (который идентификатор элемента)

    дальше внутри функции AfxDispatchCmdMsg в switch-конструкции идет вызов обработчика



    Но если кто подскажет как декодировать карты сообщений буду рад :)
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ищешь вызовы конструктора CDialog

    mov esi, ecx

    ...

    call CDialog::CDialog

    ...

    mov dword ptr [esi], offset CDialogVMT



    Переходишь по offset CDialogVMT и со смещением 28h (зависит от версии MFC) находишь указатель на таблицу обработки сообщений

    Формат ее примерно таков

    dword ???

    dword offset msg_table

    msg_table:

    dword msg_id ;MSG_XXXXXX

    dword ???

    dword ???

    dword ???

    dword ???

    dword offset procedure ;обработка MSG_XXXXXX





    Например, msg_id = 0xF соответствует обработке сообщения WM_PAINT
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Маленькое исправление: по смещению 28h находится процедура, возвращающая указатель на таблицу обработки сообщений (типа GetMessageMap)