Перейти к содержанию

Обнаружение устройства DirectX для рисования внутри игры


Рекомендуемые сообщения

Просто переписываю статью с некоторыми правками, так как на данный момент она не рабочая, да и там черт ногу сломит.

Сие действие будет проводить на Counter-Strike: Source, выбор игры не важен.

 

Запускаем x64dbg, открываем файл hl2.exe, для корректного запуска стимовской версии необходимо указать аргументы командной строки:

 

 -steam -game cstrike -console -insecure

 

Нажимаем F9, после прогрузки модуля d3d9.dll ставим бряки на:

  • Direct3DCreate9, если игра инициализирует устройство в текущем модуле
  • Direct3DCreate9Ex, если игра инициализирует устройство во внешнем модуле.

 

После установки бряка перезапускаем игру, как только срабатывает бряк выходим из функции и видим откуда она вызывалась.

 

*Немного комментов для лучшего восприятия* 

 

image.thumb.png.ef5952b4112ac4451fd03a461073fd7d.png

 

Теперь нам необходимо вызвать функцию CreateDevice по её индексу, для этого модифицируем:

 

CALL DWORD PTR DS:[EAX+0x8]                                                     

на

 

CALL DWORD PTR DS:[EAX+0x40]

Либо считаем руками.(Нет)

 

После вызова [EAX+0x40] попадаем в тело функции, ставим на него бряк и перезапускаем игру.

Как только сработает бряк, надо будет расширить количество аргументов до 7 в настройках соглашения о вызовах, так как нам нужен 7-й аргумент в прототипе функции CreateDeviceEx, а именно ppReturnedDeviceInterface:

 

HRESULT CreateDeviceEx(
  UINT                  Adapter,
  D3DDEVTYPE            DeviceType,
  HWND                  hFocusWindow,
  DWORD                 BehaviorFlags,
  D3DPRESENT_PARAMETERS *pPresentationParameters,
  D3DDISPLAYMODEEX      *pFullscreenDisplayMode,
  IDirect3DDevice9Ex    **ppReturnedDeviceInterface
);

 

image.png.472171e3dc04011c72ecb39baac0365a.png

 

Хоба.

 

image.png.e0ad0eebc64c5503f788dfaa8dec561e.png

 

 

Вот мы и нашли указатель на указатель на устройство с помощью которого можно рисовать внутри игры и которым рисует игра.

  • Понравилось 1
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...
33 минуты назад, reston сказал:

А почему именно делаешь смещение на 0x40, а не условно 0x32

 

0x40 смещение на функцию CreateDevice, в принципе подойдет любая функция принимающая в себя указатель на указатель на устройство(ppReturnedDeviceInterface)

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, partoftheworlD сказал:

 

0x40 смещение на функцию CreateDevice, в принципе подойдет любая функция принимающая в себя указатель на указатель на устройство(ppReturnedDeviceInterface)

Хм, хорошо, а можно пример использования, того что мы нашли

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.