Можно ли использовать AppInit_DLL для перехвата API из Ws2_32.dll?

Я ищу способы перенаправить исходящие соединения TCP/IP с определенного порта клиента Windows на другой номер порта. (Это необходимо для обеспечения возможности перенаправления соединений SMB с порта 445, который используется для общего доступа к файлам и принтерам.)

Я не могу найти способ сделать это, кроме как подключить WinSock API и изменить там порт. Я нашел AppInit_DLL. метод, и мне интересно, можно ли его использовать для перехвата Ws2_32.dll (который, кажется, содержит API-интерфейсы WinSock)?

Я думал затем подключиться к подключиться и принять API, которые обычно устанавливают номер порта. Это всего лишь мысль, поэтому я был бы признателен за то, что кто-то возьмется за это, прежде чем я действительно смогу перейти к его кодированию...


person c00000fd    schedule 11.02.2013    source источник
comment
Подобные махинации обычно привлекают внимание антивирусных сканеров.   -  person MSalters    schedule 11.02.2013


Ответы (2)


Почему бы нет? Да, это возможно, но не забудьте загрузить DLL перед подключением. Поскольку AppInit загружается при загрузке user32.dll (и, конечно же, перед загрузкой ws2_32).

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

person user3903861    schedule 13.08.2014
comment
Не все процессы загружают user32, и большая часть трафика SMB инициируется из режима ядра, а не пользовательского режима. - person Raymond Chen; 13.08.2014
comment
Если он инициирован из режима ядра, то он ничего не может против него сделать (кроме драйвера, но это маловероятно). Я предположил, что он, по крайней мере, проверил это, внедрив свой код в другой процесс. - person user3903861; 13.08.2014
comment
Приложения, которые обращаются к сетевым ресурсам, обычно просто используют CreateFile и ReadFile и позволяют ядру выполнять перенаправление. Приложения обычно не открывают порты и отправляют необработанные пакеты SMB туда и обратно. - person Raymond Chen; 14.08.2014
comment
Да, я согласен с Рэймондом. Это на уровень ниже, чем user32.dll. Так что тут не повезло... - person c00000fd; 14.08.2014

К сожалению, это невозможно. Лучше всего создать прокси-DLL, заменив пользовательские методы, которые вы хотите подключить, своими собственными.

person user5780656    schedule 12.01.2016