Как перехватить вызов API-функций

Аватара пользователя
Maniacosaur

Как перехватить вызов API-функций

Сообщение Maniacosaur »

Может кто знает как перехватывать

вызовы API-функций?
Аватара пользователя
Maniacosaur

Re: Как перехватить вызов API-функций

Сообщение Maniacosaur »

Как вариант -- подмена dll в которой содержится функция для перехвата. В двух словах это выглядит так. Находишь длл в которой лежит нужная функция, переименовываешь ее. Создаешь свою длл в которой есть все функции из оригинала (заголовки их) и в каждой из функций делаешь определенные действия (которые тебе необходимы) и в конце вызываешь (можешь и не вызывать но система ляжет) оригинал. Способ этот крайне не надежный и под разными системами может не всегда работать корректно.
Аватара пользователя
Guest

Re: Как перехватить вызов API-функций

Сообщение Guest »

Ну мысля такая. Есть окошко. Стоит задача получить те пиксели, которые в нем изменились. Для этого можно взять битмап и сравнить по пикселям. Но это долго, если делать раз 50 в секунду. Интересно, как терминал виндовый (или Citrix) это делает? Формат данных мне известен. Для обеих структур(User и Kernel). А то очень приятно поставить на область Kernel(пиксели по-моему там хранятся) read access и ловить исключения. Есть у кого-нибудь идеи?
Аватара пользователя
vasketsov

Re: Как перехватить вызов API-функций

Сообщение vasketsov »

Chipa

найти и прочитать Рихтера.

способов более чем много, в зависимости от конкретной ситуации.



Пример.

Если я пишу для Windows, то только для NT.

Потому делаю так (в  своей проге).

Ищу адрес функции для перехвата, сохраняю его.

Потом выполняю ZwProtectVirtualMemory (аналог Win32 не помню, что-то типа ProtectMemory) и ставлю на то место атрибут чтения-записи-выполнения.

Там меняю первые байты таким образом, чтобы это выглядело как переход на мой адрес, то есть на мою прогу, обычный jump туда пишу короче.



Вот так.
Аватара пользователя
vasketsov

Re: Как перехватить вызов API-функций

Сообщение vasketsov »

Я наверное нет так спросил, мне нужно только отследить

вызов API.

А вообще идея такая:

хочу написать прогу чтоб отслеживать обращение к заданной

папке. В Win2k есть возможность аудита но там один только вход в интерисующую папку вызывает полтора экрана сообщений в журнале, т.е. работаь не реально.





Добавлено:



vasketsov

Привет.

Я чтото слышал про этого автора, ты имеешь в виду "Windows2000 для проффесионалов"?



И ещё такой вопрос:

я ZwProtectVirtualMemory в MSDN не нашоёл.

если можно в двух словах что она делает?
Аватара пользователя
vasketsov

Re: Как перехватить вызов API-функций

Сообщение vasketsov »

Chipa

тогда идешь на
www.sysinternals.com
и качаешь оттуда FileMon с исходниками. Как раз самое то.



В MSDN написаной мной функции нет, ищи что-то типа ProtectMemory.
Аватара пользователя
vasketsov

Re: Как перехватить вызов API-функций

Сообщение vasketsov »

Помогите plz.

Windows media player 7/7.1 дает мне сообщение:

"Windows Media Player Error"

"Unable to locate media server.

The operation timed out"

Нужно только перехватить это сообщение,

а закрыть эго и обратно коннектиться я могу.

Я нуждаюсь в совете (C/C++ Builder,Delphi,Java).



Thx!

Vita.Изображение
Аватара пользователя
vasketsov

Re: Как перехватить вызов API-функций

Сообщение vasketsov »

vita

Через FindWindow найди это окно и прибей его.
Аватара пользователя
vasketsov

Re: Как перехватить вызов API-функций

Сообщение vasketsov »

Подскажите, кто может! С помощью какой API-функции можно получать и (или) задавать знак-разделитель в десятичных числах, т.е. "." или ","?
Аватара пользователя
Gas

Re: Как перехватить вызов API-функций

Сообщение Gas »

Я тут про функцию ZwProtectVirtualMemory (или ProtectMemory) прочитал.... Где можно найти описание? Мне надо на область памяти что-то аля хук повесить. Чтоб когда винда туда что записать захочет - сразу jmp на мой код. И вот еще вопрос. Как до памяти HDC докопаться, чтоб оттуда байты брать напрямую! (Именно на эту память и хук нужен) И напоследок... Открываю я несколько приложений на отдельных Window Station/Desktop. Как сделать аля PrintScreen этого виртуального дисплея?
Ответить

Вернуться в «Программирование и базы данных»