Оlly неверно показывает ClsProc, как вылечить?

Тема в разделе "WASM.BEGINNERS", создана пользователем neutronion, 21 авг 2010.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Привет, проблема такая:
    открыл в OllyDbg iexplorer.exe или любую другую программу, но ClsProc для
    некоторых окон показывает неверно, типа ffff02e при выборе контекстного
    меню Follow ClassProc выходит есстественно в никуда. Версия 1.10.
    Кто-нибудь сталкивался, как вылечить такое поведение Ольки?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    neutronion
    Верно показывает. Судя по сурцам GCL_WNDPROC определяет не только ссылку на процедуру, может быть есчо хэндл(CallProcData Handle), как в вашем случае. Этот хэндл может быть передан в CallWindowProc(). Ссылку на процедуру можно считать из описателя(CALLPROCDATA[+0x18]), в свою очередь описатель получить посредством менеджера обьектов(HM*, например HMValidateHandleNoRip(), HMValidateHandle() etc.) на основе хэндла, как это делает система:
    Код (Text):
    1.         /*
    2.          * Convert a possible CallProc Handle into a real address.  They may
    3.          * have kept the CallProc Handle from some previous mixed GetClassinfo
    4.          * or SetWindowLong.
    5.          */
    6.         if (ISCPDTAG(dwData)) {
    7.             PCALLPROCDATA pCPD;
    8.             if  (pCPD = HMValidateHandleNoRip((HANDLE)dwData, TYPE_CALLPROC)) {
    9.                 dwData = pCPD->pfnClientPrevious;
    10.             }
    11.         }
     
  3. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Это чтобы получить адрес WinProc нужно лезть в ядро, что-ли?
    Откуда код такой? HMValidateHandleNoRip - недокументированная функция менеджера объектов?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
  5. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Спасибо, но проблему решил проще, неверно показываются ClsProc
    в Ольке из-за небольшого бага в программе, Оля юзает GetClassLongA, и не все WinProc верно определяются. Поэтому поступил просто, в хекс-редакторе просто нашел название этой функции в OllyDbg.exe и заменил одну букву A на W,
    т.е. фукция в импорт тайбл в транке стала называтся GetClassLongW.
    После этого корректно стали отображаться ClsProc.