Просмотр полной версии : Крашит игру из-за DLL
qwertyrus
03.04.2024, 22:55
Переписать external cheat в internal для MTA оказалось труднее, чем я думал(инжект работает и не банит). Заранее извиняюсь если код выглядит плохо, только учусь. Крашит после инжекта, пробовал изменять функцию world_to_screen, крашит в if'ах(внутри функции). Помогите если не трудно
C++:
#include "pch.h"
#include
#include
#include
#include
#include
#include
std
::
vector
world_to_screen
(
std
::
vector
>
ViewMatrix1
,
float
x
,
float
y
,
float
z
)
{
std
::
vector
badcord
=
{
-
1
,
-
1
}
;
std
::
vector
result
(
2
)
;
float
screenz
=
(
z
*
ViewMatrix1
[
2
]
[
2
]
)
+
(
y
*
ViewMatrix1
[
1
]
[
2
]
)
+
(
x
*
ViewMatrix1
[
0
]
[
2
]
)
+
ViewMatrix1
[
3
]
[
2
]
;
if
(
screenz
=
screenx
&&
screenx
>=
0
&&
1080
>=
screeny
&&
screeny
>=
0
)
{
result
[
0
]
=
static_cast
(
screenx
)
;
result
[
1
]
=
static_cast
(
screeny
)
;
return
result
;
}
else
{
return
badcord
;
}
}
DWORD WINAPI
MainThread
(
HMODULE hModule
)
{
AllocConsole
(
)
;
system
(
"title First project"
)
;
FILE
*
f
;
freopen_s
(
&
f
,
"CONOUT$"
,
"w"
,
stdout
)
;
//printf("Test 1");
Sleep
(
200
)
;
DWORD offsetview
=
0xB6FA2C
;
bool
espstatus
=
false
;
DWORD
*
cped
=
(
DWORD
*
)
0xB6F5F0
;
float
*
myhealth
=
(
float
*
)
(
*
cped
+
0x540
)
;
float
*
myarmour
=
(
float
*
)
(
*
cped
+
0x548
)
;
DWORD
*
xyz
=
(
DWORD
*
)
(
*
cped
+
0x14
)
;
float
*
x
=
(
float
*
)
(
*
xyz
+
0x30
)
;
float
*
y
=
(
float
*
)
(
*
xyz
+
0x30
+
4
)
;
float
*
z
=
(
float
*
)
(
*
xyz
+
0x30
+
8
)
;
std
::
vector
>
ViewMatrix
(
4
,
std
::
vector
(
4
)
)
;
while
(
!
GetAsyncKeyState
(
VK_END
)
)
{
if
(
GetAsyncKeyState
(
VK_INSERT
)
)
{
espstatus
=
true
;
}
if
(
GetAsyncKeyState
(
VK_DELETE
)
)
{
espstatus
=
false
;
}
for
(
int
i
=
0
;
i
=
4.0f
)
{
DWORD
*
pointercoords
=
(
DWORD
*
)
(
cpedsearch
+
0x14
)
;
float
*
hisx
=
(
float
*
)
(
*
cpedsearch
+
0x30
)
;
float
*
hisy
=
(
float
*
)
(
*
cpedsearch
+
0x34
)
;
float
*
hisz
=
(
float
*
)
(
*
cpedsearch
+
0x38
)
;
std
::
vector
onscreen
=
world_to_screen
(
ViewMatrix
,
*
hisx
,
*
hisy
,
*
hisz
)
;
//далее будет рисование, но пока упустим
}
}
}
if
(
GetAsyncKeyState
(
VK_END
)
)
{
FreeConsole
(
)
;
fclose
(
f
)
;
}
FreeLibraryAndExitThread
(
hModule
,
0
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
DisableThreadLibraryCalls
(
hModule
)
;
//disables attach and detach notifications
CloseHandle
(
CreateThread
(
nullptr
,
0
,
(
LPTHREAD_START_ROUTINE
)
MainThread
,
hModule
,
0
,
nullptr
)
)
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
MTA:SA Forks Anticheat Bypass (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZS9mb3J1bS9vdG hlci1mcHMtZ2FtZXMvNjI1MDM4LW10YS1zYS1mb3Jrcy1hbnRp Y2hlYXQtYnlwYXNzLmh0bWw)
Since dutchman101 provided a protection with full anticheat for forks, i think it`s a time to fun INFO: https://wiki.multitheftauto.com/wiki/Forks_Ful...
www.unknowncheats.me
qwertyrus
04.04.2024, 01:04
MTA:SA Forks Anticheat Bypass (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZS9mb3J1bS9vdG hlci1mcHMtZ2FtZXMvNjI1MDM4LW10YS1zYS1mb3Jrcy1hbnRp Y2hlYXQtYnlwYXNzLmh0bWw)
Since dutchman101 provided a protection with full anticheat for forks, i think it`s a time to fun INFO: https://wiki.multitheftauto.com/wiki/Forks_Ful...
www.unknowncheats.me
Спасибо конечно, но как это изменит краш из за функции вычисления координат на экране?
Спасибо конечно, но как это изменит краш из за функции вычисления координат на экране?
Start by doing what I sent you, if you don't want to get a permanent ban from mta
qwertyrus
04.04.2024, 18:17
Start by doing what I sent you, if you don't want to get a permanent ban from mta
Скопировал данный код, выдает много ошибок, библиотеку minhook установил и добавил в проект.
upd ошибок осталось 4
А если убрать 76 строку (
world_to_screen
) — крашит?
qwertyrus
05.04.2024, 15:34
А если убрать 76 строку (
world_to_screen
) — крашит?
Нет. Крашит только с ней. Без нее все ок, функция написана вроде правильно, потому что external работало, а щас переписав под интернал что-то пошло не так.
C++:
for
(
int
i
=
1
;
i
=
4.0f
)
{
DWORD
*
pointercoords
=
(
DWORD
*
)
(
cpedsearch
+
0x14
)
;
float
*
hisx
=
(
float
*
)
(
*
cpedsearch
+
0x30
)
;
float
*
hisy
=
(
float
*
)
(
*
cpedsearch
+
0x34
)
;
float
*
hisz
=
(
float
*
)
(
*
cpedsearch
+
0x38
)
;
std
::
vector
onscreen
=
world_to_screen
(
ViewMatrix
,
*
hisx
,
*
hisy
,
*
hisz
)
;
}
Как минимум, ошибка заключается в том, что координаты неправильно считываются (
pointercoords
вместо
cpedsearch
).
C++:
float
*
hisx
=
(
float
*
)
(
*
pointercoords
+
0x30
)
;
float
*
hisy
=
(
float
*
)
(
*
pointercoords
+
0x34
)
;
float
*
hisz
=
(
float
*
)
(
*
pointercoords
+
0x38
)
;
И перебор игроков у тебя неверный. Вроде должно быть так:
0xB74490 - Содержит указатель на указатель. Этот указатель:
+0 = Содержит указатель на первый элемент в пуле CPed
+4 = Содержит указатель на карту байтов, которая обозначает, какие элементы используются в пуле CPed
+8 = [dword] Максимальное число элементов в пуле CPed
+12 = [dword] Текущее число элементов в пуле CPed
qwertyrus
05.04.2024, 16:31
Как минимум, ошибка заключается в том, что координаты неправильно считываются (
pointercoords
вместо
cpedsearch
).
C++:
float
*
hisx
=
(
float
*
)
(
*
pointercoords
+
0x30
)
;
float
*
hisy
=
(
float
*
)
(
*
pointercoords
+
0x34
)
;
float
*
hisz
=
(
float
*
)
(
*
pointercoords
+
0x38
)
;
И перебор игроков у тебя неверный. Вроде должно быть так:
Про поинтер, я видимо когда переписывал не заметил и не то вписал, а за перебор спасибо, проверю через некоторое время и отвечу, не можешь помочь с ошибками которые на скрине?
Скопировал данный код, выдает много ошибок, библиотеку minhook установил и добавил в проект.
upd ошибок осталось 4
В исходном файле (который тебе скинули) действительно эти функции не определены. Может, там еще какая-нибудь зависимость...
@SobFoX; (https://www.blast.hk/members/60759/) what you can say about his issue? maybe there are other dependencies because i can't see defenition of this function in code and even in minhook source.
qwertyrus
05.04.2024, 16:44
В исходном файле (который тебе скинули) действительно эти функции не определены. Может, там еще какая-нибудь зависимость...
@SobFoX; (https://www.blast.hk/members/60759/) what you can say about his issue? maybe there are other dependencies because i can't see defenition of this function in code and even in minhook source.
я нашел определение w_findStringIC в другой статье по MTA, но не нашел LogInFile, те две я тоже нашел в интернете, а вот что с этой делать... может её убрать? а вдруг что-то не сработает...
В исходном файле (который тебе скинули) действительно эти функции не определены. Может, там еще какая-нибудь зависимость...
@SobFoX; (https://www.blast.hk/members/60759/) what you can say about his issue? maybe there are other dependencies because i can't see defenition of this function in code and even in minhook source.
Нашел у автора этого обхода(по ссылке которую давал SobFox на гитхабе такую реализацию, думаю затестирую:
C++:
void
__stdcall
LogInFile
(
std
::
string log_name
,
const
char
*
log
,
.
.
.
)
{
char
hack_dir
[
600
]
;
memset
(
hack_dir
,
0
,
sizeof
(
hack_dir
)
)
;
_getcwd
(
hack_dir
,
sizeof
(
hack_dir
)
)
;
char
new_dir
[
600
]
;
memset
(
new_dir
,
0
,
sizeof
(
new_dir
)
)
;
sprintf
(
new_dir
,
"%s\\%s"
,
hack_dir
,
log_name
.
c_str
(
)
)
;
static
bool
once
=
false
;
if
(
!
once
)
{
FILE
*
hFile
=
fopen
(
new_dir
,
"rb"
)
;
if
(
hFile
)
{
fclose
(
hFile
)
;
DeleteFileA
(
new_dir
)
;
}
once
=
true
;
}
FILE
*
hFile
=
fopen
(
new_dir
,
"a+"
)
;
if
(
hFile
)
{
time_t t
=
std
::
time
(
0
)
;
tm
*
now
=
std
::
localtime
(
&
t
)
;
char
tmp_stamp
[
600
]
;
memset
(
tmp_stamp
,
0
,
sizeof
(
tmp_stamp
)
)
;
sprintf
(
tmp_stamp
,
"[%d:%d:%d]"
,
now
->
tm_hour
,
now
->
tm_min
,
now
->
tm_sec
)
;
strcat
(
tmp_stamp
,
std
::
string
(
" "
+
std
::
string
(
log
)
)
.
c_str
(
)
)
;
va_list arglist
;
va_start
(
arglist
,
log
)
;
vfprintf
(
hFile
,
tmp_stamp
,
arglist
)
;
va_end
(
arglist
)
;
fclose
(
hFile
)
;
}
}
может её убрать? а вдруг что-то не сработает...
Это просто логгирование в файл.
К обходу античита MTA это не имеет никакого отношения.
Можешь сделать заглушку:
C++:
void
LogInFile
(
char
*
,
.
.
.
)
{
return
;
}
void
LogInFile
(
const
char
*
,
.
.
.
)
{
return
;
}
qwertyrus
05.04.2024, 16:55
Это просто логгирование в файл.
К обходу античита MTA это не имеет никакого отношения.
Можешь сделать заглушку:
C++:
void
LogInFile
(
char
*
,
.
.
.
)
{
return
;
}
void
LogInFile
(
const
char
*
,
.
.
.
)
{
return
;
}
посмотри выше, я нашел фукнцию
посмотри выше, я нашел фукнцию
Вижу, можешь и ту оставить. Но тебе вряд-ли нужен лог, ты ж туда даже смотреть не будешь.
А что касаемо самого обхода — мутный он какой-то. Не допилен до конца...
qwertyrus
05.04.2024, 16:59
Вижу, можешь и ту оставить. Но тебе вряд-ли нужен лог, ты ж туда даже смотреть не будешь.
А что касаемо самого обхода — мутный он какой-то. Не допилен до конца...
Я нашел статью по самой провинции(где я и тестирую) 3 месячной давности, там почти 1 в 1 обход, но отличия есть. Вот думаю щас протестить этот наверно, потом тот
README.md (https://www.blast.hk/redirect/aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vR2VybWFuQWl6ZWsvOT I5MzMyOTA0MmM5ZjY4ZTljNjZmZWE3M2RmYWUwNTE)
GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
Вижу, можешь и ту оставить. Но тебе вряд-ли нужен лог, ты ж туда даже смотреть не будешь.
А что касаемо самого обхода — мутный он какой-то. Не допилен до конца...
всё еще крашит, видимо дело не только в том что криво определил, успевает одну координату вывести и крашит(в сампе тоже попробовал, также выводит одну и крашит)
Проверь, у тебя в функцию правильные ли координаты передаются?
You can also contact the man who created it, he is very nice and likes to help and give information
qwertyrus
05.04.2024, 17:53
Проверь, у тебя в функцию правильные ли координаты передаются?
ну да, *hisx, *hixy, *hisz, я вот думаю, что ошибка наверно в переприсваивании видовой матрицы, как сделать её структуру и указатель и сразу по адрессу обратиться(ну типо как и все остальные переменные)? А не как я переприсваивать. Может стоит передавать их по ссылке/константной ссылке?
ну да, *hisx, *hixy, *hisz
Это я вижу...
Ты выведи эти координаты в лог ну или в конце то концов MessageBox
C++:
MessageBoxA
(
GetForegroundWindow
(
)
,
"тут твои координаты, переведи числа в строку"
,
"test"
,
0
)
;
Потому что у меня подозрение, что числа там передаются странные. Ты просто глазами посмотришь на числа и скажешь, похоже ли это на координаты или нет
qwertyrus
05.04.2024, 19:48
Это я вижу...
Ты выведи эти координаты в лог ну или в конце то концов MessageBox
C++:
MessageBoxA
(
GetForegroundWindow
(
)
,
"тут твои координаты, переведи числа в строку"
,
"test"
,
0
)
;
Потому что у меня подозрение, что числа там передаются странные. Ты просто глазами посмотришь на числа и скажешь, похоже ли это на координаты или нет
Короче я нашел свою ошибку и исправил её, кое-где передавал вместо значения pointer'а адресс, короче теперь вывод координаты, но крашит сразу после первой(начинал с нулевого индекса дабы проверить на себе(выше изачально были выведены мои координаты):
https://forum.antichat.xyz/attachments/28479570/
я даже сделал кучу проверок на != nullptr, бессполезно...
C++:
DWORD
*
cpedsearch
=
(
DWORD
*
)
(
cped
+
i
*
0x7c4
)
;
if
(
cpedsearch
!=
nullptr
)
{
float
*
health
=
(
float
*
)
(
*
cpedsearch
+
0x540
)
;
if
(
health
!=
nullptr
)
{
if
(
*
health
=
4.0f
)
{
DWORD
*
pointercoords
=
(
DWORD
*
)
(
*
cpedsearch
+
0x14
)
;
if
(
pointercoords
!=
nullptr
)
{
float
*
hisx
=
(
float
*
)
(
*
pointercoords
+
0x30
)
;
float
*
hisy
=
(
float
*
)
(
*
pointercoords
+
0x34
)
;
float
*
hisz
=
(
float
*
)
(
*
pointercoords
+
0x38
)
;
if
(
hisx
!=
nullptr
&&
hisy
!=
nullptr
&&
hisz
!=
nullptr
)
{
std
::
vector
onscreen
=
world_to_screen
(
ViewMatrix
,
*
hisx
,
*
hisy
,
*
hisz
)
;
std
::
string strValue
=
std
::
to_string
(
*
hisx
)
+
" "
+
std
::
to_string
(
*
hisy
)
+
" "
+
std
::
to_string
(
*
hisy
)
+
" "
+
std
::
to_string
(
i
)
;
const
char
*
str1
=
strValue
.
c_str
(
)
;
printf
(
str1
)
;
printf
(
"\n"
)
;
Короче я нашел свою ошибку и исправил её, кое-где передавал вместо значения pointer'а адресс, короче теперь вывод координаты, но крашит сразу после первой(начинал с нулевого индекса дабы проверить на себе(выше изачально были выведены мои координаты):
я даже сделал кучу проверок на != nullptr, бессполезно...
C++:
DWORD
*
cpedsearch
=
(
DWORD
*
)
(
cped
+
i
*
0x7c4
)
;
if
(
cpedsearch
!=
nullptr
)
{
float
*
health
=
(
float
*
)
(
*
cpedsearch
+
0x540
)
;
if
(
health
!=
nullptr
)
{
if
(
*
health
=
4.0f
)
{
DWORD
*
pointercoords
=
(
DWORD
*
)
(
*
cpedsearch
+
0x14
)
;
if
(
pointercoords
!=
nullptr
)
{
float
*
hisx
=
(
float
*
)
(
*
pointercoords
+
0x30
)
;
float
*
hisy
=
(
float
*
)
(
*
pointercoords
+
0x34
)
;
float
*
hisz
=
(
float
*
)
(
*
pointercoords
+
0x38
)
;
if
(
hisx
!=
nullptr
&&
hisy
!=
nullptr
&&
hisz
!=
nullptr
)
{
std
::
vector
onscreen
=
world_to_screen
(
ViewMatrix
,
*
hisx
,
*
hisy
,
*
hisz
)
;
std
::
string strValue
=
std
::
to_string
(
*
hisx
)
+
" "
+
std
::
to_string
(
*
hisy
)
+
" "
+
std
::
to_string
(
*
hisy
)
+
" "
+
std
::
to_string
(
i
)
;
const
char
*
str1
=
strValue
.
c_str
(
)
;
printf
(
str1
)
;
printf
(
"\n"
)
;
Т. е. проблема в координатах всё таки?
qwertyrus
05.04.2024, 21:34
Т. е. проблема в координатах всё таки?
вероятнее всего я где то ошибаюсь в использовании указателя, поэтому крашит. Щас вот методом пробы запуска и крашей ищу где оно обрывается
Т. е. проблема в координатах всё таки?
Я решил проблему... Она была в том, что cpedsearch - cped+оффсет, а я брал его как поинтер еще один, в итоге попадал не на тот адрес и крашило, сейчас всё норм(последняя цифра это i(я проверял так). Осталось теперь прикрутить хук директ икса(буду рад если поможешь), а затем отрисовать линии. Хотелось бы по костям рисовать, но как я не искал, функции получения координаты кости(на голом C++) нет.
https://forum.antichat.xyz/attachments/28479608/
Осталось теперь прикрутить хук директ икса(буду рад если поможешь), а затем отрисовать линии.
Сам недавно разбирался, вот тема:
AmazingRP / d3d9 hook (https://www.blast.hk/threads/204021/)
Хочу рисовать поверх окна Амазинг РП (КРМП). Проблема в том, что оверлей Стима / Дискорда почему-то там не работает (монопольный режим мб какой-то, я хз) Я хочу сделать .dll-ку, чтобы хукнуть d3d9 EndScene Это мне вообще чё надо делать? Искать адреса что хукать? Или какой метод... Если да, то...
www.blast.hk
А вот нужный тебе код:
C++:
#include "MinHook.h"
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
(
(
LPSTR
)
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
]
;
}
HRESULT
(
__stdcall
*
IDirect3DDevice9__Present
)
(
LPDIRECT3DDEVICE9 pDevice
,
CONST RECT
*
pSrcRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindow
,
CONST RGNDATA
*
pDirtyRegion
)
;
HRESULT __stdcall
IDirect3DDevice9__Present_Hook
(
LPDIRECT3DDEVICE9 pDevice
,
CONST RECT
*
pSrcRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindow
,
CONST RGNDATA
*
pDirtyRegion
)
{
// do something...
return
IDirect3DDevice9__Present
(
pDevice
,
pSrcRect
,
pDestRect
,
hDestWindow
,
pDirtyRegion
)
;
}
HRESULT
(
__stdcall
*
IDirect3DDevice9__Reset
)
(
LPDIRECT3DDEVICE9 pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
;
HRESULT __stdcall
IDirect3DDevice9__Reset_Hook
(
LPDIRECT3DDEVICE9 pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
{
// do something...
return
IDirect3DDevice9__Reset
(
pDevice
,
pPresentationParameters
)
;
}
DWORD WINAPI
InitializeAndLoad
(
LPVOID hModule
)
{
MH_CreateHook
(
get_function_address
(
17
)
,
&
IDirect3DDevice9__Present_Hook
,
reinterpret_cast
(
&
IDirect3DDevice9__Present
)
)
;
MH_EnableHook
(
get_function_address
(
17
)
)
;
MH_CreateHook
(
get_function_address
(
16
)
,
&
IDirect3DDevice9__Reset_Hook
,
reinterpret_cast
(
&
IDirect3DDevice9__Reset
)
)
;
MH_EnableHook
(
get_function_address
(
16
)
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
{
DisableThreadLibraryCalls
(
hModule
)
;
MH_Initialize
(
)
;
CreateThread
(
0
,
0
,
&
InitializeAndLoad
,
hModule
,
0
,
0
)
;
break
;
}
case
DLL_PROCESS_DETACH
:
{
MH_DisableHook
(
get_function_address
(
17
)
)
;
MH_DisableHook
(
get_function_address
(
16
)
)
;
MH_RemoveHook
(
get_function_address
(
17
)
)
;
MH_RemoveHook
(
get_function_address
(
16
)
)
;
break
;
}
}
return
1
;
}
но как я не искал, функции получения координаты кости(на голом C++) нет.
Я думаю, что это может быть тут (https://www.blast.hk/redirect/aHR0cDovL2d0YW1vZGRpbmcucnUvd2lraS8lRDAlOTAlRDAlQj QlRDElODAlRDAlQjUlRDElODElRDAlQjBfJUQwJTlGJUQwJUIw JUQwJUJDJUQxJThGJUQxJTgyJUQwJUI4XyhTQSkjQ0JvbmVfLj I4LkQwLjlBLkQwLkJFLkQxLjgxLkQxLjgyLkQwLkI4Xy5EMS44 MS5EMC5CQS5EMC5CNS5EMC5CQi5EMC5CNS5EMS44Mi5EMC5CMC 4yOQ), но не уверен.
qwertyrus
06.04.2024, 21:51
Сам недавно разбирался, вот тема:
AmazingRP / d3d9 hook (https://www.blast.hk/threads/204021/)
Хочу рисовать поверх окна Амазинг РП (КРМП). Проблема в том, что оверлей Стима / Дискорда почему-то там не работает (монопольный режим мб какой-то, я хз) Я хочу сделать .dll-ку, чтобы хукнуть d3d9 EndScene Это мне вообще чё надо делать? Искать адреса что хукать? Или какой метод... Если да, то...
www.blast.hk
А вот нужный тебе код:
C++:
#include "MinHook.h"
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
(
(
LPSTR
)
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
]
;
}
HRESULT
(
__stdcall
*
IDirect3DDevice9__Present
)
(
LPDIRECT3DDEVICE9 pDevice
,
CONST RECT
*
pSrcRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindow
,
CONST RGNDATA
*
pDirtyRegion
)
;
HRESULT __stdcall
IDirect3DDevice9__Present_Hook
(
LPDIRECT3DDEVICE9 pDevice
,
CONST RECT
*
pSrcRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindow
,
CONST RGNDATA
*
pDirtyRegion
)
{
// do something...
return
IDirect3DDevice9__Present
(
pDevice
,
pSrcRect
,
pDestRect
,
hDestWindow
,
pDirtyRegion
)
;
}
HRESULT
(
__stdcall
*
IDirect3DDevice9__Reset
)
(
LPDIRECT3DDEVICE9 pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
;
HRESULT __stdcall
IDirect3DDevice9__Reset_Hook
(
LPDIRECT3DDEVICE9 pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
{
// do something...
return
IDirect3DDevice9__Reset
(
pDevice
,
pPresentationParameters
)
;
}
DWORD WINAPI
InitializeAndLoad
(
LPVOID hModule
)
{
MH_CreateHook
(
get_function_address
(
17
)
,
&
IDirect3DDevice9__Present_Hook
,
reinterpret_cast
(
&
IDirect3DDevice9__Present
)
)
;
MH_EnableHook
(
get_function_address
(
17
)
)
;
MH_CreateHook
(
get_function_address
(
16
)
,
&
IDirect3DDevice9__Reset_Hook
,
reinterpret_cast
(
&
IDirect3DDevice9__Reset
)
)
;
MH_EnableHook
(
get_function_address
(
16
)
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
{
DisableThreadLibraryCalls
(
hModule
)
;
MH_Initialize
(
)
;
CreateThread
(
0
,
0
,
&
InitializeAndLoad
,
hModule
,
0
,
0
)
;
break
;
}
case
DLL_PROCESS_DETACH
:
{
MH_DisableHook
(
get_function_address
(
17
)
)
;
MH_DisableHook
(
get_function_address
(
16
)
)
;
MH_RemoveHook
(
get_function_address
(
17
)
)
;
MH_RemoveHook
(
get_function_address
(
16
)
)
;
break
;
}
}
return
1
;
}
Я думаю, что это может быть тут (https://www.blast.hk/redirect/aHR0cDovL2d0YW1vZGRpbmcucnUvd2lraS8lRDAlOTAlRDAlQj QlRDElODAlRDAlQjUlRDElODElRDAlQjBfJUQwJTlGJUQwJUIw JUQwJUJDJUQxJThGJUQxJTgyJUQwJUI4XyhTQSkjQ0JvbmVfLj I4LkQwLjlBLkQwLkJFLkQxLjgxLkQxLjgyLkQwLkI4Xy5EMS44 MS5EMC5CQS5EMC5CNS5EMC5CQi5EMC5CNS5EMS44Mi5EMC5CMC 4yOQ), но не уверен.
Что я делаю не так? Все методы из инета попробовал, добавлял в папку c включениями, к исходному файлу dllmain.cpp, ничего не помогает
https://forum.antichat.xyz/attachments/28480044/
https://forum.antichat.xyz/attachments/28480044/
Что я делаю не так? Все методы из инета попробовал, добавлял в папку c включениями, к исходному файлу dllmain.cpp, ничего не помогает
Ой как я это не люблю.
Вот тут есть правильное подключение Imgui.
Гайд - Работа с рендером и Directx9 [4] (https://www.blast.hk/threads/113060/)
Создание ASI-плагина с нуля Хуки – что это такое и как с ними работать Безопасная инициализация и работа с SAMP Работа с рендером и Directx9 Обработка событий окна + ImGui В этом гайде будет рассказано про работу с рендером в Directx9 с помощью ImGui При использовании на других ресурсах...
www.blast.hk
Попробуй сделать всё как там
qwertyrus
07.04.2024, 01:20
Ой как я это не люблю.
Вот тут есть правильное подключение Imgui.
Гайд - Работа с рендером и Directx9 [4] (https://www.blast.hk/threads/113060/)
Создание ASI-плагина с нуля Хуки – что это такое и как с ними работать Безопасная инициализация и работа с SAMP Работа с рендером и Directx9 Обработка событий окна + ImGui В этом гайде будет рассказано про работу с рендером в Directx9 с помощью ImGui При использовании на других ресурсах...
www.blast.hk
Попробуй сделать всё как там
не помогло, стало только хуже
https://forum.antichat.xyz/attachments/28480130/
не помогло, стало только хуже
https://forum.antichat.xyz/attachments/28480130/
создал новый, чистый проект, скомпилировало, но крашит при разворачивании игры сразу(инжект, разворачиваю - бамс и краш)...
qwertyrus
09.04.2024, 09:49
тему можно закрывать, всё работает
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot