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

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

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

Сообщение drronnie » 20.12.2007 (Чт) 16:58

Господа, может кто сталкивался? Короче есть программа, которая вызывает методы интерфейса из ActiveX. Нужно перехватить эти вызовы и подменить параметры.... Нашёл тему на RSDN, но... ничего не понял :)
Компиляция - перевод словесного поноса в машинный код.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 20.12.2007 (Чт) 22:25

1) Откуда нужно перехватить? Из самой программы? Из внешнего мира?
2) Во время работы или в скомпилированном файле?
3) Что именно вызывается проблемы?

Общий смысл техники таков:

Dim SomeObject As ISomething

VarPtr(SomeObject) - адрес переменной SomeObject в памяти.
По этому адресу лежит указатель на объект. Объект представляет собой множество всяких данных - каких именно - нам не важно, нас интересует лишь первые 4 байта.

Эти первые 4 байта - адрес некоторой таблицы, называемой таблицой виртуальных функций (VTable). В этой таблице лежат адреса методов.

В эту таблицу в нужную ячейку записываешь адрес своего перехватчика, из которого вызывается настоящий метод (с подменой параметров).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 20.12.2007 (Чт) 23:25

Перехватить нужно из внешнего мира. Т.е. есть чужой скомпилированый exe, е5сть чужая скомпиленая activex-dll, и есть я, который хочу чего-то там подменить.

Откуда я получу адрес vtable?!
Компиляция - перевод словесного поноса в машинный код.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.12.2007 (Пт) 9:17

И тебе это надо сделать именно программно?

Откуда я получу адрес vtable?!

Перечитай ещё раз моё сообщение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 21.12.2007 (Пт) 11:42

Мне это нужно сделать, что значит "именно программно"? Если бы был объект - то получить адрес vTable не проблема. Но как же я его получу?! Перечитал.
Компиляция - перевод словесного поноса в машинный код.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.12.2007 (Пт) 11:44

Программно - значит, написать код, который бы это сделал.
Непрограммно - значит, взять специальный инструмент, с помощью которого это можно сделать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 18

    TopList