Подключение Direct X Endscene в игре Direct X 11

Мне нужно прочитать память в игре и сделать инъекцию. Однако, чтобы избежать состояния гонки, мне нужно вставить свой ASM-код в финальную сцену.

Раньше я использовал этот код:

uint D3D9_Device;
D3D9_Device = Memory.Read<uint>(Memory.BaseAddress + Direct3D9__Device);
D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetA);
D3D9_Device = Memory.Read<uint>(D3D9_Device);
D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetB);

Чтобы получить доступ к устройству Dx9 и найти финальную сцену, используя обратные смещения.

Однако в Windows 7 DirectX 11 принудительно, что означает, что это чтение не выполняется и дает нулевой объект.

Есть идеи, как я могу подцепить финальную сцену игры, когда используется DirectX 11?


person Jason    schedule 02.12.2010    source источник


Ответы (1)


Вы должны подключать IAT GetProcAddress и вызывать D3DCreate, захватывать указатель устройства и подключать VFTable оттуда. не знаю, как вы «изменили» смещения COM vftable (они предопределены тем, как создаются библиотеки COM, вам нужно только подсчитать виртуальные методы, определенные в заголовках DX SDK, начать с 0, затем умножить на sizeof(INT_PTR), чтобы получить смещение), но то, как вы их читаете, тоже выглядит неправильно (у вас слишком много косвенных указаний).

Попробуйте взглянуть на что-то вроде MSDetours, у него есть пример на COM зацепление объекта. вы также можете прочитать этот вопрос

person Necrolis    schedule 02.12.2010