Доброго времени суток!
Я поставил хук на функцию send() библиотеки wsock32.dll в процессе iexplore.exe
Таким образом, можно "прослушивать" исходящие запросы клиента.
Функция-перехватчик выглядит так:
LPVOID lpsend = NULL; // адрес оригинальной функции send()
BYTE bufsend[5] = {0}; // первые 5 байт оригинальной функции send()
// функция-перехватчик
int WINAPI xsend(
SOCKET s,
char* buf,
int len,
int flags
)
{
// запись запроса клиента в файл
CHAR rep[10000] = {0};
sprintf(rep, "\n\n send report:\n", buf);
CopyMemory(rep + strlen(rep), buf, len);
__WriteFile("C:\\http.txt", (PBYTE)rep, strlen(rep), MAX_INT);
// снятие хука
UnsetSplicingHook(lpsend, bufsend);
// вызов оригинальной функции
int res = send(s, buf, len, flags);
// установка хука обратно
SetSplicingHook(lpsend, xsend, bufsend);
return res;
}
В общем, всё так и должно быть?
У меня неск. вопросов:
1.) В отчёте очень часто встречаются такие вещи:
send report:
!
send report:
!
send report:
!
send report:
!
Что за? =)
2.) Когда используется
HTTPS-протокол, то вместо понятных HTTP-заголовков, мы получаем нечто вроде:
send report:
jфY60Hш“RЉЈmП@д(v‡iw6YшЌt¤Шџ$UФвY2·:nЭ0«lD%яЩі"“§l a„г‡nУИрЮaСммыV"#\э,RR‡ђ!‘7zш‰e~W†ТјХ&SО‚.Idэh?чA’
•сж™®KЬ/и1[эіає\Ц›доРЃФхдiґu$dBчвНзg—B?~mЧз!,n›™5 ТЏБе
Т.е. шифрованный HTTP-заголовок.
Вопрос: как расшифровать?
Какие функции отвечают за расшифровку? Имеет ли смысл перехватывать не на уровне сокетов, а на уровне wininet? Там данные уже будут расшифрованы?
Если да, то как дела обстоят в других браузерах? (FireFox, Opera, Safari) Какие там функции нужно перехватывать?
Или, может вообще, просто взять сертификат, дампить шифрованные данные как они есть, а потом, с помощью private-части SSL-сертификата вручную расшифровывать? Так прокатит?