Вопрос Как правильно хукнуть подключение к серверу

ппоршень
Пользователь
Статус
Оффлайн
Регистрация
15 Фев 2020
Сообщения
297
Реакции[?]
46
Поинты[?]
32K
Не могу сделать форсированное перенаправление подключения к серверу. Казалось бы, делов то, нужно хукнуть connect и подменить второй аргумент sockaddr и вызвать функцию с новыми аргументами. Но нет, если сделать так, то мы получим исключение при попытке подключения к серверу, либо invalid address либо nullpointer.
Я сделал вывод структуры по байтам:
C++:
int WSAAPI hooks::hk::hkconnect( SOCKET s, const struct sockaddr *name, int namelen ) {
    printf( "connect called\n" );
    BYTE saddr[ sizeof name ];
    memcpy( &saddr, name, sizeof saddr );
    for( BYTE byte:saddr ) {
        printf( "%X ", byte );
    }
    printf( "\n" );
    return hooks::pconnect( s, name, namelen );
}
При подключении к любому серверу connect вызывается 3 раза. Если присмотреться к байтам второго аргумента можно увидеть следующее:
1690114908397.png
Первые 3 вызова функции connect появляются при попытке зайти на 127.0.0.1.
Последние 3 при попытке зайти на любой другой сервер.
Почему структуры одинаковые? Как подменить IP сервера к которому подключается клиент?
 
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,027
Реакции[?]
182
Поинты[?]
71K
так ты возвращаешь все оригинальное, берешь заполняешь своими данными name, и все, или создай свою структуру при вызове это функции, заполни, и верни в вызове
 
ппоршень
Пользователь
Статус
Оффлайн
Регистрация
15 Фев 2020
Сообщения
297
Реакции[?]
46
Поинты[?]
32K
так ты возвращаешь все оригинальное, берешь заполняешь своими данными name, и все, или создай свою структуру при вызове это функции, заполни, и верни в вызове
Но нет, если сделать так, то мы получим исключение при попытке подключения к серверу, либо invalid address либо nullpointer.
 
Сверху Снизу