Начинающий
- Статус
- Оффлайн
- Регистрация
- 19 Окт 2025
- Сообщения
- 92
- Реакции
- 4
Народ, кто пытался хукать `IDXGISwapChain::Present` под CS2, нужна помощь.
Делаю свой первый internal под cs2 и, полистав гайды/треды, пришёл к выводу, что самый удобный вариант — хукать `IDXGISwapChain::Present`, чтобы и рисовать, и выполнять чит-логику в одном месте. Проблема в том, что я вообще не понимаю, с какой стороны к этому подступиться.
С хуками в целом знаком: делал detours, trampolines, в AssaultCube уже хуками цеплялся к `wglSwapBuffers` и гонял там отрисовку/функции чита — там всё было достаточно понятно. Но с DXGI / D3D11 всё оказалось сильно сложнее.
Что уже нагуглил и где застрял:
Говорят, что нужно получить конкретный инстанс `IDXGISwapChain`, а потом через vtable этого объекта вытащить адрес метода `Present` и уже его хукать. На практике я вообще не понимаю, как корректно достать этот самый swapchain из игры.
Через IDA нашёл `IDXGISwapChain` в `rendersystemdx11.dll` с помощью Class Informer, но дальше завис — я не до конца понимаю, что именно там смотреть и как это использовать. В интернете многие пишут, что `Present` у swapchain сидит где-то в районе 8-го индекса в vtable, но в том, что я вижу в IDA, отображается всего три функции в таблице, и где там реальный `Present`, я не понимаю.
Отдельный момент: я почти ничего не знаю про Direct3D, так что любые советы по D3D11/DXGI тоже приветствуются.
Если у кого-то есть:
- рабочий подход к тому, как:
- получить экземпляр `IDXGISwapChain` именно из CS2;
- корректно выйти на его vtable и индекс `Present` (какой он там реально сейчас?);
- пример кода или годный ресурс, где этот процесс расписан по шагам;
- или просто направление, куда копать (dxgi, d3d11, x64dbg + символы, и т.п.),
буду очень благодарен за подсказки и любые наводки.
Делаю свой первый internal под cs2 и, полистав гайды/треды, пришёл к выводу, что самый удобный вариант — хукать `IDXGISwapChain::Present`, чтобы и рисовать, и выполнять чит-логику в одном месте. Проблема в том, что я вообще не понимаю, с какой стороны к этому подступиться.
С хуками в целом знаком: делал detours, trampolines, в AssaultCube уже хуками цеплялся к `wglSwapBuffers` и гонял там отрисовку/функции чита — там всё было достаточно понятно. Но с DXGI / D3D11 всё оказалось сильно сложнее.
Что уже нагуглил и где застрял:
Говорят, что нужно получить конкретный инстанс `IDXGISwapChain`, а потом через vtable этого объекта вытащить адрес метода `Present` и уже его хукать. На практике я вообще не понимаю, как корректно достать этот самый swapchain из игры.
Через IDA нашёл `IDXGISwapChain` в `rendersystemdx11.dll` с помощью Class Informer, но дальше завис — я не до конца понимаю, что именно там смотреть и как это использовать. В интернете многие пишут, что `Present` у swapchain сидит где-то в районе 8-го индекса в vtable, но в том, что я вижу в IDA, отображается всего три функции в таблице, и где там реальный `Present`, я не понимаю.
Отдельный момент: я почти ничего не знаю про Direct3D, так что любые советы по D3D11/DXGI тоже приветствуются.
Если у кого-то есть:
- рабочий подход к тому, как:
- получить экземпляр `IDXGISwapChain` именно из CS2;
- корректно выйти на его vtable и индекс `Present` (какой он там реально сейчас?);
- пример кода или годный ресурс, где этот процесс расписан по шагам;
- или просто направление, куда копать (dxgi, d3d11, x64dbg + символы, и т.п.),
буду очень благодарен за подсказки и любые наводки.
