HTML - тропы в ринг0

Тема в разделе "WASM.WIN32", создана пользователем cresta, 25 июл 2006.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Здравствуйте. Собственно меня интересует, какими путями браузеры получают информацию о html-коде страницы и собственно сам html-код.
    Хотел приспособить свой драйвер, осуществляющий хук TDI для контроля и коррекции html-кода. С целью удаления из него внедренных объектов, а именно flash. Но почему-то информация, перехватываемая в драйвере, содержит только обрывки html-кода и запросов GET. Цельной картины не наблюдается.
    Вот такой код:
    Код (Text):
    1.     if (irp == NULL) return STATUS_SUCCESS;
    2.     pStack = IoGetCurrentIrpStackLocation(irp);
    3.     if (pStack->MajorFunction == IRP_MJ_INTERNAL_DEVICE_CONTROL) {
    4.         if (pStack->MinorFunction == TDI_SEND){
    5.             mdlBuffer = MmGetSystemAddressForMdlSafe (irp->MdlAddress, LowPagePriority);
    6.             if (mdlBuffer){
    7.                 data = strstr (mdlBuffer,"ShockwaveFlash");
    8.                 if (data) {
    9.                     DbgPrint("%s", mdlBuffer);
    10.                     memcpy(data,"FuckwaveFlash", 13);
    11.                 }
    12.             }
    13.         }
    14.     }
    пропускает "ShockwaveFlash" и он присутствует в html-коде страниц.
    То же самое, если strstr на предмет наличия тега "<object>". Правда в случае с поиском по расширению запрашиваемого url (.swf) иногда удается вырезать его и флэш не выводится.

    Где искать следы flash-ей ?
    Спасибо.
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    сейчас опять перекомпилировал драйвер на поиск по расширению запрашиваемого ресурса e.eee) - пока ни один флэш не проскочил. Почему раньше проскакивал - уже не вспомню, давно было...
    Теперь такая штука: перехватываю запросы например:
    GET /software/flash/about/so_redirece.eee HTTP/1.1
    и искажаю таким образом:
    GET /software/flash/about/so_redirect.eee HTTP/1.1
    браузер ждет ответ на свой запрос, естественно не получает положительного ответа и флэш не загружается.
    Но тут два варианта: либо браузер не дождавшись ресурса, бросает его и начинает выводить остальной контент страницы, либо он его откладывает "на потом", загружает остальное и затем возвращается к флэшу и ждет его. В первом случае просто небольшая задержка на ожидание ответа на запрос, во втором случае приходится смотреть на статусбар браузера, и когда он "упёрся" во флэш, принудительно останавливать загрузку страницы.
    Что нужно сделать с запросом GET, чтобы браузер не ожидал на него ответа?

    P.S.
    Админы, а что за глюк форума такой? - в первом предложении этого поста набирал расширение e.eee), а выводятся четыре буквы "е". Думал опечатался - поправил - ан нет, снова выводит e.eee)

    P.P.S.
    Сейчас ещё раз попробую набрать расширение, только через подчеркивание: ._s_w_f

    P.P.P.S.
    Ой блин, на свой же драйвер нарвался :-\
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta
    Браузер в любом случае будет ждать ответа на свой запрос :) Если поменять GET на HEAD, то ответа ему долго ждать не придётся, но флеша в нём не будет.
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    То, что в ответе на GET флеша не будет - это меня не расстраивает, скорее наоборот.
    А вот GET на HEAD я же не смогу поменять. Вернее поменять смогу, но браузер об этом ничего не знает, и по-прежнему ждёт ответа на GET.

    Хотя вот сейчас подумал о таком варианте: если GET содержит запрос файла (url) с расширением .swf, то менять этот url на 127.0.0.1 - и пусть там ищет свой флеш :)
    Надо будет попробовать, правда возможно, что на месте объекта будет надпись типа "Невозможно отобразить страницу" как обычно бывает, если запрос перенаправляется на локальный ресурс в файле hosts.

    Но самый лучший способ - это перехватить html-код, получаемый браузером, и там, в зародыше, удалить все флеши. Возможно, этот код можно обнаружить по TDI_RECEIVE, надо попробовать.
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta
    А зачем ему об этом знать? Ответ на HEAD идентичен ответу на GET, но не содержит файла.
     
  6. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    а почему не вырезать из входящего хтмл ссылки на флэши? тогда и запросы браузер слать не станет.
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    вот я о чём и говорю: найти, где передается входящий код.
    Пробовал смотреть в TDI_RECIEVE - там ничего нет, ни входящего, ни исходящего.
    А по какому каналу принимается html - не могу найти.
     
  8. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Можно сразу же сказать броузеру HTTP 404 Not found и пытаться отображать флеш он не будет. Форум, не отображающий e.eee - достойно башорга :)
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    404 Not found приведет к выводу этого самого 404 Not found на страницу - неэстетично. Пока у меня просто чистое место там, где должен быть флеш, меня это устраивает, вот только время тратится на ожидание, его бы уменьшить.
     
  10. JagR

    JagR New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2006
    Сообщения:
    6
    Ну как - не нашёл место где входящий запрос прячется??? Сам сейчас занимаюсь данной темой - аналогично фильтровать по расширению контент уже получается - но так чтоб перехватить входящий запрос - ещё нет.
     
  11. Solo

    Solo New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    131
    Когда приходит запрос на флеш подставляй ему сразу ответ, какую-нибудь заранее заготовленную флешку с шевелящейся надписью "здесь был флеш"... :)
     
  12. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    попробуй отлавливать по mimу типа
    Код (Text):
    1. GET http://bla.bla.bla/bla.bla HTTP/1.0
    2. Accept: */*
    3. Referer: http://bla.bla.bla
    4. Accept-Language: ru
    5. Proxy-Connection: Keep-Alive
    6. User-Agent: Mozilla/10.0
    7. Host: bla.bla.bla
    8. Pragma: no-cache
    ответ
    Код (Text):
    1. HTTP/1.0 200 OK
    2. Date: Mon, 29 Sep 2996 29:95:58 GMT
    3. Server: Apache/9.3.26 (Unix) PHP/9.9.9 rus/PL99.99
    4. Last-Modified: Thu, 20 Nov 2003 22:07:03 GMT
    5. ETag: "63b43c-22695-3fbd3b07"
    6. Accept-Ranges: bytes
    7. Content-Length: 9999999
    8. Connection: close
    9. [b]Content-Type: application/x-shockwave-flash[/b]
    более подробно посмотри исходники SQUID а как перенести на M$ смотри в каком нить Platform SDK скорей всего чёта подобное публиковалось во всяком случае видел тока где не помню в PSDK, MSDN или ищё где
     
  13. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    P.S.
    Порой в направлении SHDOCVW.DLL, IWebBrowser, WebBrowser Control

    P.P.S.
    А где кнопка "ПРАВИТЬ" ???
     
  14. JagR

    JagR New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2006
    Сообщения:
    6
    Я видимо не совсем верно выразился. Из первого поста cresta видно что
    Код (Text):
    1. if (pStack->MajorFunction == IRP_MJ_INTERNAL_DEVICE_CONTROL)
    2.         if (pStack->MinorFunction == TDI_SEND)
    следовательно мы анализируем
    mdlBuffer = MmGetSystemAddressForMdlSafe (irp->MdlAddress, LowPagePriority);
    на наличие в mdlBuffer интересующих нас ключевых слов. В DebugView в этом месте я вижу
    чтото типа
    Код (Text):
    1. GET /smiles/Main/laugh.gif HTTP/1.1
    2. Accept: */*
    3. Referer: http://forum.sources.ru/index.php?s=6936039c0d7a5760044a37e5b3bd0537&showtopic=59470&st=30
    4. Accept-Language: ru
    5. Accept-Encoding: gzip, deflate
    6. If-Modified-Since: Thu, 30 Sep 2004 20:00:00 GMT
    7. If-None-Match: "2d2fa-2b2-1f94f000"
    8. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
    9. Host: forum.sources.ru
    10. Connection: Keep-Alive
    11. Cookie: hotlog=1; session_id=6936039c0d7a5760044a37e5b3bd0537
    Я не ориентируюсь в HTTP но понимаю что это запрос браузера на определённый ресурс. А как браузер понимает что именно этот запрос надо отправить серверу? По сей вероятности в какомто запросе сервер известил клиента что именно содержится на запрошенной странице - но в каком именно он это делает?(Это вопрос спецам по HTTP). Кроме того запрос может быть пожат с целью экономии(
    Код (Text):
    1. Accept-Encoding: gzip, deflate
    - это видно отсюда) - как можно заставить сервак слать всё в непожатом виде?? На сколько я знаю Аутпост делает это какимто образом. А ещё проблема - запросы HTTPS - как можно фильтровать их? только по порту?
     
  15. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    убрать gzip, deflate из Accept-Encoding оригинального запроса.
     
  16. JagR

    JagR New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2006
    Сообщения:
    6
    Да, в принципе это конечно метод - но я думал что есть какой то более примитивный способ
     
  17. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    у нас разные понятия о простоте. Хотя можешь пропатчить браузер в памяти, что-бы он не слал gzip..
     
  18. JagR

    JagR New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2006
    Сообщения:
    6
    Да нет - я подразумевал что возможно можно просто его настроить его собственными средствами. ;)
    Но в любом случае спасибо за ответ.
     
  19. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    что проще - десятком строк кода подменить заголовок (будет работать для _любых_ приложений на данном компе) или пытаться менять настройки в сотнях программ, тащящих контент с инета ?
     
  20. JagR

    JagR New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2006
    Сообщения:
    6
    Вопрос конечно больше риторический - потому и ответ будет гдето в таком же духе - Всё зависит от того, чего вы хотите добиться. Чтоб было более понятно опишу полнее задачу - необходимо фильтровать HTTP & HTTPS трафик для 4ёх видов броузеров - IE, Firefox, Netscape & Opera. Мне вообще предлагали плагины на каждый из этих браузеров написать :derisive:.