![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ловушки [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]можешь.