Как перехватить вызовы API в другом приложении - PullRequest
5 голосов
/ 12 августа 2010

Я пытаюсь перехватить вызовы методов ExtTextOut и DrawTextExt GDI другого приложения.

Я знаю, что мне нужно использовать GetProcAddress, чтобы найти адрес этих методов в gdi32.dll, и перезаписать адрес впроцесс, который я хочу подключить с адресом моей функции.Затем в своей функции я делаю то, что мне нужно, затем вызываю исходную функцию.

Я хочу сделать эту функцию ловушки доступной для приложений .net, и, очевидно, это выполнимо путем создания «промежуточной» неуправляемой библиотеки DLL.он выполняет перехват и способен инициировать событие на стороне .net, так что новая функция может делать ставки, написанные в управляемой среде.Я просто не уверен, как это реализовать.У кого-нибудь есть примеры кода или ссылки на информацию?

Ответы [ 3 ]

5 голосов
/ 12 августа 2010

Я бы порекомендовал Microsoft Detours (только C ++ x86) или EasyHook (C ++ & C #, x86 / x64).

http://easyhook.codeplex.com/

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

Немного мелочей в том, что он также работает по-другому.Передав указатель на вашу функцию, вы можете перенаправить вызовы во внешний код.Создает интересную интеграцию со старыми приложениями или приложениями с закрытым исходным кодом.

4 голосов
/ 13 ноября 2010

Вы можете использовать Deviare API Hook , использовать DeviareCSharpConsole, который входит в пакет и позволяет подключать любой API и видеть значения параметров в древовидном элементе управления. Я сообщил, что единственная хитрость, которая необходима в Windows7, - это загрузка в качестве администратора.

1 голос
/ 12 августа 2010

Как я создал работающего покерного бота содержит образцы кода для внедрения и перехвата событий gdi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...