Добрый день.
Итак предыстория проблемы.
Необходимо, каким-то образом, сделать снимок экрана вместе с overlay поверхность(ями).
Потратил очень много времени на посик информации по данной теме — вообще ничего не нашёл.
Путём тщательного изучения программы, которая умеет "фотографировать" overlay и дизассемблирования её DLL удалось выяснить, что она ставит глобальных хук на клавиатуру, тем самым отслеживая нажатие клавиши Print Screen, и одновременно внедряясь в адресное пространство процесса, который имеет фокус в данный момент...
Далее библиотека производит какие-то монимуляции (уже в адресном пространстве жертвы) (какие точно — не знаю, ну не силён я в чтении ассемблерных команд и в конце концов каким-то образом получает интерфейс IDirectDraw, т.к. далее идёт вызовы EnumSurfaces. Или же вызывается самописная EnumSurfaces... не знаю.
К слову этой программе удаётся перехватить оверлей только если "приложение-жертва" активно, т.е. в нём срабатывает хук на Print Screen, так что это только подтверждает "теорию внедрения".
А теперь проблема — как добраться до таблицы интерфейсов какого-либо процесс, с целью обнаружения там интерфейсов на IDirectDraw?
Если у кого есть советы, или же кто сталкивался с такой проблемой — пишите.
Здравствуйте, Alexey Goncharov, Вы писали:
AG>Здравствуйте, alex-eraser, Вы писали:
AG>[...] AE>>Если у кого есть советы, или же кто сталкивался с такой проблемой — пишите.
AG>Посмотрите утилитку ComTrace, может быть найдете для себя что-то полезное.
Спасибо. Гляну.
Re[3]: Добраться до таблицы интерфейсов
От:
Аноним
Дата:
08.02.06 18:07
Оценка:
Здравствуйте, alex-eraser, Вы писали:
AE>Спасибо. Гляну.
Еще здесь, в хвосте три ссылки по перехвату методов COM-интерфейсов.
Здравствуйте, Alexey Goncharov, Вы писали:
AG>Здравствуйте, alex-eraser, Вы писали:
AG>[...] AE>>Если у кого есть советы, или же кто сталкивался с такой проблемой — пишите.
AG>Посмотрите утилитку ComTrace, может быть найдете для себя что-то полезное.
программа хорошая, но это что-то вроде перехвата вызовов... а надо добраться до интерфейса в уже запущенном приложении, когда интерфейс уже создан...
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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? здесь
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, alex-eraser, Вы писали:
А>А вы уверены что дизасемблированный вами код использует готовые DirectDraw интерфейсы, а не создаёт свои? Может он просто грабит скрин через DirectX? здесь
хм.. спасибо большое!
думаю это то что надо! буду разбираться...