Привет, Гость ^__^
Регистрация
Показано с 1 по 4 из 4
  1. #1
    Аватар для KING
    Статус
         Offline
    Регистрация
    09.12.2014
    Сообщений
      46
    Поблагодарил(а)
    0
    Благодарностей
    32
    Репутация
    12 +/-

    Post Учимся делать D3D Menu C++ Урок №2 "d3d9 hook"

    Всем привет продолжаем.
    Напишем функцию которая будет перехватывать оригинальный метод DirectX9 - EndScene(ES), выполнять необходимые нам действия и возвращала бы все "на круги своя"...
    Работать будем пока только с этим методом в принципе его достаточно для наших действий
    Для описания хука нам потребуется несколько функций для работы с памятью. Завернем их все в класс cMemory.
    Будем добавлять с помощью "Мастера классов"
    в открывшемся окне нажимаем "Далее" и заполняем согласно скрину

    После этого у вас появятся два фаила cMemory.cpp и cMemory.h
    Работаем с cMemory.h:

    подключим "Windows.h"
    Код HTML:
    #include <Windows.h>
    добавим 3 протатипа
    Код HTML:
    class cMemory
    {
    public:
    cMemory(void);
    ~cMemory(void);
    BOOL  bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask);
    DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask);
    void *Create_Hook(BYTE *src, const BYTE *dst, const int len);
    };
    FindPattern - функция для поиска адресса по уникальному набору байт.
    Create_Hook - функция для установки хука.

    работаем с cMemory.cpp
    Описываем указанные функции

    Код HTML:
    BOOL   cMemory::bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
    {
    for(;*szMask;++szMask,++pData,++bMask)
      if(*szMask=='x' && *pData!=*bMask)
       return false;
    return (*szMask) == NULL;
    }
    DWORD  cMemory::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;
    }
    void * cMemory::Create_Hook(BYTE *src, const BYTE *dst, const int len)
    {
    BYTE *jmp;
    DWORD dwback;
    DWORD jumpto, newjump;
    VirtualProtect(src,len,PAGE_READWRITE,&dwback);
    if(src[0] == 0xE9)
    {
      jmp = (BYTE*)malloc(10);
      jumpto = (*(DWORD*)(src+1))+((DWORD)src)+5;
      newjump = (jumpto-(DWORD)(jmp+5));
      jmp[0] = 0xE9;
      *(DWORD*)(jmp+1) = newjump;
      jmp += 5;
      jmp[0] = 0xE9;
      *(DWORD*)(jmp+1) = (DWORD)(src-jmp);
    }
    else
    {
      jmp = (BYTE*)malloc(5+len);
      memcpy(jmp,src,len);
      jmp += len;
      jmp[0] = 0xE9;
      *(DWORD*)(jmp+1) = (DWORD)(src+len-jmp)-5;
    }
    src[0] = 0xE9;
    *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
    for(int i = 5; i < len; i++)
      src[i] = 0x90;
    VirtualProtect(src,len,dwback,&dwback);
    return (jmp-len);
    }
    Подключаем cMemory.h к Base.cpp:
    Код HTML:
    #include "cMemory.h"
    после задаем указания на класс
    Код HTML:
    cMemory *MemHack;
    Теперь будем описывать перехват ES(работаем с Base.cpp).
    Подключаем необходимые фаилы
    Код HTML:
    #include <d3d9.h>
    #include <d3dx9.h>
    #define D3DparamX  , UINT paramx
    #define D3DparamvalX , paramx
    #pragma comment(lib, "d3d9.lib")
    #pragma comment(lib, "d3dx9.lib")
    Далее указываем:
    Код HTML:
    typedef HRESULT (WINAPI* oEndScene)(LPDIRECT3DDEVICE9 pDevice);
    oEndScene pEndScene = NULL;
    Описываем метод ES
    Код HTML:
    typedef HRESULT (WINAPI* oEndScene)(LPDIRECT3DDEVICE9 pDevice);
    oEndScene pEndScene = NULL;
    HRESULT APIENTRY myEndScene( LPDIRECT3DDEVICE9 pDevice )
    {
    return pEndScene( pDevice );
    }
    именно здесь мы будем "рисовать")
    И сам поток с хуком
    Код HTML:
    int D3d9_Hook(void)
    {
    DWORD*vtbl=0;
    DWORD hD3D9=(DWORD)LoadLibraryA("d3d9.dll");
    DWORD table=MemHack->FindPattern(hD3D9,0x128000,(PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86","xx????xx????xx");
    memcpy(&vtbl,(void*)(table+2),4);
    pEndScene=(oEndScene)MemHack->Create_Hook((PBYTE)vtbl[42],(PBYTE)myEndScene,5);
    return 0;
    }
    Теперь на инициализацию нашей DLL запустим поток. Что бы не писать постоянно всю функцию CreateThread(вдруг еще гне нужно будет) опишем для нее небольшой макрос
    Код HTML:
    #define new_My_Thread(Function) CreateThread(0,0,(LPTHREAD_START_ROUTINE)Function,0,0,0);
    и на дописываем к точке доступа
    Код HTML:
    BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
    {
    if (dwReason==DLL_PROCESS_ATTACH)
    {
      new_My_Thread(D3d9_Hook);
    }
    return TRUE;
    }

  2. 2 пользователей сказали cпасибо KING за это полезное сообщение:

    Admin (18.12.2014),ItemRules (01.06.2016)



  3. #2
    Аватар для S.H.A.T.A.L.K.E.R
    Статус
         Offline
    Регистрация
    22.12.2014
    Сообщений
      36
    Поблагодарил(а)
    1
    Благодарностей
    18
    Репутация
    2 +/-

    Уроки

    темы у тебя полезные разжеваные, буду пытаться добить этот c++ :)

  4. #3
    Banned
    Аватар для BearHack
    Статус
         Offline
    Регистрация
    10.12.2014
    Сообщений
      482
    Поблагодарил(а)
    5
    Благодарностей
    127
    Репутация
    1 +/-
    Я немогу добавить класс как написано у тебя что делать?

  5. #4
    Banned
    Аватар для BearHack
    Статус
         Offline
    Регистрация
    10.12.2014
    Сообщений
      482
    Поблагодарил(а)
    5
    Благодарностей
    127
    Репутация
    1 +/-
    У меня чтоото классы MFC КАЖЕТСЯ ОТКРЫВАЮТСЯ

 

 

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Скачать читы для одиночных и онлайн игр.Баги,хаки,модофикации,скачать вх,wallhack,Crossfire,WarFace,Aimbot для WarFace,читы для игр вконтакте,Тренеры для одиночных игр,читы для Battlefield,Графика & Photoshop,халява,раздача аккаунтов и ключей к играм!

Вся информация что находится на сайте представлена исключительно для ознакомления.Администрация проекта "Best-Hack.Net" не несет ответственности за действия пользователей и не подчиняется законам РФ.