Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [c++] [firefox] скрытый переход по линку (https://forum.antichat.xyz/showthread.php?t=168230)

qsd 04.01.2010 20:18

[c++] [firefox] скрытый переход по линку
 
Добрый день,

К примеру есть следующая хтмл страница, открытая в лисе (допустим ее адрес, находящийся в панели адреса - http://www.CURRENT.com/another.php):

<html>
<body>
<form action=http://www.ORIGINAL.com/main.php>
....... // контент формы
</form>
</body>
</html>

нужно чтобы после сабмита юзером формы, в браузере остался адрес http://www.CURRENT.com/another.php, а ответ был отображен от сервера http://www.ORIGINAL.com/main.php

Желательно сделать это хуком какойнить функции фф или winsock. Посдкажите каким образом можно реализовать подобный скрытый серфинг?

Я вообще хотел делать так:
1. в PR_Write (оболочка для send) изменить заголовки так, чтобы они соответствовали http://www.CURRENT.com/main.php
2. в send поменять заголовки обратно))

таким образом фф занесет нужный адрес урла (http://www.ORIGINAL.com/main.php) в нужный буффер и в нужный момент времени, а именно как только получит первые данные от recv, в поле урла должен отобразиться нужный урл))) во всяком случае это в теории

qsd 04.01.2010 21:44

еще вопрос, как быть с хттпс? весь запрос включая хедеры и тело шифруется и подменить нужный текст запроса не получится(

Gar|k 04.01.2010 22:18

эм если пишешь под windows что мешает тебе напрямую работать с окном fireFox через winAPI функции?

FindWindow, GetWindowText, SetWindowText

чтобы быстро найти нужный элемент используй стандартную утилиту VS - Spy++
чтоб писать легче было прогу

алгоритм такой:
нашли окно
нашли нужный элемент

цикл бесконечный с задержкой в несколько миллисекунд чтобы не грузить процессор
запросили текст элемента в нем, если нужный сайт переписываем что нужно...

qsd 05.01.2010 00:35

это работает с ИЕ (причем некрасиво), но не работает с фф, т.к. там механизм окон реализован подругому. я не нашел окна, ответственного за прием сообщений об изменении поля с урл.

я вообще хз че с этим фф делать(

qsd 05.01.2010 00:56

только что промониторил все окна мозиллы, ничего с http туда не приходит, нужен другой подход. хук send тоже неподходит. остается хук PR_Write, но подменяя хедеры GET / на GET /adad.php в строке урла получаем:
http://ya,ru/adad.php
!!!

то же самое с хуком send, значит получение урла, откуда получен ответ, происходит какимто другим образом

qsd 05.01.2010 01:07

вопрос: откуда можно достать инфу с какого урла качается в данный момент инфа (функцией PR_Read или recv)? насколько мне известно в ответе от сервера нет информации откуда пришел ответ!

Gar|k 05.01.2010 01:26

ага... нету есть только запрос
GET path HTTP
POST path HTTP

ну а вообще вроде поле HOST является обязательным параметром.
+ ко всему есть такая штука как индификатор сокета - а его можно узнать
так же можно узнать какие сокеты открыл процесс с какими индификаторами...
http://forum.antichat.ru/showpost.php?p=1302363&postcount=28

в общем трындец )

qsd 05.01.2010 01:34

ну допустим я знаю идентификатор сокета(они передаются как параметры функциям PR_Read/PR_Write, а они обе у меня захучены) че дальше?))

это имеешь ввиду?
Код:

                                                        ress = sizeof(sockaddr_in);//--- commenting this line would cause an 10014 error.
                                                        getpeername((SOCKET)ObjHandle, (sockaddr *)&sockname, &ress);

                                                        //--- определяем локальный IP и порт
                                                        ress = sizeof(sockaddr_in);//--- commenting this line would cause an 10014 error.
                                                        getsockname((SOCKET)ObjHandle, (sockaddr *)&locname, &ress);
                               

                                                        //--- коевертируем в понятные для глаза данные )
                                                        remaddr = inet_ntoa(sockname.sin_addr);
                                                        rem_port = ntohs(sockname.sin_port);

                                                        locaddr = inet_ntoa(locname.sin_addr);
                                                        loc_port = ntohs(locname.sin_port);

я просто не силен в сокетах) самое главное подменить URL-Path, т.е. с хостом то можно разобраться хуком connect'a, а вот с URL-Path, который идет после слеша, я вообще хз как быть( че только не пробовал, эта сцука все равно отображает полный путь!

может ff список какойнить создает, где хранится этот path?

qsd 05.01.2010 05:37

чет не понял что ты хотел сказать своим постом) за коды ответа спасибо, но мне нужно всего-лишь одно:
чтобы я перешел на yandex.ru/yandsearch?text=any а в строке браузера было: http://yandex.ru/
!

ща перелопатил исходники фф вместе с документацией пришел к выводу, что докопаться до поля урла можно 2мя способами:
1. xpcom
2. чезез shell-функции мозиллы (LoadURI()/OnLinkClick())
https://developer.mozilla.org/en/Document_Loading_-_From_Load_Start_to_Finding_a_Handler

с первым я никогда не работал, а вторые проблематично вызвать, т.к. они находятся в самом ехе, а не во внешней длл(

в общем какойто пестец

Gar|k 05.01.2010 20:26

ну а че тут не понятного? ) тебе надо хреначить расширение для мозилы-тормозилы )
читай как это делается https://developer.mozilla.org/En/Firefox_addons_developer_guide
я в принципе допер ) все пишется на языке javascript используя DOM мозилы и ее внутренние всякие функции...


Время: 09:49