Работа с Hook`ами в Виндовозе

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by KSoniX, 22 Jan 2008.

  1. KSoniX

    KSoniX Elder - Старейшина

    Joined:
    17 Jan 2008
    Messages:
    94
    Likes Received:
    12
    Reputations:
    1
    правда ли что с хуками можно работать только через Dll ?
     
    1 person likes this.
  2. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Интересно, а как твой код может ещё документированными способами оказаться в адресном пространстве другого процесса?
     
  3. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    инжектами(документировано Google)!
     
    #3 Delimiter, 22 Jan 2008
    Last edited: 22 Jan 2008
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    > инжектами!

    Дай ссылку на msdn, где документирован такой способ.

    > правда ли что с хуками можно работать только через Dll ?

    нет конечно. хуков вообще нет, это страшилка от микрософта
     
  5. KSoniX

    KSoniX Elder - Старейшина

    Joined:
    17 Jan 2008
    Messages:
    94
    Likes Received:
    12
    Reputations:
    1
    я проста хотел создать хуки в своем адресном пространстве ?

    я объявил callback функцию для хука в своем адресном пространстве но она не срабатывает почему?
     
    #5 KSoniX, 22 Jan 2008
    Last edited by a moderator: 26 Jan 2008
  6. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    Чего ты хочешь обьясни подробнее..... код в студию!!!!
    Какое событие посылаешь.....(надеюсь не нажатия клавы :) Убьют нафик, при наличии темы клавиатурных шпийоноф)?
    Как ловишь....?
    Действительно ли своему Handle....(надеюсь что не Global :) )?
     
    #6 Delimiter, 22 Jan 2008
    Last edited: 22 Jan 2008
  7. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Думаешь она будет "срабатывать" (походу оно механическое) от того что ты её просто объявил?
     
  8. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    http://sources.ru/msdn/library/setwindowshookex.shtml

    lpfn
    указатель на функцию ловушки. Если параметр dwThreadId равен нулю или содержит идентификатор потока, созданного в другом процессе, то параметр lpfn должен указывать на процедуру ловушки в динамически закгружаемой библиотеке (DLL). Либо lpfn может указывать на функцию ловушки в текущем процессе.
     
    #8 spider-intruder, 22 Jan 2008
    Last edited: 22 Jan 2008
  9. KSoniX

    KSoniX Elder - Старейшина

    Joined:
    17 Jan 2008
    Messages:
    94
    Likes Received:
    12
    Reputations:
    1
    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    HWND selfhandle;
    HHOOK shook=0;
    LRESULT CALLBACK CBTProc(int iCode,WPARAM wParam,LPARAM lParam)
    {
    if (iCode==HCBT_MINMAX)//(!strcmp(cap,"Half-Life"))
    {
    MessageBoxA(0,(LPCSTR)"You can`t use this Program.",(LPCSTR)"Message from Administrator!",0);// соб шения не выходит если даже использо ваю другие функцию
    /* . . .*/
    }

    return (CallNextHookEx(shook,iCode,wParam,lParam));
    }

    int main ()
    {
    selfhandle=GetForegroundWindow();
    shook=SetWindowsHookExA(WH_CBT,(HOOKPROC)CBTProc,(HINSTANCE)selfhandle,0);
    //. . .
    UnhookWindowsHookEx(shook);
    return 0;
    }
    што делаю нетак
     
  10. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
  11. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    #include <windows.h>
    #include <stdio.h>
    #include <string.h>

    HHOOK shook=0;

    LRESULT CALLBACK CBTProc(int iCode,WPARAM wParam,LPARAM lParam)
    {
    MessageBoxA(0,(LPCSTR)"You can`t use this Program.",(LPCSTR)"Message from Administrator!",0);
    return (CallNextHookEx(shook,iCode,wParam,lParam));
    }

    int main ()
    {
    shook=SetWindowsHookExA(WH_MOUSE,*CBTProc,GetModuleHandle(NULL),0);
    DWORD a=GetLastError();
    MessageBox(0,"","",0);
    UnhookWindowsHookEx(shook);
    return 0;
    }


    Если ерзать мышей Хук сработает - если не дергать нет.

    Я так понимаю тебе надо узнать не запущен ли Халф на компе. Так там хуки ваще не нужны. Если надо дам пример :)
     
    #11 spider-intruder, 22 Jan 2008
    Last edited: 22 Jan 2008
    1 person likes this.
  12. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    #include "Tlhelp32.h"

    .......
    .......
    ........

    char ProcDetect(void)
    {
    #define CREATE_THREAD_ACCESS (PROCESS_QUERY_INFORMATION|PROCESS_VM_READ| PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ)
    char *name="ИМЯ ПРОЦЕСА";
    int PID_=0;
    HANDLE process=NULL;
    PROCESSENTRY32 Pc = {sizeof(PROCESSENTRY32)};
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
    if(Process32First(hSnapshot, &Pc))
    {
    do {
    if(!strcmp(Pc.szExeFile,name))
    {
    flag=1;
    }
    }
    while(Process32Next(hSnapshot, &Pc));
    }
    return flag;
    }


    Вернет 1 если найдет имя процесса в списке процессов.
    Я так антивирусы ищу :)
     
    1 person likes this.
  13. Talisman

    Talisman Elder - Старейшина

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    палевный метод. проактивка равзе не орет? хотя не должна... операция вроде обычная найти окно нужное.

    почитай про скрытые процессы и их обнаружение. имхо нужно и их позырить.

    Кста, сервисы ты так найдешь все? уверен?
     
  14. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Если этот пост мне - то спасибо. Я уж как нибудь разберусь сам :)
    Если тому кто задал вопрос - то я толком не понял что ему надо - появится расскажет.
     
  15. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    кроме setwindowshookex можно внедряться еще многими способами(CreateRemoteThread, также встречал GetThreadContext, SetThreadContext, видел еще примеры с NtMapViewOfSection, QueueUserAPC)
     
  16. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    не все инжекты одинаково полезны :)
     
  17. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Ну хоть бы отписался получилось или нет - ГАД :)
     
  18. KSoniX

    KSoniX Elder - Старейшина

    Joined:
    17 Jan 2008
    Messages:
    94
    Likes Received:
    12
    Reputations:
    1
    уменяя то работает то нет. ты можеш дать пример по Халфим
     
    #18 KSoniX, 24 Jan 2008
    Last edited: 24 Jan 2008
  19. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    71
    Reputations:
    13
    да, процедура перехвата обязательно должна быть в dll.
     
  20. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    2MegaDeth
    Он ставит хук в своем же процесе - нахрена ему длл. Нет не обязательно!