User32 Опубликовано 24 мая, 2018 Поделиться Опубликовано 24 мая, 2018 Здравствуйте. Собственно вопрос в названии темы. Можно ли с помощью WinAPI узнать версию библиотеки DirectX используемой игрой? Ссылка на комментарий Поделиться на другие сайты Поделиться
temtriss Опубликовано 24 мая, 2018 Поделиться Опубликовано 24 мая, 2018 1 час назад, User32 сказал: помощью WinAPI Не чего умного в голову не приходит)) Но теоретически... Да можно, по имени загруженой библиотеки Через EnumProcessModules возможно есть другие более легкие пути, но т.к. я великий изобретатель велосипедов с квадратными колесами, более толкового варианта не знаю) Ссылка на комментарий Поделиться на другие сайты Поделиться
User32 Опубликовано 24 мая, 2018 Автор Поделиться Опубликовано 24 мая, 2018 1 час назад, temtriss сказал: Через EnumProcessModules Спасибо, попробую. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 24 мая, 2018 Поделиться Опубликовано 24 мая, 2018 речь идет про direct3d? а то в directx еще другие вещи входят) в одной игре может использоваться более 1 библиотеки d3d, хотя такое не часто конечно в сталкере последнем вроде было d3d8 d3d9 d3d10 d3d11) можно попробовать проверить через GetModuleHandle последовательно библиотеки d3d Ссылка на комментарий Поделиться на другие сайты Поделиться
JustHack Опубликовано 24 мая, 2018 Поделиться Опубликовано 24 мая, 2018 (изменено) [censored] Изменено 11 апреля, 2020 пользователем JustHack Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 24 мая, 2018 Поделиться Опубликовано 24 мая, 2018 DirectXSetupGetVersion() из dsetup.h Ссылка на комментарий Поделиться на другие сайты Поделиться
User32 Опубликовано 25 мая, 2018 Автор Поделиться Опубликовано 25 мая, 2018 (изменено) В 24.05.2018 в 22:49, X86Jumps сказал: речь идет про direct3d? а то в directx еще другие вещи входят) в одной игре может использоваться более 1 библиотеки d3d, хотя такое не часто конечно в сталкере последнем вроде было d3d8 d3d9 d3d10 d3d11) можно попробовать проверить через GetModuleHandle последовательно библиотеки d3d Хм... тогда другой вопрос. Как найти функцию рендеринга, не зная какая библиотека для этого используется? 23 часа назад, JustHack сказал: Можно через хук узнать. Перехватить вызов импортируемой функции инициализации девайса. Можно поподробнее. Во всех примерах перехватов DirectX функций которые я нашел, библиотека была известна заранее. Изменено 25 мая, 2018 пользователем User32 Ссылка на комментарий Поделиться на другие сайты Поделиться
User32 Опубликовано 25 мая, 2018 Автор Поделиться Опубликовано 25 мая, 2018 21 час назад, partoftheworlD сказал: DirectXSetupGetVersion() из dsetup.h "Retrieves the version number of the Microsoft DirectX components that are currently installed." Это не совсем то что мне нужно. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 26 мая, 2018 Поделиться Опубликовано 26 мая, 2018 (изменено) вариантов не много просто тупо запустить игру и через cheat engine посмотреть dissect code, посмотреть что используется D3D11CreateDevice или Direct3DCreate9 можно и без dissect, просто в search code написать одну из этих функций или goto перейти на нее и поставить breakpoint вариант когда через GetModuleHandle тоже подходит, d3d9.dll,d3d11.dll, если один из вариантов возвратит не ноль, значит то и используется Изменено 26 мая, 2018 пользователем X86Jumps Ссылка на комментарий Поделиться на другие сайты Поделиться
mrPTyshnik Опубликовано 26 мая, 2018 Поделиться Опубликовано 26 мая, 2018 Если из главного потока приложения, которое уже инициализировало директ вызывать еще один раз CreateDevice с верными параметрами, то тебе все равно вернется INVALID_CALL Инжект в игру, в точке входа либы - CreateDevice так и определять Ссылка на комментарий Поделиться на другие сайты Поделиться
User32 Опубликовано 26 мая, 2018 Автор Поделиться Опубликовано 26 мая, 2018 Всем спасибо. Остановился на варианте через GetModuleHandle, но игра теоретически может подгружать одновременно не одну библиотеку и тогда это работать не будет. 7 часов назад, X86Jumps сказал: просто тупо запустить игру и через cheat engine посмотреть dissect code, посмотреть что используется D3D11CreateDevice или Direct3DCreate9 можно и без dissect, просто в search code написать одну из этих функций или goto перейти на нее и поставить breakpoint Если на игру повесили протектор это не подойдет. Также можно и в Ольге посмотреть в меню "intermodular calls". Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 мая, 2018 Поделиться Опубликовано 26 мая, 2018 24 минуты назад, User32 сказал: Если на игру повесили протектор это не подойдет На этот случай можно вешать хук на GetProcAddress и записывать все что игра подгружает, даже если стоит протектор, пакер и виртуалка в добавок. А по твоей теме, тебе нужно получать это https://msdn.microsoft.com/en-us/library/windows/desktop/ff476876(v=vs.85).aspx D3D_FEATURE_LEVEL – параметр, указывающий, какую версию DirectX поддерживает наша видеокарта, который в последствии используется для создания устройства. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 26 мая, 2018 Поделиться Опубликовано 26 мая, 2018 так надо конкретно какую то игру определить или как типа injector чтоб определил и делал потом hook для разных интерфейсов? если второе, то вариант с getmodulehandle в библиотеке не самый плохой просто без конкретики как то не очень ясно что нужно)) например в cheat engine хук d3d делает так: он грузит последовательно d3d11 d3d10 d3d9 библиотеки и создает интерфейсы на болванке созданного окна т.к. это в виде dll он уже в памяти процесса игры висит и поэтому вернет в любом случае существующий указатель а какие не были, получается создаст лишний раз (loadlibrary используется) тогда как getmodulehandle только вернет handle на существующий модуль. Конечно в игре может быть сразу 2 3 рендерера как в каком-нибудь STALKER но это не часто, или как в ue4 где несколько вариантов рендерера (rhi), но он только 1 раз создается, т.е. как в сталкер не меняется рендерер partoftheworlD ну видеокарта может и d3d12 поддерживать)) а игра tomb raider II будет использовать DirectDevice7)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения