Гайд Хук DirectX без паттерна.

alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Рылся в старых исходниках под пб,нашел хук директа с созданием окна и получением оттуда информации (на Detours).
Наслаждайтесь.

Создание окна
Код:
LRESULT CALLBACK MsgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

void DX_Init(DWORD* table)
{
    WNDCLASSEXA wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandleA(NULL), NULL, NULL, NULL, NULL, "DX", NULL };
    RegisterClassExA(&wc);
    HWND hWnd = CreateWindowA("DX", NULL, WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, GetDesktopWindow(), NULL, wc.hInstance, NULL);
    LPDIRECT3D9 pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    LPDIRECT3DDEVICE9 pd3dDevice;
    pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pd3dDevice);

    DWORD* pVTable = (DWORD*)pd3dDevice;
    pVTable = (DWORD*)pVTable[0];

    table[0] = pVTable[42];

    DestroyWindow(hWnd);
}
Крючок на EndScene(сюда же вы должны повесить Reset)
Код:
DWORD WINAPI VMT_Patching(LPVOID  Param)
{
    while (1)
    {
        Sleep(100);

        HookVTable((PDWORD*)nm_pD3Ddev, (PBYTE)myEndScene, 42);
    }
    return 1;
}
  • Loop Функция
Код:
void LoopFunction()
{
    if (hooked == false)
    {
        DWORD VTable[3] = { 0 };
        while (GetModuleHandleA("d3d9.dll") == NULL)
        {
            Sleep(250);
        }
        DX_Init(VTable);
        HOOK(EndScene, VTable[0]);
        while (!nm_pD3Ddev)
        {
            Sleep(50);
        }
        UNHOOK(EndScene, VTable[0]);
        *(PDWORD)&pEndScene = VTable[0];
        CreateThread(NULL, 0, &VMT_Patching, NULL, 0, NULL);
        hooked = true;
    }
}

Вызов в DllMain
Код:
 CreateThread(0,0,(LPTHREAD_START_ROUTINE)LoopFunction,0,0,0);
Дополнительные функции
Код:
PBYTE HookVTable(PDWORD* dwVTable, PBYTE dwHook, INT Index)
{
    DWORD dwOld = 0;
    VirtualProtect((void*)((*dwVTable) + (Index * 4)), 4, PAGE_EXECUTE_READWRITE, &dwOld);
    PBYTE pOrig = ((PBYTE)(*dwVTable)[Index]);
    (*dwVTable)[Index] = (DWORD)dwHook;
    VirtualProtect((void*)((*dwVTable) + (Index * 4)), 4, dwOld, &dwOld);

    return pOrig;
}
Код:
#define HOOK(func,addy) p##func = (o##func)DetourFunction((PBYTE)addy,(PBYTE)my##func)
#define UNHOOK(func,addy) p##func = (o##func)DetourFunction((PBYTE)addy,(PBYTE)p##func)

Пожалуйста, авторизуйтесь для просмотра ссылки.


Подключение
Код:
#include "detours.h"
#pragma comment(lib, "detours.Lib")


 
Забаненный
Статус
Оффлайн
Регистрация
26 Авг 2017
Сообщения
66
Реакции[?]
35
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Почитал твои сообщение и темы ты либо хочешь выебнуться тем что ты топовый кодер или прост шариш , а так лайк за тему
 
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Почитал твои сообщение и темы ты либо хочешь выебнуться тем что ты топовый кодер или прост шариш , а так лайк за тему
Бесполезный оффтоп.
Я нигде и никак не выебываюсь тем,что я топ кодер. Запомните это вы уже,блять.
 
Забаненный
Статус
Оффлайн
Регистрация
26 Авг 2017
Сообщения
66
Реакции[?]
35
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Бесполезный оффтоп.
Я нигде и никак не выебываюсь тем,что я топ кодер. Запомните это вы уже,блять.
это моё личное мнение , тебе должно быть похуй ...
 
Сверху Снизу