Добрый день,
К примеру есть следующая хтмл страница, открытая в лисе (допустим ее адрес, находящийся в панели адреса - 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, в поле урла должен отобразиться нужный урл))) во всяком случае это в теории
эм если пишешь под windows что мешает тебе напрямую работать с окном fireFox через winAPI функции?
FindWindow, GetWindowText, SetWindowText (http://vsokovikov.narod.ru/New_MSDN_API/Window/win_functions.htm)
чтобы быстро найти нужный элемент используй стандартную утилиту VS - Spy++
чтоб писать легче было прогу
алгоритм такой:
нашли окно
нашли нужный элемент
цикл бесконечный с задержкой в несколько миллисекунд чтобы не грузить процессор
запросили текст элемента в нем, если нужный сайт переписываем что нужно...
это работает с ИЕ (причем некрасиво), но не работает с фф, т.к. там механизм окон реализован подругому. я не нашел окна, ответственного за прием сообщений об изменении поля с урл.
я вообще хз че с этим фф делать(
только что промониторил все окна мозиллы, ничего с http туда не приходит, нужен другой подход. хук send тоже неподходит. остается хук PR_Write, но подменяя хедеры GET / на GET /adad.php в строке урла получаем:
http://ya,ru/adad.php
!!!
то же самое с хуком send, значит получение урла, откуда получен ответ, происходит какимто другим образом
ага... нету есть только запрос
GET path HTTP
POST path HTTP
ну а вообще вроде поле HOST является обязательным параметром.
+ ко всему есть такая штука как индификатор сокета - а его можно узнать
так же можно узнать какие сокеты открыл процесс с какими индификаторами...
http://forum.antichat.ru/showpost.php?p=1302363&postcount=28
в общем трындец )
ну допустим я знаю идентификатор сокета(они передаются как параметры функциям 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?
чет не понял что ты хотел сказать своим постом) за коды ответа спасибо, но мне нужно всего-лишь одно:
чтобы я перешел на 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
с первым я никогда не работал, а вторые проблематично вызвать, т.к. они находятся в самом ехе, а не во внешней длл(
в общем какойто пестец
ну а че тут не понятного? ) тебе надо хреначить расширение для мозилы-тормозилы )
читай как это делается https://developer.mozilla.org/En/Firefox_addons_developer_guide
я в принципе допер ) все пишется на языке javascript используя DOM мозилы и ее внутренние всякие функции...
я инжектюсь в АП фф, хотелось бы решить это без аддонов) либо написать его так, чтобы я имел полный контроль над аддоном. в принципе нужно это тока для хттпс, возможно прокатит такой вариант:
1. подменяем в PR_Write path на тот что наодится в поле адреса в данный момент
2. расшифровываем send и подменяем запрос обратно
по идее не должен он из зашифрованного запроса выстаскивать урл... ну самый крайний вариант - написать свой send или отлавливать запрос на более низком уровне..
нужно очень) есть есть силы, возможности и желание, заплачу за реализацию)
ps я уже думал об этом))
вот набросал на FASM :)
нужно из объявлений удалить не используемые функции + удалить
cmp [uMsg],WM_LBUTTONDBLCLK
je .destroy
что бы она не закрывалась по двойному нажатию
и изменить mov [wc.hbrBackground],25d // 25d это цвет подсказки на COLOR_WINDOW+1
и по хорошему сделать командную строку для запуска типа
x y width height text
format PE GUI 4.0
entry start
include 'C:\FASM\INCLUDE\win32a.inc'
section '.text' code import writeable readable executable
;---------импорт функций
library kernel32, 'kernel32.dll',\
user32,'user32.dll',\
gdi32,'Gdi32.dll'
import gdi32,\
TextOut,'TextOutA',\
SetBkMode,'SetBkMode',\
GetStockObject,'GetStockObject',\
SelectObject,'SelectObject',\
MoveTo,'MoveToEx',\
LineTo,'LineTo'
import kernel32,\
ExitProcess, 'ExitProcess',\
GetModuleHandle,'GetModuleHandleA',\
GetLocalTime,'GetLocalTime',\
CreateFile,'CreateFileA',\
ReadFile,'ReadFile',\
CloseHandle,'CloseHandle',\
CreateEvent,'CreateEventA',\
WaitForSingleObject,'WaitForSingleObject',\
CreateThread,'CreateThread'
import user32,\
RegisterClass,'RegisterClassExA',\
LoadCursor,'LoadCursorA',\
CreateWindow,'CreateWindowExA',\
ShowWindow,'ShowWindow',\
UpdateWindow,'UpdateWindow',\
GetMessage,'GetMessageA',\
TranslateMessage,'TranslateMessage',\
DispatchMessage,'DispatchMessageA',\
DefWindowProc,'DefWindowProcA',\
PostQuitMessage,'PostQuitMessage',\
BeginPaint,'BeginPaint',\
EndPaint,'EndPaint',\
SendMessage,'SendMessageA',\
wsprintf,'wsprintfA'
proc WndProc,hWnd,uMsg,wParam,lParam
push ebx esi edi
cmp [uMsg],WM_CREATE
je .create
cmp [uMsg],WM_LBUTTONDBLCLK
je .destroy
cmp [uMsg],WM_DESTROY
je .destroy
cmp [uMsg],WM_PAINT
je .paint
jmp .def
.create:
invoke GetStockObject,ANSI_VAR_FONT
mov [hFont],eax
jmp .retrun_null
.paint:
invoke BeginPaint,[hWnd],PaintStruct
mov [hDC],eax
invoke SetBkMode,[hDC],TRANSPARENT
invoke SelectObject,[hDC],[hFont]
invoke TextOut,[hDC],3,3,string,13
invoke EndPaint,[hWnd],PaintStruct
jmp .retrun_null
.destroy:
invoke PostQuitMessage,0
jmp .retrun_null
.def:
invoke DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
jmp .exit
.retrun_null:
xor eax,eax
.exit:
pop edi esi ebx
ret
endp
proc WinMain,hInst
mov [wc.cbSize],48d
mov [wc.style], CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
mov [wc.lpfnWndProc], WndProc
mov [wc.cbClsExtra],NULL
mov [wc.cbWndExtra],NULL
push [hInstance]
pop [wc.hInstance]
mov [wc.hbrBackground],25d
mov [wc.lpszMenuName],NULL
mov [wc.lpszClassName],ClassName
mov [wc.hIcon],NULL
invoke LoadCursor,NULL,IDC_ARROW
mov [wc.hCursor],eax
invoke RegisterClass,wc
invoke CreateWindow,WS_EX_TOOLWINDOW or WS_EX_TOPMOST,\
ClassName,\
NULL,\
WS_POPUP,\
150,\
150,\
[sizeW],\
[sizeH],\
NULL,\
NULL,\
[hInst],\
NULL
mov [hwnd],eax
invoke ShowWindow, [hwnd],SW_SHOWDEFAULT
invoke UpdateWindow, [hwnd]
.while:
invoke GetMessage,msg,NULL,0,0
test eax,eax
jz .exit
invoke TranslateMessage, msg
invoke DispatchMessage, msg
jmp .while
.exit:
mov eax,[msg.wParam]
ret
endp
start:
invoke GetModuleHandle,0
mov [hInstance],eax
push eax
call WinMain
invoke ExitProcess, 0
;----------данные
ClassName db 'x',0
sizeW dd 117
sizeH dd 18
string db 'http://ya.ru/'
hInstance dd ?
wc WNDCLASSEX ?
hwnd dd ?
msg MSG ?
hDC dd ?
PaintStruct PAINTSTRUCT ?
hFont dd ?
все просто компилируется > fasm code.asm
у меня получилась 2048 байт прога ) но думаю можно и поменьше сделать
Retimiled типа умный? посмотри на мозилку через spy++ , а потом говори.
у нее собственный интерфейс и стандартные виндовые функции тут не работают.
и вообще 5 января люди расслабляют мозг ) креатив выходит с бадуна ) заплатки вон оконные :D
Gar|k
спасиб за код, но нада бы найти более красивый метод) слишком много вариантов когда это не прокатит (например - юзер ресайзит окно) ну ты и сам понимаешь)))
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot