Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите поставить хук 
V
    Опции темы
NOCaut
Дата 14.6.2011, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 5.12.2008

Репутация: нет
Всего: 0



Функция 1 возвращает что не так мож ктото видет что не так?


Код


typedef int (WSAAPI*SEND)(SOCKET s, const char FAR * buf, int len, int flags);

int SetHook(BOOL bSet) // Функция устанавливает/снимает хук в зависимости от bSet
{

    HINSTANCE hHookDll;
    SEND hpHookProc = NULL;
    HHOOK hHook;
    if(bSet) // Если устанавливаем
    {
        hHookDll = LoadLibrary(L"wsock32.dll");    
        if(hHookDll) // Если загружена библиотека
        {                
            SEND pfnMyFunction;
            pfnMyFunction = (SEND)
            hpHookProc = (SEND)GetProcAddress(hHookDll, "Send"); // Получим адрес хук-функции
            if(hpHookProc) // Если успешно получен адрес ф-ции,
            {
              
                // то установим хук
                hHook = SetWindowsHookEx(WH_GETMESSAGE, // тип хука
                        (HOOKPROC)pfnMyFunction, // хук-функция
                        hHookDll, // хендл библиотеки с хук-функцией
                        NULL);

                if(hHook == NULL) // Если хук не установился, вернем ошибку
                    return 3;
            }
            else
                return 1;
        }
        else
            return 2;
    }
    else // Если снимаем хук
        UnhookWindowsHookEx(hHook);

    return 0;
}

PM MAIL   Вверх
NOCaut
Дата 14.6.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 5.12.2008

Репутация: нет
Всего: 0



что тут не так?
Код

               hHook = SetWindowsHookEx(WH_GETMESSAGE, // тип хука
                       (HOOKPROC)hpHookProc, // хук-функция
                      hHookDll, // хендл библиотеки с хук-функцией
                     NULL);


Это сообщение отредактировал(а) NOCaut - 14.6.2011, 17:36
PM MAIL   Вверх
YDean
Дата 14.6.2011, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.9.2009

Репутация: 1
Всего: 1



Во-первых, в "wsock32.dll" нет функции "Send", есть "send".

Во-вторых, если мы вешаемся на WH_GETMESSAGE, обработчик должен быть в формате
LRESULT CALLBACK GetMsgProc( int code,  WPARAM wParam,   LPARAM lParam );
где wParam - flag, а lParam - MSG * (см. MSDN)

В приведенном коде делается попытка повесить в качестве функции мониторинга сообщений функцию посылки в сокет.  smile 

Это сообщение отредактировал(а) YDean - 14.6.2011, 21:22
PM   Вверх
ASMatic
Дата 15.6.2011, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: 1
Всего: 1



NOCaut,  smile  повеселил. SetWindowsHookEx() - это не для винсока придумано, ВИНДОЗ_хук, заметь.

Цитата(YDean @  14.6.2011,  19:21 Найти цитируемый пост)
Во-первых, в "wsock32.dll" нет функции "Send", есть "send".

это тут не мешает.
PM MAIL   Вверх
NOCaut
Дата 15.6.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 5.12.2008

Репутация: нет
Всего: 0



http://forum.vingrad.ru/topic-73775.html - нашол решение тут вот и пробую его релизовать!!

Добавлено через 6 минут и 34 секунды
SetWindowsHookEx - непонял.... Мне нада поставить ловушку в сетевую функцию чтоб знать что сейчас в броузере. все
PM MAIL   Вверх
YDean
Дата 15.6.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.9.2009

Репутация: 1
Всего: 1



Цитата(ASMatic @ 15.6.2011,  07:35)
Цитата(YDean @  14.6.2011,  19:21 Найти цитируемый пост)
Во-первых, в "wsock32.dll" нет функции "Send", есть "send".

это тут не мешает.

Нет, позвольте.
Скомпили-погляди...  smile 

Цитата

SetWindowsHookEx - непонял.... Мне нада поставить ловушку в сетевую функцию чтоб знать что сейчас в броузере. все

SetWindowsHookEx(WH_GETMESSAGE...) ставит ловушку на очередь обработки сообщений.
PM   Вверх
500mhz
Дата 15.6.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 3
Всего: 14



ASMatic вы так уверены что 
Цитата

SetWindowsHookEx() - это не для винсока придумано, ВИНДОЗ_хук, заметь.
 ?


--------------------

PM MAIL ICQ   Вверх
NOCaut
Дата 15.6.2011, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 5.12.2008

Репутация: нет
Всего: 0



Да ето я давно поправил и заменил wsock32 на ws2_32
Во-первых, в "wsock32.dll" нет функции "Send", есть "send".

Но функция сообщения никакие не при нимает


Код

__declspec(dllexport) LRESULT CALLBACK send(int iCode, WPARAM wParam, LPARAM lParam)
{// Если использовать это функцию для WH_GETMESSAGE, то что бы вы не нажимали будет писАться 'a' :-)
// iCode - сообщает хук-функции о том, что делать с данными
    if(iCode>=0) // Если iCode>=0, то данные нужно обработать
    {
        MSG *msg = (MSG*)lParam; // Сообщение, получаемое некоторым окном
        MessageBox(0,L"",L"",0);
        if(msg->message == WM_CHAR) // Если сообщение WM_CHAR, т.е. юзверь нажал кнопку на клавиатуре,
        {
            msg->wParam = (WPARAM)'a'; // то заменим введенный символ на 'a'
        }
    }
    else // Если iCode
        return CallNextHookEx(NULL, iCode, wParam, lParam);

    return 0;
}

int SetHook(BOOL bSet) // Функция устанавливает/снимает хук в зависимости от bSet
{

    HINSTANCE hHookDll;
    HOOKPROC hpHookProc = NULL;
    HHOOK hHook = NULL;
    if(bSet) // Если устанавливаем
    {
        hHookDll = LoadLibrary(L"ws2_32.dll");    
        if(hHookDll) // Если загружена библиотека
        {                
//            SEND hpHP;
//            hpHP=(SEND)
            hpHookProc = (HOOKPROC)GetProcAddress(hHookDll, "send"); // Получим адрес хук-функции
            if(hpHookProc != NULL) // Если успешно получен адрес ф-ции,
            {              
                    // то установим хук
                    hHook = SetWindowsHookEx(WH_GETMESSAGE, // тип хука
                            (HOOKPROC)send, // хук-функция
                            hHookDll, // хендл библиотеки с хук-функцией
                            NULL);

                if(hHook == NULL) // Если хук не установился, вернем ошибку
                    return 3;
                else
                    return 4;
            }
            else
                return 1;
        }
        else
            return 2;
    }
    else // Если снимаем хук
        UnhookWindowsHookEx(hHook);

    return 0;
}


PM MAIL   Вверх
NOCaut
Дата 15.6.2011, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 5.12.2008

Репутация: нет
Всего: 0



И ещее у меня пример для клавиатури а как оловити  http запрос ?
PM MAIL   Вверх
xvr
Дата 15.6.2011, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(NOCaut @  15.6.2011,  11:41 Найти цитируемый пост)
Но функция сообщения никакие не при нимает

Еще бы - вы в хук подали не свою функцию send, а функцию send из winsock'а.

То, что вы пытаетесь сделать, делается не через SetWindowsHook[Ex] (о чем вам кстати уже сказали), а через перехват функции в dll, например через либу Detours


Это сообщение отредактировал(а) xvr - 15.6.2011, 12:27
PM MAIL   Вверх
NOCaut
Дата 15.6.2011, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 5.12.2008

Репутация: нет
Всего: 0



как ето не свою я свою передал сенд!!!! я ж обявил ее више..

Так как я делаю тоже можно http://forum.vingrad.ru/topic-73775.html

Это сообщение отредактировал(а) NOCaut - 15.6.2011, 12:31
PM MAIL   Вверх
xvr
Дата 15.6.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(NOCaut @  15.6.2011,  12:30 Найти цитируемый пост)
как ето не свою я свою передал сенд!!!! я ж обявил ее више..

Да, действительно не свою, но handle dll (где должна лежать эта самая процедура), почему то передаешь от winsock'а. Так работать не будет

Цитата(NOCaut @  15.6.2011,  12:30 Найти цитируемый пост)
Так как я делаю тоже можно

Нельзя

PM MAIL   Вверх
500mhz
Дата 15.6.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 3
Всего: 14



сорцы

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  wepmetering_src.zip 36,24 Kb


--------------------

PM MAIL ICQ   Вверх
NOCaut
Дата 15.6.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 5.12.2008

Репутация: нет
Всего: 0



Как ето нельзя поставить хук и смотреть что там возвращает? непонимаю кто запрещает ето делать  smile 

https://wasm.ru/forum/viewtopic.php?id=24615 - вот пробую на delphi

Код

procedure process_data(s:tsocket;tx:pchar);
var
size:integer;
pname:TSockAddr;
begin
   // what write  ?????
 // when i write showmessage(tx) // i see garbage
end;


Добавлено @ 12:55
cспасибо за сорци щас гляну что там надеюся ето то что мне нада )))

Добавлено @ 13:04
0) как из buf витянуть мою url  smile 
1) pWsa->buf - тут хранится строка url я правильно понял?
2) а можно доступится к http статусу используя ваш код? там (200,404,503...)

Это сообщение отредактировал(а) NOCaut - 15.6.2011, 13:11
PM MAIL   Вверх
500mhz
Дата 15.6.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 3
Всего: 14



Код

if( memstr(buf, "bjarke", len) != NULL ) {
      MessageBox(NULL, "Bjarke located! (in send)", "WepMetering", MB_SYSTEMMODAL | MB_ICONINFORMATION);



ну так замените на то что вы исчите )))


--------------------

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.