EFI_COMPROMISED_DATA
-
Автор темы
- #1
Так как valve добавили '-vulkan' параметр для игр на source engine, я решил копнуть в него и обновить рендерер для своей портал 2 базы.
С самого начала я нашел модуль vulkan-1.dll, в нем есть много экспортов, но ни один из них не вызывается.
Затем я обнаружил чудесный модуль 'dxvk_d3d9.dll'
Валв все еще делают какой-то непонятный трешак вместо адекватных решений. Этот рендерер является билдом https://github.com/doitsujin/dxvk.
То бишь этот 'vulkan rendering' это враппер над dx9, который будет рендерить dx9 данные используя vulkan.
Все что нам нужно, так это найтив этом модуле Present, хукнуть его и рисовать используя dx9, в примерах ниже я буду использовать imgui.
Функция которую мы ищем это этот Present
В теле этой функции имеется вызов RecreateSwapChain, в котором есть одна строка, изи пизи, ищем эту строку в иде и смотрим единственый xref.
Затем мы видим несколько xref'ов на функцию, которую мы нашли
Сравнивая декомпилированный код и код функци(й) на гитхабе мы легко находим наш презент, текущая сига до него - "E8 ? ? ? ? 83 EC 18 83 C4 2C C2 14 00".rel<uint32_t>( 1 )
Затем я нашел оффсет до 'm_parent'(dx9 device) в этом dxvk девайсе.
Теперь все что нам требуется это хукнуть данную функцию и рисовать все там.
Bonus: сигнатура d3d device все еще работает в новом shaderapivk, то есть вместо записи idxvk_device в глобальную переменную из present хука вы можете получить д3д девайс тута: "89 1D ? ? ? ? E8 ? ? ? ? 8B 55".offset( 2 ).self_get( 2 )
Full pasta доступна в моей portal2 базе (vulkan branch): https://github.com/es3n1n/portal2-internal/tree/vulkan
С самого начала я нашел модуль vulkan-1.dll, в нем есть много экспортов, но ни один из них не вызывается.
Затем я обнаружил чудесный модуль 'dxvk_d3d9.dll'
Валв все еще делают какой-то непонятный трешак вместо адекватных решений. Этот рендерер является билдом https://github.com/doitsujin/dxvk.
То бишь этот 'vulkan rendering' это враппер над dx9, который будет рендерить dx9 данные используя vulkan.
Все что нам нужно, так это найтив этом модуле Present, хукнуть его и рисовать используя dx9, в примерах ниже я буду использовать imgui.
Функция которую мы ищем это этот Present
В теле этой функции имеется вызов RecreateSwapChain, в котором есть одна строка, изи пизи, ищем эту строку в иде и смотрим единственый xref.
Затем мы видим несколько xref'ов на функцию, которую мы нашли
Сравнивая декомпилированный код и код функци(й) на гитхабе мы легко находим наш презент, текущая сига до него - "E8 ? ? ? ? 83 EC 18 83 C4 2C C2 14 00".rel<uint32_t>( 1 )
Затем я нашел оффсет до 'm_parent'(dx9 device) в этом dxvk девайсе.
Теперь все что нам требуется это хукнуть данную функцию и рисовать все там.
Bonus: сигнатура d3d device все еще работает в новом shaderapivk, то есть вместо записи idxvk_device в глобальную переменную из present хука вы можете получить д3д девайс тута: "89 1D ? ? ? ? E8 ? ? ? ? 8B 55".offset( 2 ).self_get( 2 )
Full pasta доступна в моей portal2 базе (vulkan branch): https://github.com/es3n1n/portal2-internal/tree/vulkan