Comments 20
• Контроль входящего http-траффика и подмена «взрослого» контента на более безобидный.
Ээээ… да? Это так теперь делается? Да и остальной список задач меня заинтересовал даже больше, чем статья. Не потому что статья плохая, просто я Рихтера читал :)
Ну, Fiddler и WireShark это инструменты мониторинга и отладки трафика. Не, ясно-понятно, что молотком можно и саморезы закручивать. Но это бы можно было в список задач и писать: перехват вызовов WinSocks-функций или чего там ещё. А так это провокация, я считаю. Но тонкая. Я ж вот заинтересовался, хотя Рихтера читал. :)
А Fiddler разве не как прокси себя регистрирует? Не раз сталкивался с тем, что если Fiddler некорректно закрыть, то он не отписывает себя из прокси и потом нет сети в тех приложениях, которые используют общесистемные настройки прокси.
На время выполнения оригинальной функции хук снимается. Поэтому рекурсивные вызовы не будут захуканы. Если несколько потоков выполняются параллельно, пока один поток зашёл в функцию, остальные потоки ходят в неё в обход хука (особенно плохо, если на этом строятся функции безопасности, вроде фильтрации трафика).
Ну и, если сильно не повезёт, при одновременном обращении к функции из разных потоков, можно словить Access Violation, когда восстановлена только часть оригинального начала функции, а другой поток на неё передал управление.
Подтверждаю. Для того чтобы сделать нормально, потребуется как минимум подключать дизассемблер длин инструкций, чтобы не сломать оригинальную логику своими JMP.
Конечно большинство функций из Windows библиотек имеют в своем теле некий stub, как раз для таких вещей, но все же остается ненулевая вероятность "порвать" опкоды оригинальной функции.
Ну и неплохо было бы упомянуть про Microsoft Detours, раз уж диалог идет об inline hooking'е.
Про многопоточность вы абсолютно правы. Указанный пример не рассчитан на нее. Вообще умение установить описанный вами хук достаточно нетривиальное.
тут наверное хотели сказать
«5. Наша библиотека инъектирована в адресное пространство постороннего процесса».
Windows hook: просто о сложном