Обход на winsock recv ничего не возвращает

Я ввел dll в сервер, потому что мне нужно было заблокировать некоторые плохие пакеты, которые сервер не отбрасывает.

Фрагмент из моего кода:

#pragma comment(lib, "detours.lib")
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "Mswsock.lib")

(...)

int (WINAPI *pRecv)(SOCKET s, char* buf, int len, int flags) = recv;
int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags);

(...)

AllocConsole();
freopen("CONOUT$", "w", stdout);

DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pRecv, MyRecv);
if(DetourTransactionCommit() == NO_ERROR)
cout << "[" << MyRecv << "] successfully detoured." << endl;

и для целей тестирования я просто распечатываю данные.

int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags)
{

cout << "[ RECV " << len << " ] ";
for ( int i = 0; i < len; i++ )
{
printf( "%02x ", unsigned char (buf[i]) );
}
printf( "\n" );

return pRecv(s, buf, len, flags);
}

Теперь я подключил его, и он отображает [ address ] successfully detoured.,
Я думаю, что все подключено и работает.

Теперь я иду к клиенту и начинаю отправку пакетов.
Например, я вхожу, теперь это отправляет пакет на сервер.
И мне удалось войти в систему, поэтому сервер должен был получить отправленный мной пакет.

Теперь я проверяю консоль, подключенную к server и ничего не печатается.
Что странно, поэтому я попытался подключить WPE_PRO на сервере и снова начал общаться с клиентом. Теперь я узнал, что даже WPE не может регистрировать пакеты.

Как это возможно? Почему это происходит?

Я пытаюсь построить логгер / фильтр пакетов на сервере, чтобы не пропустить плохие пакеты.
Хакеры используют пакеты для сбоя наших серверов.

Информация о приложении, которое я пытаюсь подключить:

It works like a relay server. It receives info from the client then sends it to the right server inside the internal network.

So Client <-> `Application` <-> Servers
So what I'm trying to hook is the Application .

ОБНОВИТЬ

Попытка установить точку останова на recv(), WSArecv() функционировать и не сломаться.

Address  Ordinal Name                        Library
-------  ------- ----                        -------
004121A8 23      socket                      WS2_32
004121A4 20      sendto                      WS2_32
004121E8 3       closesocket                 WS2_32
0041219C 9       htons                       WS2_32
004121A0 17      recvfrom                    WS2_32
004121E4 111     WSAGetLastError             WS2_32
004121E0 115     WSAStartup                  WS2_32
004121DC 11      inet_addr                   WS2_32
004121D8         WSAIoctl                    WS2_32
004121D4         WSAConnect                  WS2_32
004121D0 22      shutdown                    WS2_32
004121CC 12      inet_ntoa                   WS2_32
004121C8 2       bind                        WS2_32
004121C4 8       htonl                       WS2_32
004121B4 16      recv                        WS2_32
004121BC         WSASocketA                  WS2_32
004121B8 19      send                        WS2_32
004121B0         WSAAccept                   WS2_32
004121AC 13      listen                      WS2_32
004121C0 21      setsockopt                  WS2_32

Только эти dll импортируются, когда я проверил PE:

pdh.dll
WS2_32.dll
KERNEL32.dll
USER32.dll
GDI32.dll
WINMM.dll

ОБНОВИТЬ

Просто чтобы проверить, работает ли мой код, я подключил DLL к клиенту, и да, пакеты были зарегистрированы / напечатаны. Подтверждает, что мой код работает. Хммм.


ОБНОВИТЬ

Также пытался объехать фф.

int ( WINAPI *pSend )( SOCKET s, const char *buf, int len, int flags ) = send;
int ( WINAPI *pRecv )( SOCKET s, char *buf, int len, int flags ) = recv;
int ( WINAPI *pRecvFrom )( SOCKET s, char *buf, int len, int flags, sockaddr *from, int *fromlen ) = recvfrom;
int ( WINAPI *pWSARecvEx )( SOCKET s, char *buf, int len, int *flags ) = WSARecvEx;

и до сих пор ничего.


ОБНОВИТЬ

Так что я использовал wireshark и увидел пакеты, проходящие через.
Я отлаживал программу весь день, устанавливая точки останова на всех вызовах winsock, и до сих пор ничего не получил.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]