Интересно, а как твой код может ещё документированными способами оказаться в адресном пространстве другого процесса?
> инжектами! Дай ссылку на 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,GetModuleHandle(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)