MasterGH

Сборник проектов на C++

2 сообщения в этой теме

Здесь выкладываются проекты по системному программированию на С++. Т.е. программирование всего, что связано с процессами, потоками, хуками, драйверами, работа с памятью и т.п. всё-то что характерно для Windows операционных систем. 


Известный MHS от L.Spiro

Очень много примеров для различных задач находится в этом проекте. Просто рай для изучения С++.

Ссылки с нашего форума:

MHS (исходники)

Stars.rar

Kerner драйвер(исходники)

StockReport2008.rar

MHS6.1.rar (скомпилированный вариант)

MHS6.1.rar

Справка по MHS

MHS Help.rar


Установка хуков (wtlui.sln)

SVN (на текущей момент ревизия 39, Visual Studio 2010),

Исхдоник (с примером tracedll)

wtlui.rar

Пример (пример установки хука на запись в память):


#include <stdio.h>
#include <detours.h>

typedef BOOL (__cdecl *WPMProc) (HANDLE,LPVOID,LPVOID,DWORD,LPVOID);
WPMProc WPM;

BOOL MyWPM(HANDLE hProc, LPVOID lpAddress, LPVOID lpBuffer, DWORD dwSize, LPVOID shit) {
    char szText[512];

    sprintf(szText, "WriteProcessMemory Call (Write to process %d at address %x bytes %x)\nAllow WriteProcessMemory to be executed?", GetProcessId(hProc), lpAddress, lpBuffer);

    if(MessageBox(0, szText, "WPM Call", MB_YESNO) == IDYES)
        return WPM(hProc,lpAddress,lpBuffer,dwSize,shit);

    return 0;
}

void lpMain(){
    DWORD dwWPM;
    HMODULE hKernel;

    if(hKernel = GetModuleHandle("kernel32.dll")){
        dwWPM = (DWORD)GetProcAddress(hKernel, "WriteProcessMemory");
        WPM = (WPMProc)DetourFunction((PBYTE)WriteProcessMemory, (PBYTE)MyWPM);
    }
}

BOOL WINAPI DllMain(HINSTANCE hInst, DWORD ul_reason, LPVOID lpReserved){
    if (ul_reason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(hInst);
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&lpMain, 0, 0, 0);
    }
    return 1;
}
#include <windows.h>

Это код старого проекта, в новом проекте DetourFunction изменился на DetourAttach (см. detours.h)

0

Поделиться сообщением


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

Обработка нажатий клавиш в трейнере.

Есть множество способов определить какие клавиши были нажаты и если была нажата определённая или определённые, то выполнить какой-то код трейнера. Обычно в таких целях принято пользоваться GetAnsyKeyState помещая его в процедуру цикла обработки сообщений трейнера, также можно воспользоваться акселераторами. Но возможно теоретически "сообщения" о нажатых клавишах могут не дойти до этой процедуры потому что код процесса игры, который написали разработчики уберёт события о клавишах из системной очереди сообщений... или же например будет включен "монопольный" режим обработки клавиш. Т.е. если вы нажмёте на определённую клавишу, трейнер работать не будет.

Команда Cheathappens стала использовать directx input хук(и) перехватывая события от клавиш клавиатуры. Не буду писать как я об этом узнал... Короче говоря стоит взять на заметку использовать directx input. Этот метод и есть выход из той ситуации которую я описал выше.

Пример:

This sample

DInput-Hook-2005-22-01.zipdemonstrates using DirectInput hooking to send key-presses to DirectInput-based applications, mostly games. It is actually more like a component in that it can readily be used as is, you'll just have to write client applications.

The main component is DirectInput-Hook.dll. This DLL exports 2 functions, InstallHook and RemoveHook. The first instructs the DLL to start inspecting the names of all processes loaded afterwards in search for a specific process, and then injecting code into that process to override DirectInput8Create. The process name is specified in a registry key, HKEY_CURRENT_USER\Software\Dinput-Hook.

The DLL component intercepts requests to create GUID_SysKeyboard devices and returns a special keyboard device instead. This special keyboard device, on initialization, creates a pipe named "DInput-Pipe". Whenever IDirectInputDevice8::GetDeviceState is called to retrieve the state of the keyboard in immediate mode, the keyboard checks the pipe for any pending messages, reads them, parses them to determine what key-presses to simulate, and returns a keyboard state containing the simulated key-presses.

Message format is straight-forward: Strings containing space-seperated lists of integral scan-codes; the values for DIK_* constants.

Nothing is done with buffered input. You're free to modify the code if you like, you'll find a couple of hints in the comments.

Important things to keep in mind:

1. You must keep the DLL loaded while the target application hasn't stopped using DirectInput. Otherwise, our DirectInput interface implementor objects will be unloaded and the target application will crash.

2. Put the target process name in the registry, and call InstallHook before launching the target process.

A sample client application is provided - all it does is hook "Keyboard.exe", one of the DirectInput samples included in the SDK, and sends it 4 key-presses all the time: Escape, 1, 2 and 3.

As always, my code is public domain. APIHijack, the hooking library, is not. Contact its author for license details. 2003 and 2005 solutions are included.

post-3-1296127744,58_thumb.jpg

0

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас