C++ Hook

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Seçkin Üye
Katılım
15 Nis 2016
Mesajlar
416
Tepki puanı
2
Yaş
25
10 HİZMET YILI
PHP:
bool bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for (; *szMask; ++szMask, ++pData, ++bMask)
if (*szMask == 'x' && *pData != *bMask)
return 0;
return (*szMask) == NULL;
}

DWORD FindPattern(DWORD dwAddress, DWORD dwLen, BYTE *bMask, char * szMask)
{
for (DWORD i = 0; i<dwLen; i++)
if (bCompare((BYTE*)(dwAddress + i), bMask, szMask))
return (DWORD)(dwAddress + i);
return 0;
}

int HookD3D(void)
{
DWORD adr;
DWORD hD3D;
DWORD *vTable;
hD3D = (DWORD)GetModuleHandleA("d3d9.dll");
adr = FindPattern(hD3D, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");
memcpy(&vTable, (void *)(adr + 2), 4);
Sleep(250);
if (hD3D)
{
oReset = (tReset)DetourCreate((PBYTE)vTable[16], (PBYTE)&hkReset, 5);
oPresent = (tPresent)DetourCreate((PBYTE)vTable[17], (PBYTE)&hkPresent, 5);
}
return 0;
}

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
HookD3D();
break;
}
return true;
}



Basemde Yukarıdaki Hook Kodlarını Kullanıyorum Fakat Artık Oyun Çalışmayı Durdurma Hatası Vermeye Başladı.

adr = FindPattern(hD3D, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");

0x128000'lü olan Yer Veya Ondan Sonraki Array Fix Olabilir Mi ?

Bunlar Fix İse Güncelini Vere Bilecek Var Mı ?
 
Moderatörün son düzenlenenleri:
Üye
Katılım
19 Haz 2017
Mesajlar
12
Tepki puanı
0
Yaş
35
8 HİZMET YILI
bu hook fıxlı kardeşim :) günceli var
 
Uzman Üye
Katılım
13 Nis 2016
Mesajlar
287
Tepki puanı
77
10 HİZMET YILI
D3DHook.h
PHP:
#pragma comment(lib, "detours.lib")
#include "detours.h"
#pragma region D3D9_Interface_Hook

bool hooked = false;
#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)
LPDIRECT3DDEVICE9 nm_pD3Ddev;
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;
}
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);
}

DWORD WINAPI VMT_Patching( LPVOID  Param )
{
    while(1)
    {
        Sleep(100);
        HookVTable((PDWORD*)nm_pD3Ddev, (PBYTE)myEndScene, 42);
    }
    return 1;
}

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); // hooking
        hooked = true;
    }     
}
#pragma endregion D3D9_Interface_Hook
buda nereye kodluyorsan base.cpp

PHP:
#include "D3DHook.h"

BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
    DisableThreadLibraryCalls(hDll);
    if (dwReason==DLL_PROCESS_ATTACH)
    {
        Start_Therad(LoopFunction);
    }
    return TRUE;
}

Benimki Bu çalışıyor Gayet
 
Süper Üye
Katılım
2 Mar 2017
Mesajlar
605
Tepki puanı
55
Ödüller
9
9 HİZMET YILI
detours 1.5 e geçeceksin sorunun cevabı bu saçma sapan hook atmayın.
 
Seçkin Üye
Katılım
15 Nis 2016
Mesajlar
416
Tepki puanı
2
Yaş
25
10 HİZMET YILI
D3DHook.h
PHP:
#pragma comment(lib, "detours.lib")
#include "detours.h"
#pragma region D3D9_Interface_Hook

bool hooked = false;
#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)
LPDIRECT3DDEVICE9 nm_pD3Ddev;
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;
}
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);
}

DWORD WINAPI VMT_Patching( LPVOID  Param )
{
    while(1)
    {
        Sleep(100);
        HookVTable((PDWORD*)nm_pD3Ddev, (PBYTE)myEndScene, 42);
    }
    return 1;
}

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); // hooking
        hooked = true;
    }    
}
#pragma endregion D3D9_Interface_Hook
buda nereye kodluyorsan base.cpp

PHP:
#include "D3DHook.h"

BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
    DisableThreadLibraryCalls(hDll);
    if (dwReason==DLL_PROCESS_ATTACH)
    {
        Start_Therad(LoopFunction);
    }
    return TRUE;
}

Benimki Bu çalışıyor Gayet







CreateThread Bunuda verir misin ?
 
Üye
Katılım
24 Tem 2017
Mesajlar
18
Tepki puanı
0
Ödüller
7
Yaş
28
8 HİZMET YILI
eyvallah pice bayıldım (profil fotna)
 
Onaylı Üye
Katılım
25 Tem 2017
Mesajlar
108
Tepki puanı
10
8 HİZMET YILI
Lowlara bak hele böyle yap bakalım oyuna girebiliyormusun o hookla
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst