Шпионить за COM-объектами - PullRequest
       13

Шпионить за COM-объектами

6 голосов
/ 01 октября 2009

Я поставил перед собой новую задачу, которая заключается в "слежке" за COM-объектами.

Даже если вы не используете COM, вы, вероятно, знакомы с методами перехвата API, где вы можете подключить импортированную функцию и выполнить свой собственный код перед вызовом оригинала. Перехват API довольно сложен, но он быстро становится беспорядочным (слишком сложным для производственного кода IMO), если вы пытаетесь подключиться к методам COM-объектов.

Итак, на данный момент, чтобы выполнить «мою работу», я установил хук API для CoCreateInstance и отправляю рукописные прокси для интересующих меня интерфейсов. Сейчас это не так много интерфейсов, но это не самое лучшее из решений.

Есть ли способ сделать это более аккуратно, желательно без использования перехвата API?

С другой стороны, эта статья кажется отличной работой http://www.ddj.com/windows/184416546?pgno=5, но бинарный файл больше не работает (я думаю, он был написан во время Win98). Кто-нибудь знает его внутренности и может указать мне правильное направление, чтобы оно снова заработало?

Спасибо

Ответы [ 2 ]

3 голосов
/ 02 октября 2009

Я бы определенно рекомендовал использовать универсальный делегатор Кейта Брауна для перехвата низкого уровня. Упомянутый Kim Grasman инструмент ComTrace использует его. Это позволяет вам обернуть произвольный com-объект в «оболочку», которая может выполнять перехват, ведение журнала и т. Д. Оригинальные статьи (с кодом), описывающие универсальный делегатор, представляют собой здесь и здесь .

Если вы хотите шпионить за com-объектами в произвольных процессах (для которых у вас нет исходного кода), вам также нужно будет выполнить внедрение кода, используя CreateRemoteThread () или что-то подобное. Здесь есть статья здесь , которая может помочь вам начать, если вы еще этого не сделали.

3 голосов
/ 02 октября 2009

У меня нет однозначного ответа, но я знаю парня, который мог бы:)

Инструменты Джонаса Бланка - все о перехвате на разных уровнях, его ComTrace основан на технике Кейта Брауна, если я правильно помню, и звучит похоже на то, что вы делаете, за исключением того, что он анализирует библиотеки типов и заголовки для динамического отслеживания интерфейсов.

Мы вместе писали Developer Playground (я в основном делал UI), оно основано на перехвате API, и я знаю, что Джонас сказал, что хочет переработать ComTrace, чтобы использовать ту же библиотеку перехвата API, потому что она дала лучшее «разрешение» для перехвата.

Я не знаю, для чего вы хотите использовать это, но я предлагаю вам проверить инструменты Джонаса и отправить ему электронное письмо - он может подтолкнуть вас в правильном направлении.

...