Перейти к содержанию

MinHook Как использовать ?


Рекомендуемые сообщения

Кто нибудь помогите разобраться  с этим пожалуйста .

 

Написал код winapi messagebox 

Спойлер



// Создаем окно при помощи шаблона
// Visual Studio C++ WinApi

// Подключаем библиотеки Windows для Win32
#include <windows.h>

// Объявляем прототип CALLBACK функции
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

// Функция WinAPI для точки входа в программу
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	// Регистрация класса окна
	// Объявляем переменную типа WNDCLASSEX

	WNDCLASSEX wClass; 
	ZeroMemory(&wClass, sizeof(WNDCLASSEX)); // Обнуляем память

	// Заполняем структуру WNDCLASSEX
	wClass.cbSize = sizeof(WNDCLASSEX); // Размер равен размеру структуры
	wClass.hbrBackground = (HBRUSH)COLOR_WINDOW; // Определяем фон окна
	wClass.hInstance = hInstance; // hInstance window
	wClass.lpfnWndProc = (WNDPROC)WndProc; // Процедура обработки окна
	wClass.lpszClassName = "My Window Class"; // Имя класса


	// Если произошла ошибка, то выводим сообщение
	if (!RegisterClassEx(&wClass))
	{
		int nResult = GetLastError();
		MessageBox(NULL, "Класс окна не был создан!", "Ошибка", MB_ICONERROR);
	}

	// Создаем окно при помощи функции WinApi CreateWindowEx
	HWND hWindow = CreateWindowEx(NULL,
		"My Window Class", // Имя класса, который мы определили ранее
		"Мое первое окно с WinApi", // Заголовок окна
		WS_OVERLAPPEDWINDOW,
		300, // x координата по горизонтали
		200, // y координата по вертикали
		640, // ширина создаваемого окна
		480, // высота создаваемого окна
		NULL,
		NULL,
		hInstance, // переменная экземпляра приложения
		NULL);

	// Если окно не было создано, то выдаем сообщение
	if (!hWindow)
	{
		int nResult = GetLastError();
		MessageBox(NULL, "Окно не было создано!", "Ошибка", MB_ICONERROR);
	}

	// Показываем окно
	ShowWindow(hWindow, nShowCmd);

	// Объявляем переменную для сообщений типа MSG
	MSG msg;
	// Обнуляем память по размеру структуры MSG
	ZeroMemory(&msg, sizeof(MSG));

	// Цикл обработки сообщений
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return 0;
}

// определяем процедуру обратного вызова (WinApi)

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_CREATE:
	{

		HWND hButton = CreateWindow(
			"BUTTON",
			"MessageBox!",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			0, 0, 150, 30, hwnd, reinterpret_cast<HMENU>(1337), nullptr, nullptr	
		);

		HWND lButton = CreateWindow(
			"BUTTON",
			"MessageBoxA!",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			480, 0, 150, 30, hwnd, reinterpret_cast<HMENU>(1336), nullptr, nullptr
		);

		HWND pButton = CreateWindow(
			"BUTTON",
			"MessageBoxW!",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			0, 350, 150, 30, hwnd, reinterpret_cast<HMENU>(1335), nullptr, nullptr
		);

		HWND RRButton = CreateWindow(
			"BUTTON",
			"MessageBeep!",
			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			480, 350, 150, 30, hwnd, reinterpret_cast<HMENU>(1334), nullptr, nullptr
		);
		// Здесь будем создавать элементы управления окна
		break;
	}

	case WM_COMMAND:
	{
		switch (LOWORD(wParam))
		{
		case 1337:
			{
			MessageBox(hwnd, "MessageBox", "ne",MB_OK);
			}
			break;

		case 1336:
			{
			MessageBoxA(hwnd, "MessageBoxA", "ne", MB_OK);
			}
			break;

		case 1335:
			{
			MessageBoxW(hwnd, L"MessageBoxW", L"ne", MB_OK);
			}
			break;
		case 1334:
			{
			MessageBeep(MB_OK );
			}
			break;
			// Обработка команд (нажатие кнопок, мыши, полей ввода и т.д.)
		}

		break;
	}

	case WM_DESTROY: // Обработка нажатия кнопки закрытия окна
	{
		// команда Закрыть окно
		PostQuitMessage(0);
		return 0;
		break;
	}
	}

	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}


 

 


Сделал библиотеку с их сайта 

Спойлер



#include <Windows.h>
#include "MinHook.h"

#if defined _M_X64
#pragma comment(lib, "libMinHook.x64.lib")
#elif defined _M_IX86
#pragma comment(lib, "libMinHook.x86.lib")
#endif

typedef int (WINAPI *MESSAGEBOXW)(HWND, LPCWSTR, LPCWSTR, UINT);

// Pointer for calling original MessageBoxW.
MESSAGEBOXW fpMessageBoxW = NULL;

// Detour function which overrides MessageBoxW.
int WINAPI DetourMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
{
    return fpMessageBoxW(hWnd, L"Hooked!", lpCaption, uType);
}

int main()
{
    // Initialize MinHook.
    if (MH_Initialize() != MH_OK)
    {
        return 1;
    }

    // Create a hook for MessageBoxW, in disabled state.
    if (MH_CreateHook(&MessageBoxW, &DetourMessageBoxW, 
        reinterpret_cast<LPVOID*>(&fpMessageBoxW)) != MH_OK)
    {
        return 1;
    }

    // or you can use the new helper function like this.
    //if (MH_CreateHookApiEx(
    //    L"user32", "MessageBoxW", &DetourMessageBoxW, &fpMessageBoxW) != MH_OK)
    //{
    //    return 1;
    //}

    // Enable the hook for MessageBoxW.
    if (MH_EnableHook(&MessageBoxW) != MH_OK)
    {
        return 1;
    }

    // Expected to tell "Hooked!".
    MessageBoxW(NULL, L"Not hooked...", L"MinHook Sample", MB_OK);

    // Disable the hook for MessageBoxW.
    if (MH_DisableHook(&MessageBoxW) != MH_OK)
    {
        return 1;
    }

    // Expected to tell "Not hooked...".
    MessageBoxW(NULL, L"Not hooked...", L"MinHook Sample", MB_OK);

    // Uninitialize MinHook.
    if (MH_Uninitialize() != MH_OK)
    {
        return 1;
    }

    return 0;
}


 

Заинжектил с помощью  extremeinject (cheat engine не инжектил писал ошибку.) Но ничего не происходит пытался менять код этой длл от minihook ничего не понимаю . Кто может обьяснить что надо сделать , что бы поменять мессадж бокс хоть один ? 

Примеров в интернете вообще нет нормальных . 

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, demontronpc сказал:

Заинжектил с помощью  extremeinject (cheat engine не инжектил писал ошибку.)

И не заинжектит. Потому что в коде под "Сделал библиотеку с их сайта" у тебя, по сути, обычный экзешник, а не dll. В DLL точка входа DllMain, например. Устал уже объяснять, что без знания основ нефиг лезть в более сложные вещи.

Ссылка на комментарий
Поделиться на другие сайты

В 19.07.2019 в 08:47, Xipho сказал:

Начни с основ языка

Спойлер

#include <windows.h>
#include <process.h>
 
void DLLProject(PVOID)
{
    while (true)
    {
        Sleep(1);
        if (GetAsyncKeyState(VK_END))
        {
            while (GetAsyncKeyState(VK_END))
            {
                Sleep(1);
            }
            MessageBoxA(GetForegroundWindow(), "Hello World!", "DarkP1xel", NULL);
        }
    }
}
 
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        _beginthread(DLLProject, NULL, NULL);
    }
    return TRUE;
}

 

вот тут все нормально

с другим инжектором но в чит енгине все равно длл не енжектит и пишет ошибку вот dllinject failed failed ingecting the dll force load module failed failed finding address of vcruntime140!_vcrt_GetModuleNameW 

Можешь сказать , что он хочет что бы зинжектить ? 

Ссылка на комментарий
Поделиться на другие сайты

Так он же тебе все написал. 

11 часов назад, demontronpc сказал:

failed finding address of vcruntime140!_vcrt_GetModuleNameW 

Вот же. Он не смог найти адрес в рантайм библиотеке. Либо сам рантайм у тебя не установлен, либо, возможно, неправильную разрядность используешь (типа, пытаешься внедрить х64 библиотеку в х86 код).

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.