Добраться до таблицы интерфейсов
От: alex-eraser Россия http://rmansys.ru/
Дата: 08.02.06 16:12
Оценка:
Добрый день.
Итак предыстория проблемы.
Необходимо, каким-то образом, сделать снимок экрана вместе с overlay поверхность(ями).
Потратил очень много времени на посик информации по данной теме — вообще ничего не нашёл.
Путём тщательного изучения программы, которая умеет "фотографировать" overlay и дизассемблирования её DLL удалось выяснить, что она ставит глобальных хук на клавиатуру, тем самым отслеживая нажатие клавиши Print Screen, и одновременно внедряясь в адресное пространство процесса, который имеет фокус в данный момент...
Далее библиотека производит какие-то монимуляции (уже в адресном пространстве жертвы) (какие точно — не знаю, ну не силён я в чтении ассемблерных команд и в конце концов каким-то образом получает интерфейс IDirectDraw, т.к. далее идёт вызовы EnumSurfaces. Или же вызывается самописная EnumSurfaces... не знаю.
К слову этой программе удаётся перехватить оверлей только если "приложение-жертва" активно, т.е. в нём срабатывает хук на Print Screen, так что это только подтверждает "теорию внедрения".

А теперь проблема — как добраться до таблицы интерфейсов какого-либо процесс, с целью обнаружения там интерфейсов на IDirectDraw?

Если у кого есть советы, или же кто сталкивался с такой проблемой — пишите.

Заранее спасибо.
Re: Добраться до таблицы интерфейсов
От: Alexey Goncharov Россия  
Дата: 08.02.06 16:57
Оценка:
Здравствуйте, alex-eraser, Вы писали:

[...]
AE>Если у кого есть советы, или же кто сталкивался с такой проблемой — пишите.

Посмотрите утилитку ComTrace, может быть найдете для себя что-то полезное.
Re[2]: Добраться до таблицы интерфейсов
От: alex-eraser Россия http://rmansys.ru/
Дата: 08.02.06 18:01
Оценка:
Здравствуйте, Alexey Goncharov, Вы писали:

AG>Здравствуйте, alex-eraser, Вы писали:


AG>[...]

AE>>Если у кого есть советы, или же кто сталкивался с такой проблемой — пишите.

AG>Посмотрите утилитку ComTrace, может быть найдете для себя что-то полезное.

Спасибо. Гляну.
Re[3]: Добраться до таблицы интерфейсов
От: Аноним  
Дата: 08.02.06 18:07
Оценка:
Здравствуйте, alex-eraser, Вы писали:

AE>Спасибо. Гляну.


Еще здесь, в хвосте три ссылки по перехвату методов COM-интерфейсов.
Re[2]: Добраться до таблицы интерфейсов
От: alex-eraser Россия http://rmansys.ru/
Дата: 08.02.06 18:13
Оценка:
Здравствуйте, Alexey Goncharov, Вы писали:

AG>Здравствуйте, alex-eraser, Вы писали:


AG>[...]

AE>>Если у кого есть советы, или же кто сталкивался с такой проблемой — пишите.

AG>Посмотрите утилитку ComTrace, может быть найдете для себя что-то полезное.

программа хорошая, но это что-то вроде перехвата вызовов... а надо добраться до интерфейса в уже запущенном приложении, когда интерфейс уже создан...
Re[4]: Добраться до таблицы интерфейсов
От: alex-eraser Россия http://rmansys.ru/
Дата: 08.02.06 18:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, alex-eraser, Вы писали:


AE>>Спасибо. Гляну.


А>Еще здесь, в хвосте три ссылки по перехвату методов COM-интерфейсов.

Читал конечно же я эти стати первым делом. Но мне не перехват методов нужен, а получение таблицы интерфейсов.

  PInterfaceTable = ^TInterfaceTable;
  TInterfaceTable = record
    EntryCount: Integer;
    Entries: array[0..9999] of TInterfaceEntry;
  end;

PInterfaceEntry = ^TInterfaceEntry;
  TInterfaceEntry = record
    IID: TGUID;
    VTable: Pointer;
    IOffset: Integer;
    ImplGetter: Integer;
  end;
Re: Добраться до таблицы интерфейсов
От: Аноним  
Дата: 08.02.06 20:06
Оценка:
Здравствуйте, alex-eraser, Вы писали:

А вы уверены что дизасемблированный вами код использует готовые DirectDraw интерфейсы, а не создаёт свои? Может он просто грабит скрин через DirectX? здесь
Re[2]: Добраться до таблицы интерфейсов
От: alex-eraser Россия http://rmansys.ru/
Дата: 08.02.06 22:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, alex-eraser, Вы писали:


А>А вы уверены что дизасемблированный вами код использует готовые DirectDraw интерфейсы, а не создаёт свои? Может он просто грабит скрин через DirectX? здесь

хм.. спасибо большое!
думаю это то что надо! буду разбираться...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.