Просмотр полной версии : Работа с Hook`ами в Виндовозе
правда ли что с хуками можно работать только через Dll ?
groundhog
22.01.2008, 16:50
Интересно, а как твой код может ещё документированными способами оказаться в адресном пространстве другого процесса?
Delimiter
22.01.2008, 17:06
инжектами(документировано Google)!
> инжектами!
Дай ссылку на msdn, где документирован такой способ.
> правда ли что с хуками можно работать только через Dll ?
нет конечно. хуков вообще нет, это страшилка от микрософта
я проста хотел создать хуки в своем адресном пространстве ?
я объявил callback функцию для хука в своем адресном пространстве но она не срабатывает почему?
Delimiter
22.01.2008, 17:24
Чего ты хочешь обьясни подробнее..... код в студию!!!!
Какое событие посылаешь.....(надеюсь не нажатия клавы :) Убьют нафик, при наличии темы клавиатурных шпийоноф)?
Как ловишь....?
Действительно ли своему Handle....(надеюсь что не Global :) )?
groundhog
22.01.2008, 17:25
Думаешь она будет "срабатывать" (походу оно механическое) от того что ты её просто объявил?
spider-intruder
22.01.2008, 17:43
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;
}
што делаю нетак
хуки разными бывают !?
https://forum.antichat.ru/showpost.php?p=561639&postcount=12
без dll ...
spider-intruder
22.01.2008, 18:21
#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;
}
Если ерзать мышей Хук сработает - если не дергать нет.
Я так понимаю тебе надо узнать не запущен ли Халф на компе. Так там хуки ваще не нужны. Если надо дам пример :-)
spider-intruder
22.01.2008, 18:36
#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 если найдет имя процесса в списке процессов.
Я так антивирусы ищу :-)
Talisman
22.01.2008, 18:59
палевный метод. проактивка равзе не орет? хотя не должна... операция вроде обычная найти окно нужное.
почитай про скрытые процессы и их обнаружение. имхо нужно и их позырить.
Кста, сервисы ты так найдешь все? уверен?
spider-intruder
22.01.2008, 19:06
Если этот пост мне - то спасибо. Я уж как нибудь разберусь сам :-)
Если тому кто задал вопрос - то я толком не понял что ему надо - появится расскажет.
кроме setwindowshookex можно внедряться еще многими способами(CreateRemoteThread, также встречал GetThreadContext, SetThreadContext, видел еще примеры с NtMapViewOfSection, QueueUserAPC)
не все инжекты одинаково полезны :)
spider-intruder
23.01.2008, 13:49
Ну хоть бы отписался получилось или нет - ГАД :)
spider-intruder уменяя то работает то нет. ты можеш дать пример по Халфим
MegaDeth
24.01.2008, 15:58
да, процедура перехвата обязательно должна быть в dll.
spider-intruder
24.01.2008, 16:27
2MegaDeth
Он ставит хук в своем же процесе - нахрена ему длл. Нет не обязательно!
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot