2009-11-19 8 views
3

Windows COM 런타임을 후크하는 데 사용할 수있는 도구가 있습니까? 생성 된 모든 인스턴스를보고 해당 인터페이스에 대한 쿼리를보고 메서드 호출 등을 볼 수 있기를 원합니다.Windows COM 런타임에 연결

고마워요!

답변

4

를 "세계 최고의 COM 전문가 돈 상자"를 말해야한다? - 잘 모르겠어요은 Windows 7에서 작동하는 경우 만입니다 가치가있는 시도.

+0

좋은 물건. 인터페이스가 완벽하지는 않지만 그 자체가 작동합니다. – sharptooth

0

in-proc COM 서버에는 소비자가 CoCreateInstance() 또는 CoGetClassObject()를 호출하는 것이 거의 없습니다. 그게 전부입니다. 나머지는 COM 개체 구현 내부에서 수행됩니다. ATL 소스를 보면 내부에서 일반적으로 작동하는 방식을 볼 수 있습니다. 예를 들어 소비자가 QueryInterface()를 호출하면 호출이 해당 객체로 직접 이동하고 객체 자체가 호출을 관측하는 유일한 엔티티입니다.

이것은 매우 운이 좋은 것은 아니지만 in-proc COM 서버가 구현되는 방법의 직접적인 결과입니다. 개발자는 Process Monitor을 사용하여 ClassId -> Dll 매핑 검색 및 COM 개체 내부의 광범위한 추적에 해당하는 레지스트리 액세스를 확인할 수 있습니다. ATL은 추적을 통합하기 위해 COM_INTERFACE_ENTRY_FUNC_BLIND 매크로와 같은 유용한 기능을 제공합니다.

+0

그러나 표준 COM 런타임 라이브러리가 CoCreateInstance를 구현하지 않습니까? 서버에 정적으로 링크되어 있지 않으면이 함수를 전역 적으로 연결할 수 있어야합니다. 그리고 proc 서버는 어떨까요? 메서드에 대한 모든 소비자 호출이 정렬되므로 이러한 호출을 가로채는 방법이 있습니까? – Danra

+0

내가 알고있는 쉬운 방법이 없습니다. 물론 CoCreateInstance()를 구현하는 .dll 파일에 연결할 수 있지만 우아하고 쉬운 솔루션은 아닙니다. – sharptooth

+0

나는 이것이 내가하고 싶은 일이기 때문에 COM 라이브러리에 연결하는 것이 완벽하게 우아하다고 느낀다. 나는 이런 종류의 후킹을하고 멋지게 결과를 제공하는 도구를 모른다. (스파이 ++ 스타일을 제외하고) COM 객체 및 윈도우가 아닌 핸들링). – Danra

1

http://www.nektra.com/products/com-spy-console을 확인하십시오. 무료입니다.

+0

유망 해 보이지만 등록 된 모든 인터페이스를 열거하고 IDispatch에서 지원하는 메서드를 표시합니다. 그러나 실제 후킹 기능은 Windows 7 (관리자로 모니터를 실행했을 때도 작동하지 않았기 때문에) 때문에 사용하지 못했습니다. 나열된 버전은 0.1이므로 일부 기능이없는 경우 놀라지 않을 것입니다. 어쨌든 Windows XP에서 곧 사용해 보도록하겠습니다. 잘 작동하길 기대합니다! – Danra

+0

나를 위해 전혀 작동하지 않는 것 같습니다 ... 레지스트리에 설치된 인터페이스를 나열합니다. – Danra

1

시스템 dll에 연결하고 조회 된 인터페이스에 맹인 위임자를 삽입해야하는 항목을 모니터 할 수 있습니다. 이 작업이 얼마나 복잡하고 오류가 발생하기 쉬운지는 말할 필요도 없으며, 특히 많은 구현자가 COM 원리를 정확하게 따르지 않는다고 생각하면 그렇습니다. 하지만 일부 응용 프로그램은이 기능을 노출하지 않고 자신의 목적을 위해이를 수행합니다.

당신이 정말이 길을 갈려면 -이 한 번 봐 걸릴 :

+0

나는이 후킹을하는 sysinternals 스타일의 도구를 알고 있다고 생각하지 않습니까?:) – Danra

+0

맞아, 나는 모른다. Hernán에 의해 언급 된 com-spy-console이 정확히 그 일을하고있는 것 같습니다. 어쩌면 Win7 지원을 요청할 가치가 있습니다. – Andrey

관련 문제