Добрый день. Столкнулся я с такой неразрешимой для меня задачей. Надо каким-то образом влезть в чужой процесс и перехватывать параметры и возвращаемые значения его функций (ну api. это функции приложения) И если с первой частью все более-менее поянтно (я знаю как минимум 4 способа внедрить в чужой процесс dll-ку) , но и там есть свои нюансы. О них чуть позже. А вот как перехватывать вызовы функций никак не соображу. Какой это хук? Как я понимаю надо перехватить call по заданному адрессу, заморозить поток, который вызвал call, достать со стека нужные параметры, запустить тот поток, когда отработает опять заморозить, достать возвращенное значение и снова запустить его. Верно? Внедрение затруднено тем фактом, что надо внедрится именно в главный поток процесса т.е. вариант с CreateRemoteThread с последующим вызовом LoadLibrary или MapLibrary как я понимаю не пройдет. Псалмы ms-rema читал, но видимо что-то недопонял. Кто что сможет подсказать? Буду очень благодарен.
За готовую тулзу спасибо! Там есть немного сорцов, может чем-то поможет. Но дело в том, что мне нужна моя тулза, которая будет еще с этими параметрами много интересных вещей делать. Т.е. надо одно приложение которое будет и внедрятся для перехвата и еще много разных вещей делать. Те вещи уже частично реализованы, а вот перехват....
зачем замораживать поток если твой код перехвата будет в том же потоке выполнятся? В чем сложность перехватить ф-цию? Сто раз уже разжевана эта тема. Находишь адрес нужной функи и хукаешь сплайсингом, дело в то )
*код перехватчика, а не перехвата) Ну если ты боишся что за пол секунды которые уйдут на установку хуков нужная тебе ф-ция вызовется пару раз то можешь конечно замораживать потоки))
сплайсинг это насколько я понимаю поставить в начале функции джамп на свой код и в конце передать управление оригинальному? просто я подобным еще не знимался(
предлагаю запретить темы, тупа "не получается перехват" "помогите с перехватом" "как перехватить апи" "как отловить (далее что то что решается перехватом" Просто никто уже не отвечает на эти темы, ибо статей пруд пруди, решения готовые повсюду, что еще надо?
SPA )))), можно было просто проигнорировать или ссылок левых накидать, чтоб постебаться, это не бегиннерс и по правилам тут можно
ohne да я не потив тем для начинающих, я против тем когда в гугл даже не заходили, инфы просто море, и сказать что море это ничего не сказать, просто океан
furang вот по этой ссылке если смотреть http://www.google.com.ua/search?q=к...на+фортране,+вб+или+какой-нибудь+другой+буйне то ничего нет а может так? http://www.google.com/search?q=как+перехватить+винапи+так+чтоб+нихуя+не+делать тоже нет или так? http://research.microsoft.com/en-us/projects/detours/ http://research.microsoft.com/apps/pubs/default.aspx?id=68568 нет ничего, поздно вы решили хукать - уже не хукают, отхукались
ohne Технический термин "Хук" - это механизм шадова для перехвата сообщений http://msdn.microsoft.com/en-us/library/ms632589(VS.85).aspx furang Тут метод зависит от целевого кода, необходимо знать что захватывается. Изменение кода это только общий грязный способ.
ohne Благодарю за столь информативный ответ. Clerk Ну я в двух словах расписал. В чужом процессе надо перехватить функции, которые реализованы в нем (не апи, а именно функции приложения, их адресса и прототипы известны отчасти). Я вобщем то думал что это через хуки делать надо, но не нашел подходящего. Насчет детура.... Это может быть то что надо. Только я еще не разобрался он только апи перехватывать умеет или нет.
furang смысл тот же что и в апи, может тока прототип отличаться от stdcall но это не должно быть проблемой, в крайнем случае все решаеться асм вставкой (если не нашел подходящий прототип поддерживаемый твоим компилятором, давай сделаем так: ты начнешь делать и скажешь что у тебя не получается.
Clerk то есть термин "WinApi Hooking", который везде применяется и не только касательно оконных хуков, не верен (или не моден, хз)? где-нибудь на форуме нужно прикрепить твой терминологический словарь, чтобы ты не бурлил furang detours тебе подойдет разбирайся, умеет
ohne Да, этот термин не верно определяют. Повторяю, он определяет механизм обработки сообщений. "Похукать" - зарегистрировать такой обработчик в шадове. "Intercepting" более подходящий термин. Наверно ты прав.. на счёт словоря.