![]() |
Работа с Hook`ами в Виндовозе
правда ли что с хуками можно работать только через Dll ?
|
Интересно, а как твой код может ещё документированными способами оказаться в адресном пространстве другого процесса?
|
инжектами(документировано Google)!
|
> инжектами!
Дай ссылку на msdn, где документирован такой способ. > правда ли что с хуками можно работать только через Dll ? нет конечно. хуков вообще нет, это страшилка от микрософта |
я проста хотел создать хуки в своем адресном пространстве ?
я объявил callback функцию для хука в своем адресном пространстве но она не срабатывает почему? |
Чего ты хочешь обьясни подробнее..... код в студию!!!!
Какое событие посылаешь.....(надеюсь не нажатия клавы :) Убьют нафик, при наличии темы клавиатурных шпийоноф)? Как ловишь....? Действительно ли своему Handle....(надеюсь что не Global :) )? |
Думаешь она будет "срабатывать" (походу оно механическое) от того что ты её просто объявил?
|
http://sources.ru/msdn/library/setwindowshookex.shtml
lpfn указатель на функцию ловушки. Если параметр dwThreadId равен нулю или содержит идентификатор потока, созданного в другом процессе, то параметр lpfn должен указывать на процедуру ловушки в динамически закгружаемой библиотеке (DLL). Либо lpfn может указывать на функцию ловушки в текущем процессе. |
#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; } што делаю нетак |
|
#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,GetModul eHandle(NULL),0); DWORD a=GetLastError(); MessageBox(0,"","",0); UnhookWindowsHookEx(shook); return 0; } Если ерзать мышей Хук сработает - если не дергать нет. Я так понимаю тебе надо узнать не запущен ли Халф на компе. Так там хуки ваще не нужны. Если надо дам пример :-) |
#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 если найдет имя процесса в списке процессов. Я так антивирусы ищу :-) |
палевный метод. проактивка равзе не орет? хотя не должна... операция вроде обычная найти окно нужное.
почитай про скрытые процессы и их обнаружение. имхо нужно и их позырить. Кста, сервисы ты так найдешь все? уверен? |
Если этот пост мне - то спасибо. Я уж как нибудь разберусь сам :-)
Если тому кто задал вопрос - то я толком не понял что ему надо - появится расскажет. |
кроме setwindowshookex можно внедряться еще многими способами(CreateRemoteThread, также встречал GetThreadContext, SetThreadContext, видел еще примеры с NtMapViewOfSection, QueueUserAPC)
|
не все инжекты одинаково полезны :)
|
Ну хоть бы отписался получилось или нет - ГАД :)
|
Цитата:
|
да, процедура перехвата обязательно должна быть в dll.
|
2MegaDeth
Он ставит хук в своем же процесе - нахрена ему длл. Нет не обязательно! |
| Время: 23:12 |