WinAPI-функции для подключения к сети - PullRequest
0 голосов
/ 28 февраля 2019

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

WS2_32!WSARecv
WS2_32!WSARecvFrom
WS2_32!recv
WS2_32!recvfrom
WS2_32!send
WS2_32!sendto
WS2_32!WSASend
WS2_32!WSASendDisconnect
WS2_32!WSASendMsg
WS2_32!WSASendTo

Спасибо

1 Ответ

0 голосов
/ 02 марта 2019

Я предполагаю, что вы не хотите изобретать велосипед, так что приобретите библиотеку перехвата, такую ​​как MinHook https://github.com/TsudaKageyu/minhook/ или Microsoft Detours https://www.microsoft.com/en-us/research/project/detours/ небольшой пример с minhook

int YourDetourFuncHere(
SOCKET     s,
const char *buf,
int        len,
int        flags
){
  // your code here.
  return RealFunction(s, buf, len, flags);
}
void hookex(){
MH_Initialize();
MH_CreateHook("ws2_32.dll", "send", YourDetourFuncHere, &RealFunction);
MH_EnableHook(MH_ALL_HOOKS);
}

Этоэто просто своего рода псевдокод, поскольку вы не должны копировать и вставлять в первую очередь;) и вам следует добавить дополнительную проверку ошибок в соответствии с документацией libs.

Если вы хотите видеть весь трафик в глобальном масштабе, используйте NDISдрайвер и просто отправить данные в режим пользователя.У вас может быть поток в пользовательском режиме, который будет продолжать вызывать ReadFile () и устанавливать IRP_MJ_READ на стороне драйвера и просто получать пакетные данные из драйвера.Также для других браузеров это может варьироваться.Например, Firefox может быть PR_Write, а другие такие программы или браузеры могут использовать разные протоколы и т. Д., Поэтому в зависимости от вашей цели вы должны искать, где вы хотите разместить свой хук.

...