Не мог бы кто-нибудь помочь разобраться с такой проблемой: моя полезная программа =) по задумке должна подменять соединения в internet explorer и выводить страницу нужного нам сайта. На данный момент она перехватывает ws2_32!connect и ws2_32!send. Каждое соединение подменяется на соединение с нужным нам ip (допустим 85.249.139.254 -wasm.ru), то есть по всей логике с другим хостом браузер соединиться не может. После каждой новой попытки соединения первый посылаемый на хост запрос подменяется запросом вида: Код (Text): GET / HTTP/1.1 Accept: */* Accept-Language: ru Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01709); InfoPath.1) Host: www.wasm.ru Connection: Keep-Alive Последующие запросы отсылаются в исходном виде, так как их содержание, как я понимаю, зависит от ответа целевого сервера на первый запрос. Перехват реализован так, что при каждой попытке использования ws2_32!connect выводится msgbox; при отсылке запроса его содержимое выводится таким же образом. Знаки "!" игнорируются и отсылаются в первоначальном виде. Проблема вот в чем: если в адресной строке набрать www.wasm.ru, то 1) Вызавается перехватчик connect и устанавливается соединение с 85.249.139.254 2) Send посылает знак "!" 3) Send посылает запрос, который мы подменяем на приведенный выше 4) Последующие запросы отсылаются в исходном виде (у всех Host: www.wasm.ru), загружается стартовая страница wasm.ru. Если же набрать например www.google.ru - то п.1,2 и 3 выполнятся, как и в предыдущем шаге. После - не будет отсылаться никаких запросов, а просто загрузится google. То есть по логике не может происходить соединений с хостами, кроме заданного в перехватчике; не посылается не единого запроса со значением google.ru заголовка Host, cookie и журнал посещений очищены - и всетаки google откуда-то подгружается. Подскажите пожалуйста - в чем может быть проблема?
Сервер может ответить, что страница не изменилась с последнего посещения и тогда ie будет грузить из temprorary.. Придётся изменять ответ. Как сервер говорит что страница не изменилась не помню
А с помощью чего можно посмотреть ответ сервера? Пробовал перехватывать ws2_32!WSAReсv и wsock32!recv - после вызова функций в буфере какая-то каша. На перехват ws2_32!recv браузер вообще не реагирует.
Поищи в сети плагин к ie(или фоксу) .Полезная штука. Лично я им смотрю . Или , как вариант можно загружать страницу из php , через fread. Оно тоже показывает заголовки , хотя не уверен , что все. Имхо , браузер вообще может не смотреть ответ сервера. А сразу лезет в кэш. Конкретно по indexу гугла : HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip Server: GWS/2.1 Content-Length: 2592 Date: Thu, 15 Mar 2007 01:54:52 GMT Т е судя по Cache-control: private он кэшируется на какой то стандартный срок , а потом обновляется. (Нифига не помню , на какой).
Но всетаки если надо не только посмотреть но и подправить ответ сервера, какую ф-ю перехватывать? На форумах говорят про перехват recv (не уточняется, из какой библиотеки). Но она, как ни пытаюсь, не возвращает ответ сервера, или я что-то не так делаю? Пробую идти на разные сайты, в том числе на те, где раньше никогда не был, после соединения браузер неоднократно вызывает ws2_32!WSAReсv и wsock32!recv, после вызова в буфере нет строки вида HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html; charset=UTF-8 ........ только набор бесполезных для меня кодов, которые и как символы интерпретировать нельзя.
попробуй If-Modified-Since: Sat, 29 Oct 1900 19:43:31 GMT взято из RFC 2616 а сколько в eax после Reсv
C перехватом wsock32!recv стало немного понятнее: среди знаков "!" и прочей каши иногда вылезают вразумительные ответы. При при перехвате ws2_32!WSAReсv возникает определенная проблема: при выходе из перехватчика в регистре EIP оказывается значение FFFFFFFF и браузер, соответственно, падает. Для перехвата обеих функций использую такой код перехватчика: Код (Text): HookerRecv proc sockfd:DWORD, BufAddr:DWORD, BufLen:DWORD, Flags:Dword push ebx call GetCurrPosition ; меняет только ecx add ecx, 5h jmp @F code8: db 68h Hooker8_1 dd 0 db 0c3h @@: call delta delta: pop ebx sub ebx,delta push 0 push 6 mov ecx,ebx add ecx,offset Old_CodeRecv push ecx push [ebx + offset RealAddrRecv] push [ebx+ offset Mhandle] mov eax, [offset _WriteProcessMemory+ebx] call eax push Flags push BufLen push BufAddr push sockfd mov eax,[ebx + offset RealAddrRecv] call eax push eax .if eax!=1h dodata <db "MessageBoxA",0> push ecx dodata <db "user32.dll",0> push ecx call EGetProcAddress push MB_OK dodata <db "!!!",0> push ecx push BufAddr push 0 call eax .endif mov ecx,ebx add ecx,offset HookerRecv mov [ebx+offset Hooker8_1], ecx push 0 push 6 mov ecx,ebx add ecx,offset code8 push ecx push [ebx + offset RealAddrRecv] push [ebx+ offset Mhandle] mov eax, [offset _WriteProcessMemory+ebx] call eax pop eax pop ebx ret HookerRecv endp И еще вопрос, можно ли получать содержимое любой HTML страницы подобным образом и какая из 2-х функций в каком случае используется?