Перехват методов ком интерфейсов

Тема в разделе "WASM.WIN32", создана пользователем Android, 19 фев 2006.

  1. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Код (Text):
    1.  
    2.     invoke  CoInitialize,0
    3.     invoke  CoCreateInstance,addrCLSID_Interf,0,CLSCTX_ALL,addr IID_Interf,addr lpInterf
    4.         test    eax,eax
    5.         js  proc_end
    6. mov eax,lpInterf
    7. mov edi,[eax]
    8. HookProc,[edi].IInterface.Method5,addr NewProc
    9.  
     
  2. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Пытаюсь перехватить метод ком интерсейса, адрес процедуры поидее должен быть один и тот же, но почему-то перехватчик не срабатует. Может надо не в том процессе, я перехватываю в процессе Explorer.exe интерфейс IShellWindows.
     
  3. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    процедура HookProc работает 100%

    Прос статьи на рсдн.ру я знаю, но еще их не читал)



    И еще, когда я на прямую вызываю этот метод после установки перехвата - перехватчик срабатывает.
     
  4. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Я подозреваю, что я работаю не на прямую с компонентом, а с каким-то прокси. Мне нужно добраться к начальному коду компонента, который находится в длл, пройти все proxy/stub и получить процедуру которая обслуживает определенный метод интерфейса. Подскажите как это сделать?
     
  5. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Прочитал статьи Перехват методов COM интерфейсов и

    Перехват методов COM интерфейсов - 2



    В них особое внимание уделено вещам, с которыми ассемблерщик сталкивается каждый день. Но я не нашел, как все-таки выйти на исходный компонент?



    "... компилятор MIDL генерирует пару структур CInterfaceProxyVtbl и CInterfaceStubVtbl, которые содержат исчерпывающее описание интерфейса для маршалинга стандартными средствами COM."



    "Для Stub доступна примерно такая же информация – IID интерфейса, дополнительная информация для интерпретатора pServerInfo, количество методов в vtbl, адреса обработчиков pDispatchTable и vtbl стандартных методов Stub – IRpcStubBuffer. pDispatchTable, как и у Proxy, либо содержит сгенерированные MIDL адреса функций-обработчиков, либо 0 – для полностью интерпретируемого Stub."




    Т.е. Stub интерфейс должен знать гед находится Vtbl исходного компонента. Как на него выйти, подскажите плиз?
     
  6. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    дело ясное, что дело темное