Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ловушки [D6, WinXP]


alex870 ©   (2004-12-14 11:47:00) 

Здравствуйте!
Подскажите пожалуста, чужое приложение вызывает определенную функцию из Kernel, могу ли я перехватить отработку этой функции из своего приложения, например написав DLL с какой-нибудь глобальной ловушкой (именно на определенную функцию), и если это возможно подменить результат выполнения этой функции. Заранее спасибо!


alex870   (2004-12-14 17:12:00) [1]

Нет, кодек я трассировать не собираюсь, но в его коде есть защита от debuger'а, поэтому при попытке трассировки моей программы (использующей этот кодек) кодек не работает, а при запуске откомпилированного экзэшника все работает нормально.
Если Вы знаете, как поставить hook на вызов опр. функции, а не на события (клавы, мыши и т.д.) пожалуйста напишите какие параметры нужно передавать SetWindowsHookEx(), и какой прикрепляемой функцией потом пользоваться.


Digitman   (2004-12-14 15:43:00) [2]


> понятно, что функцию вызывает не сам кодек


а кто же кроме него, спрашивается ? если ты сам ни явно ни неявно ее не вызываешь ?


> чтобы свою программу можно было трассировать в процессе
> разработки


ты собрался код ф-ций видеокодека трассировать ? а зачем ?


Alex870   (2004-12-14 14:56:00) [3]

Спасибо за интересную консультацию!
Я, когда задавал вопрос, считал, что это не важно, а теперь убедился в обратном. Дело в том, что я хочу перехватиь IsDebugerPresent, вызываемый видеокодеком, который я подключаю к своей программе (понятно, что функцию вызывает не сам кодек). Я хотел повесить резидента, чтобы свою программу можно было трассировать в процессе разработки.


Digitman   (2004-12-14 12:53:00) [4]


> Но, если это делается с помощью ловушки


совершенно необязательно использовать ловушку - библиотеку можно достаточно легко внедрить в целевое "чужое" АП и с пом. CreateremoteThread() (коль скоро речь идет именно об WinХР)

но раз речь идет о внедрении (тем или иным методом - абсолютно неважно) библиотеки, то здесь сразу "всплывает" понятие/механизм "инициализация DLL" : система в ходе загрузки библ-ки вызывает ее DllEntryPoint(Reason = DLL_PROCESS_ATTACH), где ты получаешь управление и волен делать с АП этого процесса практически все что угодно, в т.ч. и модификацию IAT/EAT.. в случае внедрения библ-ки методом установки глоб.ловушки алгоритм любойустановленной тобой "ловушечной" хук-ф-ции становится абсолютно неважным, ибо перехват API-вызовов осуществляется еще на этапе иниц-ции, т.е. телу хук-ф-ции достаточно просто вызвать CallNextHook


Delphi5.01   (2004-12-14 12:38:00) [5]

Chto kasaetsa olovli function-ov ia ne mogu pomoch, ia rabotal s klavoi i mouseom, no kak ia pomnu zdes bilo kucha dokumentacii v razdele stati. Pochitai tam tochno naidosh to chto tebe nujno.
Jelau udachi


Alex870   (2004-12-14 12:28:00) [6]

Спасибо за ответы!
Но, если это делается с помощью ловушки, то как правильно поставить её на определенную функцию. Я делал это только на события мыши SetWindowsHookEx(WH_GETMESSAGE, @MouseProc, HInstance, 0). Т.е. не совсем понятно что ставить вместо WH_GETMESSAGE и какую процедуру создавать в качестве второго параметра этой функции, ведь из её параметров я должен получить нужную мне функцию.


Delphi5.01   (2004-12-14 11:56:00) [7]

Absolutno, est daje vozmonost ne tolko smenit a voobhse udalit eto soobshenie. Kak raz tak i rabotaut programi blokirovshiki kotorie ispolzuiut v internet klubakh.


Digitman   (2004-12-14 11:54:00) [8]

можешь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо