KIllerrr Опубликовано 13 апреля, 2016 Поделиться Опубликовано 13 апреля, 2016 Привет всем. Многие знают, что я люблю D3D. Так вот сталкнулся с такой проблемой: Я использовал всегда хук Coder а, потому как он подходит как и к Win 7 так и Win10. Но теперь появилась проблема, разрабы пофиксили этот способ, и теперь при использовании данного хука аккаунт банят. Я нашел хук каторый работает методом перебора. Но ОН почему то не работает на Win8 и Win10. Подскажите как мне сделать нормальный хук? Ах да чуть не забыл, хук выполняет работу нахождения адреса устройства отображения, тем самым потом мы можем туда посылать свои запросы на рисовку. Вот хук каторый работает везде, но за него банят: Скрытый текст HRESULT APIENTRY myEndScene(LPDIRECT3DDEVICE9 pDevice) { BYTE* CDES = (BYTE*)pEndScene; CDES[0] = CodeFragmentES[0]; *((DWORD*)(CDES + 1)) = *((DWORD*)(CodeFragmentES + 1)); gDevice = pDevice;// Определяем адрес устройства, и делаем его видемым для всех Start();//Запускаем поток рисовки и других функций взлома. DWORD res = pEndScene(pDevice); CDES[0] = jmpbES[0]; *((DWORD*)(CDES + 1)) = *((DWORD*)(jmpbES + 1)); return res; } void GetDevice9Methods() { HWND hWnd = CreateWindowA("STATIC", "dummy", 0, 0, 0, 0, 0, 0, 0, 0, 0); HMODULE hD3D9 = LoadLibrary("d3d9"); DIRECT3DCREATE9 Direct3DCreate9 = (DIRECT3DCREATE9)GetProcAddress(hD3D9, "Direct3DCreate9"); IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION); D3DDISPLAYMODE d3ddm; d3d->GetAdapterDisplayMode(0, &d3ddm); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = 1; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format; IDirect3DDevice9* d3dDevice = 0; d3d->CreateDevice(0, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3dDevice); DWORD* vtablePtr = (DWORD*)(*((DWORD*)d3dDevice)); endscene = vtablePtr[42] - (DWORD)hD3D9; reset = vtablePtr[16] - (DWORD)hD3D9; d3dDevice->Release(); d3d->Release(); FreeLibrary(hD3D9); CloseHandle(hWnd); } void HookDevice9Methods() { HMODULE hD3D9 = GetModuleHandle("d3d9.dll"); /////////////////////////////////////////////////////////// pEndScene = (oEndScene)((DWORD)hD3D9 + endscene); jmpbES[0] = 0xE9; DWORD addr = (DWORD)myEndScene - (DWORD)pEndScene - 5; memcpy(jmpbES + 1, &addr, sizeof(DWORD)); memcpy(CodeFragmentES, pEndScene, 5); VirtualProtect(pEndScene, 8, PAGE_EXECUTE_READWRITE, &oldprotectES); memcpy(pEndScene, jmpbES, 5); //////////////////////////////////////////////////////////// } HRESULT APIENTRY Hook() { GetDevice9Methods(); HookDevice9Methods(); return 0; } Вот хук каторый не работает на 8 и 10, но за него я так понял не бананят: Скрытый текст PDWORD FindDeviceInterfaceObject(HMODULE hD3D9) { PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)hD3D9; if (dosHeader->e_magic == IMAGE_DOS_SIGNATURE) { PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS)((DWORD)dosHeader + dosHeader->e_lfanew); if (ntHeaders->Signature == IMAGE_NT_SIGNATURE) { DWORD NumberOfSections = ntHeaders->FileHeader.NumberOfSections; PIMAGE_SECTION_HEADER SectionHeader = (PIMAGE_SECTION_HEADER)((DWORD)dosHeader + dosHeader->e_lfanew + sizeof(IMAGE_NT_HEADERS)); for (unsigned int i = 0; i < NumberOfSections; i++) if (strncmp((const char *)SectionHeader[i].Name, ".text", 5) == 0) { DWORD dwFrom = (DWORD)dosHeader + SectionHeader[i].VirtualAddress; DWORD dwTo = dwFrom + SectionHeader[i].Misc.VirtualSize; //C7 06 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 89 86 for (unsigned int i = dwFrom; i < dwTo; i++) { if (*(WORD*)(i) == 0x06C7) if (*(WORD*)(i + 2 + 4) == 0x8689) if (*(WORD*)(i + 2 + 4 + 2 + 4) == 0x8689) return *(PDWORD*)(i + 2); } } } } return NULL; } int HookpDevice(void) { PDWORD pdwDeviceInterfaceObject = FindDeviceInterfaceObject(LoadLibraryA("D3D9.dll")); if (pdwDeviceInterfaceObject != NULL) { pEndScene = (oEndScene)Memory->DetourCreate((PBYTE)pdwDeviceInterfaceObject[42], (PBYTE)myEndScene, 5); } return 0; } Предлагайте свои варианты. Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 13 апреля, 2016 Поделиться Опубликовано 13 апреля, 2016 KIllerrr, а хук с помощью SetWindowsHookEx_? Ссылка http://purebasic.info/phpBB3ex/viewtopic.php?p=51765#p51765 язык PureBasic. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 14 апреля, 2016 Поделиться Опубликовано 14 апреля, 2016 SetWindowHookEx палят сразу же античиты. Если делать беспалевный чит - это нужен инжектор с затиранием следов инжекта. У Кодера есть такой урок, где он делал инжектор такой. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 14 апреля, 2016 Поделиться Опубликовано 14 апреля, 2016 разве не правильней сначала выяснить как именно он детектит а потом придумать макс сложности облом для античита? 2 вариант. ну и чем оно отличается от GetModuleHandle+поиск паттрена... сомнительно. кст а если хук ендсцене поставить в коде игры (перед переходом в d3d9)? или там проверка на патчкод? Ссылка на комментарий Поделиться на другие сайты Поделиться
KIllerrr Опубликовано 14 апреля, 2016 Автор Поделиться Опубликовано 14 апреля, 2016 9 часов назад, gmz сказал: разве не правильней сначала выяснить как именно он детектит а потом придумать макс сложности облом для античита? 2 вариант. ну и чем оно отличается от GetModuleHandle+поиск паттрена... сомнительно. кст а если хук ендсцене поставить в коде игры (перед переходом в d3d9)? или там проверка на патчкод? Я так понимаю, можно использовать рендер игры ? Ссылка на комментарий Поделиться на другие сайты Поделиться
KIllerrr Опубликовано 14 апреля, 2016 Автор Поделиться Опубликовано 14 апреля, 2016 13 часа назад, Xipho сказал: SetWindowHookEx палят сразу же античиты. Если делать беспалевный чит - это нужен инжектор с затиранием следов инжекта. У Кодера есть такой урок, где он делал инжектор такой. Урок это просто тема?Или у него в ютубе есть ? Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 14 апреля, 2016 Поделиться Опубликовано 14 апреля, 2016 (изменено) 15 час назад, KIllerrr сказал: Я так понимаю, можно использовать рендер игры ? просто хук не в d3d9.dll а перед вызовом, на игровом коде. ... MOV DWORD PTR [0CFBD10],EAX MOV EAX,DWORD PTR [0D064A8] << hook +device MOV ECX,DWORD PTR [EAX] MOV EDX,DWORD PTR [ECX+44] PUSH EBX PUSH EBX PUSH EAX CALL EDX << EndScene ... Изменено 15 апреля, 2016 пользователем gmz Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения