· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Определение VA COM-методов при late binding

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Апр 19, 2004 20:39:07 · Поправил: Безпощадный даос

Имею ехе-шник со встроенными функциями, которые вызываются из скриптов (html, js).
Эти функции прописаны (их названия) в самом конце этого ехе-шника.
Названия этих функций и их параметры можно сохранить в файл *.IDL (с помощью Borland'овских утилит), что я и сделал [url=http://kulibin.rhlmod.ru/Fuctions.idl
]http://kulibin.rhlmod.ru/Fuctions.idl
[/url]
Утилита "Dependency Walker" не видит в этом ехе-шнике данных функций.

Вопрос:
Возможно ли забрейкпойнтиться при вызове на этих функциях, найти EP?
или
Возможно ли при дизассемблировании ехе-шника сделать так, чтобы названия функций
прописались в соответсвующих местах ассемблерного кода (также как импортированные функции).
IDA конечно вещь, но и она не смогла ничего связать, или руки кой у кого кривые :-)

Если точнее - мне нужны адреса этих функций в ехе-шнике.

Может присоветуйте утилиту какую-нибудь....

Согласен на линк с описанием подобной проблемы.


Дата: Апр 19, 2004 20:45:29

:)

Это не API-функции. Это COM-методы.
Для того, чтобы узнать VA этих методов, потребуется сделать пару телодвижений. Читай

http://wasm.ru/article.php?article=msi

COM-интерфейс – радость для кракера?


Дата: Апр 19, 2004 20:53:35

volodya
Спасибо - оперативно


Дата: Апр 19, 2004 20:55:37

Да, кстати. Я, кажись, клал утилиту Питрека на васм - пошукай. Она умеет генерить dbg-файлы. Для TypeLib генеришь dbg-файл и пихаешь его в IDA. Кстати, скрипт был написан для IDA - см. в разделе "Примочки для IDA"


Дата: Апр 20, 2004 16:52:47

volodya
Ах как жаль, судя по всему у меня как раз вариант с
"Late Binding" и "IDispatch"

А утилиты на это видимо не рассчитаны...
Что посоветуешь?


Дата: Апр 20, 2004 18:58:52

Мда...
Хреново.
Ладно, дай я проконсультируюсь со своими консультантами по COM, может, чего умного скажут.


Дата: Апр 21, 2004 18:34:25

Вот ответ мне:


Позднее связывание - это использование интерфейса IDispatch. Вообще-то он
является наследником IUnknown, так что в некоторых случаях применимы уже
отработанные механизмы. Существуют так называемый дуальные интерфейсы, когда
объект поддерживает одновременно и раннее и позднее связывание. Здесь все более
и менее ясно: в vtbl сначала идут методы IUnknown, потом IDispatch, потом
собственный методы интерфейса.

Что же делать с чистым IDispatch? Вызовы его методов происходят с помощью
IDispacth::Invoke. Код этого метода в общем случае выглядит (упрощеноно)
следующим образом:

if (dispIdMember == ...) // dispIdMember - первый параметр IDispacth::Invoke,
содержит номер метода/свойства, который мы вызываем
{
// возможно, работаем с остальными параметрами IDispacth::Invoke, скорее всего с
5...7
// вызываем соотв. функцию или собственно метод, если он короткий может быть
описан здесь.
}
else
if (dispIdMember == ...)
{
// При обращении к свойствам, все может выглядеть вот так:
if (wFlags == DISPATCH_PROPERTYGET) // wFlags - 4-й параметр
// Вызываем что-то
else
if (wFlags == DISPATCH_PROPERTYPUT)
// Вызываем еще что-то
else
if (wFlags == DISPATCH_PROPERTYPUTREF) // Этот флаг используется довольно редко,
но все же
// Вызываем совсем другое что-то
}
else
...

Так что надо писать анализатор, который будет просматривать коды реализаций
IDispacth::Invoke, и выделять наиболее вероятных кандидатов... Чтобы получить
количество методов/свойств, надо использовать IDispatch::GetTypeInfoCount, чтобы
получить ID по имени метода/свойства IDispatch::GetIDsOfNames.


Дата: Апр 21, 2004 20:09:48

хммм...

я это не потяну. А жаль.


Дата: Апр 21, 2004 20:11:17

А кто говорит, что ты это будешь тянуть? Все мне, болезному, придется. Самый свободный, блин :(
Значит так, расковыряю перл, взломаю программу, напишу статью, потом займусь этим late binding...


Дата: Апр 22, 2004 15:04:34

volodya
ты только про третью часть не забывай - народ все еще ждет... ;)


Дата: Апр 22, 2004 19:40:39

Egorka

Брось-ка прямо сюда IDL твоего файла.


Дата: Апр 22, 2004 20:12:38 · Поправил: Безпощадный даос

  [
    uuid(8A89ED26-C86D-4539-B976-2762B857950C), 
    helpstring("INHLControl Interface"), 
    dual, 
    oleautomation
  ]
   interface INHLControl: IDispatch
   [
    uuid(73C9BA9F-ABDB-4B47-B741-20D7BDB8053A), 
    helpstring("INHLAudio Interface"), 
    dual, 
    oleautomation
  ]
   interface INHLAudio: IDispatch
  [
    uuid(31D5D743-CEFD-4F49-B8B9-7389FC7A9687), 
    helpstring("INHLSettings Interface"), 
    dual, 
    oleautomation
  ]
   interface INHLSettings: IDispatch


Дата: Апр 22, 2004 20:13:56

Ну вот не уместилось....


Дата: Апр 22, 2004 20:16:16

Плевать. Ясно что они dual, т.е. содержат vtbl и, одновременно берут IDispatch и унаследованы от IUnknown...
Ненавижу COM.


Дата: Апр 22, 2004 21:03:51

Egorka

Блин, а аттачи для кого сделаны?
Этож надо два километра листинга запостить :-)

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047