Есть private библиотека со своим API. В двух словах - это клиент, он подключается к указанному серверу и читает с него потоковые данные. Сервер также приватен. Схематично это выглядит так: MYSTERYAPI_CONTEXT ctx = 0; mysteryapi_create_context(&ctx); mysteryapi_start_communication(ctx, "www.server.com", &packet_callback); mysteryapi_run(ctx); // Синхронное чтение Есть мой рераутер трафика. Этот рераутер также читает с сервера данные и транслирует их as is на определенном порту всем желающим. Задача - сделать аутентификацию на моем рераутере. То есть прежде чем начать транслировать трафик, нужно выполнить некоторый handshake. Проблема в том, что момент создания сокета и соединение на сервер скрыты внутри dll, я не могу выполнить аутентификацию, и после этого отдать сокет библиотеке, мол работай по нему. Я вижу один вариант. Ковырять либу и искать, где она держит сокет, чтобы научиться подсовывать ей свой собственный сокет, по которому уже выполнена аутентификация. У меня есть два объекта - context и receiver. С точки зрения подключаемого хедера это void*. Понятное дело, что за указателем скрыта недокументированная структура. Я уверен на 95%, что сокет хранится в одной из этих структур. Каким образом можно было бы выяснить, где этот сокет хранится (место и смещение)?
_DEN_ Естественно proxy-dll. Подменяешь импорт или патчишь байты, как хочешь. Инфы море). Зато узнаешь много ценного для себя. Можно кстати заюзать Detours от майкрософт, они сделали типа SDK для "легального" перехвата http://research.microsoft.com/en-us/projects/detours/