#sockets #tcp #internet-explorer-11 #hook #apimonitor
#сокеты #tcp #internet-explorer-11 #перехват #апимонитор
Вопрос:
В настоящее время я работаю над проектом, который требует подключения TCP send и recv API в IE для мониторинга данных TCP. Он отлично работает на IE9 и IE10. Но он перестает работать в IE11. После некоторых исследований я обнаружил, что IE11 использует WSASend и WSARecv для отправки и получения данных. Поэтому я решил подключить WSASend и WSARecv.
WSARecv — это перекрывающаяся операция. Есть 3 способа получить результат перекрывающихся операций. Когда используются перекрывающиеся операции, они либо имеют связанное событие, процедуру завершения, либо связаны с портом завершения ввода-вывода. Я проверил перекрывающуюся структуру, когда IE11 вызывает WSARec, и обнаружил, что как событие, так и процедура завершения равны НУЛЮ, поэтому я предполагаю, что IE11 использует порт завершения ввода-вывода для получения результата перекрывающихся операций.
Проблема в том, что GetQueuedCompletionStatus или GetQueuedCompletionStatusEx никогда не вызываются IE11. Я использую API monitor или подключаю эти 2 функции напрямую и никогда не вижу, чтобы вызывались эти 2 функции. Я не знаю, использует ли IE11 разные наборы API для получения результата WSARec. Интересно, сталкивался ли кто-нибудь с подобной проблемой. Какой API я должен подключить? Если есть альтернативный способ достичь той же цели. В основном то, что я хочу сделать, это отслеживать данные TCP в IE11.
Комментарии:
1. Похоже, вы пишете шпионское ПО….
2. На самом деле это не шпионское ПО. Я отслеживаю данные TCP для генерации информации журнала, например, количество соединений SSL. Я не могу сделать это на уровне HTTP, поэтому я должен сделать это на уровне TCP…
Ответ №1:
вы можете установить точку останова в ntdll!NtDeviceIoControlFile, к которому в конечном итоге перенаправляются все API-интерфейсы сокетов, чтобы вы могли знать, какой из них используется.
Комментарии:
1. Спасибо за подсказку. Я пытаюсь подключить NtDeviceIoControlFile и распечатать параметры события и ApcRoutine для AFD_RECV. Журнал показывает, что вся ApcRoutine имеет значение null, и около 80% параметров события имеют значение null. Я до сих пор не понимаю, как извлекается результат, если и событие, и ApcRoutine имеют значение null.
2. IE11 использует WSARecv в качестве синхронного вызова в моем тесте. проверьте мой инструмент в github: github.com/xwlan/dprobe , которые включают фильтр сокетов для захвата всех вызовов сокетов.
Ответ №2:
Вам нужно подключить CreateThreadpoolIo.
Ответ №3:
Вам также необходимо отфильтровать функции расширения winsock, такие как WSARecvMsg, WSASendMsg, для этого вам нужно подключить WSAIoctl и заменить указатель функции расширения