
16.07.2023, 16:21
|
|
Постоянный
Регистрация: 16.08.2020
Сообщений: 553
С нами:
3022568
Репутация:
68
|
|
C++:
[CODE]
#include
#include
#include
static
HMODULE
(
WINAPI
*
TrueLoadLibrary
)
(
LPCWSTR lpLibFileName
)
=
LoadLibraryW
;
HMODULE WINAPI
DetouredLoadLibrary
(
LPCWSTR lpLibFileName
)
{
HMODULE res
=
TrueLoadLibrary
(
lpLibFileName
)
;
MessageBoxW
(
NULL
,
lpLibFileName
,
L
"Detoured!"
,
MB_OK
|
MB_ICONEXCLAMATION
)
;
return
res
;
}
void
SetGlobalHook
(
)
{
// Получение адреса оригинальной функции LoadLibraryW из kernel32.dll
TrueLoadLibrary
=
reinterpret_cast
(
GetProcAddress
(
GetModuleHandle
(
TEXT
(
"kernel32.dll"
)
)
,
"LoadLibraryW"
)
)
;
// Установка хука
DetourTransactionBegin
(
)
;
DetourUpdateThread
(
GetCurrentThread
(
)
)
;
DetourAttach
(
&
(
PVOID
&
)
TrueLoadLibrary
,
DetouredLoadLibrary
)
;
DetourTransactionCommit
(
)
;
}
// Функция для удаления глобального хука
void
RemoveGlobalHook
(
)
{
// Удаление хука
DetourTransactionBegin
(
)
;
DetourUpdateThread
(
GetCurrentThread
(
)
)
;
DetourDetach
(
&
(
PVOID
&
)
TrueLoadLibrary
,
DetouredLoadLibrary
)
;
DetourTransactionCommit
(
)
;
}
int
main
(
)
{
// Установка глобального хука
SetGlobalHook
(
)
;
// Ждем нажатия клавиши перед удалением хука
std
::
cout
не работает глобально, что не так? есть такая же версия только в формате длл и без
C++:
Код:
TrueLoadLibrary
=
reinterpret_cast
(
GetProcAddress
(
GetModuleHandle
(
TEXT
(
"kernel32.dll"
)
)
,
"LoadLibraryW"
)
)
;
и все работает
|
|
|