PDA

Просмотр полной версии : C++ || Как работает обход OBS Bandicam и т.п


ANZR
08.07.2022, 04:45
В чем разница в хуке девайса. Почему в одном случае OBS видит отрисовку, а в другом нет

Как вообще работает обход этих программ

F0RQU1N and
08.07.2022, 10:16
ну вроде как обс из презента игры берет картинку, можно вместо презента рисовать в эндсцене например

ANZR
08.07.2022, 11:05
ну вроде как обс из презента игры берет картинку, можно вместо презента рисовать в эндсцене например


Как это сделать .-.



ну вроде как обс из презента игры берет картинку, можно вместо презента рисовать в эндсцене например


У меня забавная ситуация выходит

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

UPD Меню отображается если OBS был запущен перед запуском самой игры

F0RQU1N and
08.07.2022, 13:58
У меня забавная ситуация выходит
Порой OBS захватывает что я рисую, а порой нет. Приходится игру перезапускать, если менюшка отоброзилась
UPD Меню отображается если OBS был запущен перед запуском самой игры


ну хукни эндсцену, либо презент обса

sizeoftrickster
09.07.2022, 21:06
Как это сделать .-.


Хук Present'a

Present -> 17 VTable

Reset -> 16 VTable

Нажимай на ссылку "исходника", тебе перекинет на Github или Gitlab с указанной функцией

1. Искать по паттерну -> "C7 06 ?? ?? ?? ?? 89 86 ?? ?? ?? ?? 89 86"

1.1 Из гайда Работа с рендером и Directx9 [4] (https://www.blast.hk/threads/113060/) bykin4stat (https://www.blast.hk/members/161331/)

C++:






std
::
uintptr_t
find_device
(
std
::
uint32_t
Len
)
{
static
std
::
uintptr_t base
=
[
]
(
std
::
size_t Len
)
{
std
::
string
path_to
(
MAX_PATH
,
'\0'
)
;
if
(
auto
size
=
GetSystemDirectoryA
(
path_to
.
data
(
)
,
MAX_PATH
)
)
{
path_to
.
resize
(
size
)
;
path_to
+=
"\\d3d9.dll"
;
std
::
uintptr_t dwObjBase
=
reinterpret_cast

(
LoadLibraryA
(
path_to
.
c_str
(
)
)
)
;
while
(
dwObjBase
++

(
dwObjBase
+
0x00
)
==
0x06C7
&&
*
reinterpret_cast

(
dwObjBase
+
0x06
)
==
0x8689
&&
*
reinterpret_cast

(
dwObjBase
+
0x0C
)
==
0x8689
)
{
dwObjBase
+=
2
;
break
;
}
}
return
dwObjBase
;
}
return
std
::
uintptr_t
(
0
)
;
}
(
Len
)
;
return
base
;
}
void
*
get_function_address
(
int
VTableIndex
)
{
return
(
*
reinterpret_cast

(
find_device
(
0x128000
)
)
)
[
VTableIndex
]
;
}




1.2 Из исходника (https://www.blast.hk/redirect/aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va2luNHN0YXQvOTNmMT dhNDBlNWUxMTMwOGFhNzMzZjM3NTBiODRhYWIjZmlsZS1tYWlu LWNwcC1MNjY) Alpha Chat (https://www.blast.hk/threads/76448/) bykin4stat (https://www.blast.hk/members/161331/)

C++:






DWORD
FindDevice
(
DWORD Len
)
{
DWORD dwObjBase
=
0
;
char
infoBuf
[
MAX_PATH
]
;
GetSystemDirectoryA
(
infoBuf
,
MAX_PATH
)
;
strcat_s
(
infoBuf
,
MAX_PATH
,
"\\d3d9.dll"
)
;
dwObjBase
=
(
DWORD
)
LoadLibraryA
(
infoBuf
)
;
while
(
dwObjBase
++

(
VTable
[
VTableIndex
]
)
;
}
;




2. По гташному адресу

2.1 Из исходника (https://www.blast.hk/redirect/aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va2luNHN0YXQvOTNmMT dhNDBlNWUxMTMwOGFhNzMzZjM3NTBiODRhYWIjZmlsZS1tYWlu LWNwcC1MOTk) Alpha Chat (https://www.blast.hk/threads/76448/) bykin4stat (https://www.blast.hk/members/161331/)

C++:






DWORD pDevice
=
*
reinterpret_cast

(
0xC97C28
)
;
void
*
*
vTable
=
*
reinterpret_cast

(
pDevice
)
;




2.2 Из исходника (https://gitlab.com/samp-plugins/ultrawh/-/blob/main/src/dx9.cpp#L48) ultra wallhack (https://www.blast.hk/threads/130055/) bysc6ut (https://www.blast.hk/members/406860/)