gamehikker Опубликовано 10 сентября, 2017 Поделиться Опубликовано 10 сентября, 2017 Всем привет .Столкнулся с такой проблемой , как vmt hook для directx (да в интернете полно инфы и исходников). Но что бы я не пытался собрать , всё не работало .Крч , как не старался , ничего не получилось . Написал только обычный хук сплайсингом (работает прекрасно, сам никак не нарадуюсь(но он палится)). Кто может подробно объяснить , как это сделать ?Я был бы очень благодарен . Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 10 сентября, 2017 Поделиться Опубликовано 10 сентября, 2017 36 минут назад, gamehikker сказал: но он палится А VMT хук не палится? 36 минут назад, gamehikker сказал: Крч , как не старался , ничего не получилось Какие действия ты предпринял? Что именно тебе непонятно? Прочитай про то, что такое VMT и где она хранится. 36 минут назад, gamehikker сказал: да в интернете полно инфы Так и попробуй ее почитать, а не копировать исходники и сетовать на то, что ничего не работает. Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 10 сентября, 2017 Автор Поделиться Опубликовано 10 сентября, 2017 2 минуты назад, uhx сказал: А VMT хук не палится? Какие действия ты предпринял? Что именно тебе непонятно? Прочитай про то, что такое VMT и где она хранится. Так и попробуй ее почитать, а не копировать исходники и сетовать на то, что ничего не работает. ухъ как ти всё перефразировал !1 uintptr_t *a=(uintptr_t *)*(uintptr_t *)d3d9device; //a[42] - адрес функции endscene Я типа адрес функции найти могу, а потом что делать ? Никак понять не могу ( Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 10 сентября, 2017 Поделиться Опубликовано 10 сентября, 2017 1 минуту назад, gamehikker сказал: а потом что делать подставить свой адрес? Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 10 сентября, 2017 Поделиться Опубликовано 10 сентября, 2017 4 минуты назад, uhx сказал: подставить свой адрес? Сложна! 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 10 сентября, 2017 Автор Поделиться Опубликовано 10 сентября, 2017 33 минуты назад, uhx сказал: подставить свой адрес? Да вот я не знаю , куда ? ... Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 10 сентября, 2017 Поделиться Опубликовано 10 сентября, 2017 3 минуты назад, gamehikker сказал: Да вот я не знаю , куда ? ... В виртуальную таблицу. Ты прочитал про неё, или нет? Или как ты вообще собрался ставить VMT Hook если ты даже не знаешь об этом ничего? У меня есть готовый пример для тебя, но пока ты мне не объяснишь я ничего скидывать не буду. Расскажи мне что такое VMT и как она работает. Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 10 сентября, 2017 Поделиться Опубликовано 10 сентября, 2017 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 10 сентября, 2017 Автор Поделиться Опубликовано 10 сентября, 2017 6 минут назад, uhx сказал: В виртуальную таблицу. Ты прочитал про неё, или нет? Там на английском (с англом всё bad ) . Не понимаю, как найти адрес , значение которого нужно заменить на свой адрес .... Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 10 сентября, 2017 Автор Поделиться Опубликовано 10 сентября, 2017 2 часа назад, uhx сказал: *пример* спасибо за пример) Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 13 сентября, 2017 Автор Поделиться Опубликовано 13 сентября, 2017 Никак до меня не доходит (( DWORD* pVTable = (DWORD*)g_pd3dDevice; pVTable = (DWORD*)pVTable[0]; DWORD old; VirtualProtect(pVTable, 4, PAGE_READWRITE, &old); *(DWORD*)pVTable = (DWORD)HookedPresent9; VirtualProtect(pVTable, 4, old, &old); Адрес перезаписывается не там Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 13 сентября, 2017 Поделиться Опубликовано 13 сентября, 2017 2 часа назад, gamehikker сказал: Адрес перезаписывается не там Он перезаписывается там, где ты указал. В данном случае это самая первая (нулевая) функция в виртуальной таблице. Чтобы перезаписать, например, EndScene: DWORD* pVTable = *(DWORD**) g_pd3dDevice; const int iEndscene = 42; DWORD old; // Заметь, в данном случае размер VirtualProtecta надо расширить. Можно просто значение побольше поставить. VirtualProtect(pVTable, 0x1000, PAGE_READWRITE, &old); *( pVTable + iEndscene ) = (DWORD) HookedEndscene; VirtualProtect(pVTable, 0x1000, old, &old); И вообще, посмотри уроки кенга например, он там нормально рассказывает про виртуальную таблицу и хуки. Правда хук у него другой. Тебе надо узнать индекс необходимого метода (Present в твоем случае) в виртуальной таблице, можешь погуглить если сам не понимаешь как это найти (можно в отладчике самому найти через pDevice) Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 13 сентября, 2017 Автор Поделиться Опубликовано 13 сентября, 2017 1 час назад, uhx сказал: код Не .Чет нуль реакции .Тестовое приложение даже не повисло(и хук не выполнился) . Я кое-что написал , но вроде перезапись происходит там где надо .Можно в лс ? Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 13 сентября, 2017 Поделиться Опубликовано 13 сентября, 2017 11 минуту назад, gamehikker сказал: Не .Чет нуль реакции .Тестовое приложение даже не повисло(и хук не выполнился). Цитируем лишь фразу на которую отвечаем. Если фраза длинная то укороти до то как у меня ( цитата на тебя ). Так же в цитату не бери коды/видео/спойлеры. Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 13 сентября, 2017 Поделиться Опубликовано 13 сентября, 2017 2 часа назад, gamehikker сказал: приложение даже не повисло(и хук не выполнился) Либо выкладывай весь код, либо решай сам. Откуда мне знать что там у тебя вообще? Погугли, посмотри кенга, я же уже и так многое сказал. Посмотри на UC примеры хуков виртуальных таблиц (там сто раз это всё обсуждалось, плюс на гитхабах в сорцах читов есть готовые классы). В конце концов, разберись вообще с тем что такое виртуальная таблица методов, ибо ты только из-за этого не можешь ничего сделать. А ничего и не получится, если в тупую постоянно брать готовый код. Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 17 сентября, 2017 Автор Поделиться Опубликовано 17 сентября, 2017 (изменено) Вот. Не работает .Хук не выполняется. Адрес перезаписывается не там , где надо Изменено 17 сентября, 2017 пользователем gamehikker Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 сентября, 2017 Поделиться Опубликовано 17 сентября, 2017 34 минуты назад, gamehikker сказал: Адрес перезаписывается не там , где надо Так измени индекс (iEndscene), чтобы перезаписывался там где надо. Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 18 сентября, 2017 Автор Поделиться Опубликовано 18 сентября, 2017 Как найти адрес игрового девайса ? Ссылка на комментарий Поделиться на другие сайты Поделиться
gamehikker Опубликовано 21 сентября, 2017 Автор Поделиться Опубликовано 21 сентября, 2017 Ухъ .Печаль короче ... Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 22 ноября, 2017 Поделиться Опубликовано 22 ноября, 2017 On 18.09.2017 at 7:47 PM, gamehikker said: Как найти адрес игрового девайса ? привет! я делал подобную штуку. например, вот Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 25 ноября, 2017 Поделиться Опубликовано 25 ноября, 2017 В 22.11.2017 в 21:20, keng сказал: Как найти адрес игрового девайса ? создают D3DDevice снова и удаляют)) Ссылка на комментарий Поделиться на другие сайты Поделиться
temtriss Опубликовано 26 ноября, 2017 Поделиться Опубликовано 26 ноября, 2017 В 25.11.2017 в 19:20, X86Jumps сказал: создают D3DDevice Вот у меня остался старый проектик - частично переделанный урок кенга с убранной утечкой памяти(В уроке шрифт создавался в хукнутой Present и не высвобождался, а это очень опасно для функции, которая вызывается 60 раз в секунду(Ну или сколько там ФПС в вашем приложении)) и хуком EndScene вместо Present Скрытый текст #include "HackClass.h" #include <d3dx9.h> #include <d3d9.h> // #include <MinHook.h> #pragma comment(lib, "d3dx9.lib") #pragma comment(lib, "d3d9.lib") // #pragma comment(lib, "libMinHook-x86-v140-mtd.lib") typedef IDirect3D9*(__stdcall *DIRECT3DCREATE9)(unsigned int); // EndaaScene() sig: // \x6A\x20\xB8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x8B\x75 // xxx????x????xx // d3d9.dll + 43B60 HackClass* h = new HackClass; DWORD * DXvTable; typedef HRESULT(__stdcall * EndScene)(IDirect3DDevice9* pDevice); EndScene fnEndScene; BYTE origCode[5] = { 0,0,0,0,0 }; BYTE jmpCode[5] = { 0,0,0,0,0 }; DWORD oldProtEndScene; DWORD funcAddr = 0; LPD3DXFONT pFont; void FildRect(IDirect3DDevice9* pDevice,int x, int y, int w, int h, int a, int r, int g, int b ) { D3DCOLOR color = D3DCOLOR_ARGB(a, r, g, b); D3DRECT rect = { x, y, w, h }; pDevice->Clear(1, &rect, D3DCLEAR_TARGET | D3DCLEAR_TARGET, color, 0, 0); } void WriteTextToScreen(IDirect3DDevice9* pDevice,int x, int y,DWORD color, char* txt) { RECT rect; SetRect(&rect, x, y, x, y); pFont->DrawTextA(NULL, txt, -1, &rect, DT_NOCLIP | DT_LEFT, color); } HRESULT __stdcall HookedEndScene(IDirect3DDevice9* pDevice) { BYTE * CodeDest = (BYTE*)fnEndScene; CodeDest[0] = origCode[0]; *(DWORD*)(CodeDest + 1) = *(DWORD*)(origCode + 1); //h->Log("We Hook EndScene yeaah!!!"); if (pFont) { pFont->Release(); pFont = NULL; } if (!pFont) { D3DXCreateFontA(pDevice, 14, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &pFont); } WriteTextToScreen(pDevice, 15, 80, D3DCOLOR_ARGB(255, 255, 000, 000), "Type your Text HERE!"); FildRect(pDevice, 15, 80, 300, 300, 30, 50, 50, 200); DWORD res = fnEndScene(pDevice); CodeDest[0] = jmpCode[0]; *(DWORD*)(CodeDest + 1) = *(DWORD*)(jmpCode + 1); return res; } void HookDevice() { HWND hWnd = CreateWindowA("STATIC", "WindowsName", 0, 0, 0, 0, 0, 0, 0, 0, 0); HMODULE hD3D9 = GetModuleHandleA("d3d9"); // GetModuleHandleA("d3d9"); h->Log("D3D9 Library Handle: 0x%x", hD3D9); //IDirect3D9*(__stdcall*pDirect3DCreate9)(UINT) = (IDirect3D9*(__stdcall*)(UINT))GetProcAddress(hD3D9, "Direct3DCreate9"); DIRECT3DCREATE9 pDirect3DCreate9 = (DIRECT3DCREATE9)GetProcAddress(hD3D9, "Direct3DCreate9"); // Создаем свое устройство IDirect3D9* pD3D = pDirect3DCreate9(D3D_SDK_VERSION); D3DDISPLAYMODE d3ddm; pD3D->GetAdapterDisplayMode(0, &d3ddm); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = 1; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format; IDirect3DDevice9 * ppReturnedDeviceInterface = 0; // Да - Это то, что нам нужно!)) pD3D->CreateDevice(0, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &ppReturnedDeviceInterface); DXvTable = (DWORD*)(*((DWORD*)ppReturnedDeviceInterface)); ppReturnedDeviceInterface->Release(); pD3D->Release(); FreeLibrary(hD3D9); CloseHandle(hWnd); } // Пустой поток, я не помню зачем я его делал, но удалять и коментить не стал, только вызов закоментил DWORD __stdcall NewThread(LPVOID lp) { return 0; } DWORD __stdcall HookThread(LPVOID lp) { HookDevice(); h->Log("Reset() : 0x%x", DXvTable[16]); h->Log("Present() : 0x%x", DXvTable[17]); h->Log("EndScene() : 0x%x", DXvTable[42]); h->Log("DrawIndexPrimitive() : 0x%x", DXvTable[82]); funcAddr = DXvTable[42]; // Пробуем!) fnEndScene = (EndScene)((DWORD)funcAddr); jmpCode[0] = 0xE9; DWORD addr = (DWORD)HookedEndScene - (DWORD)fnEndScene - 5; // Расчитываем джампик memcpy(jmpCode + 1, &addr, sizeof(DWORD)); memcpy(origCode, fnEndScene, 5); VirtualProtect(fnEndScene, 5, PAGE_EXECUTE_READWRITE, &oldProtEndScene); memcpy(fnEndScene, jmpCode, 5); return 0; } BOOL __stdcall DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: // LPDIRECT3DDEVICE9 lpDevice; // CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(NewThread), hModule, 0, 0); CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(HookThread), hModule, 0, 0); case DLL_PROCESS_DETACH: break; } return TRUE; } P.s.: Ну и соответственно обьявление HackClass и все вызовы Log надо убрать, я морочится не стал) Хотя если интересно, могу скинуть(там не чего особенного). P.s.2: Надеюсь сейчас по правилам оформил, очень старался)) Мат из коментов поудалял Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 26 ноября, 2017 Поделиться Опубликовано 26 ноября, 2017 11 минуту назад, temtriss сказал: Надеюсь сейчас по правилам оформил, очень старался)) Мат из коментов поудалял Мат не успел заметить по этому только за BB теги. Ссылка на комментарий Поделиться на другие сайты Поделиться
mrPTyshnik Опубликовано 25 декабря, 2017 Поделиться Опубликовано 25 декабря, 2017 посмотри урок у Кенга несколько раз с практикой Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения