PDA

Просмотр полной версии : Блокировка TAB


yssimb
13.07.2024, 05:52
Я написал скрипт, который по сути должен блокировать TAB, то бишь не давать его открыть. Но чет у меня не получилось, не понял как.

C++:






#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
}
}
else
{
if
(
SF
->
getGame
(
)
->
isKeyDown
(
192
)
)
{
return
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}

moreveal
13.07.2024, 08:27
wndproc надо хукать (в сф должна быть соответствующая функция), и там уже возврат делать, в мейнлупе ты никакого влияния не получишь, тут возврат никак не предотвращает нажатие клавиши

и насчёт числа, передаваемого в isKeyDown тож не уверен

вайега52
13.07.2024, 09:17
Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции

void __thiscall CScoreboard::Enable(void)

опкод выхода.

https://forum.antichat.xyz/attachments/28518538/

C++:






auto
samp_handle
=
reinterpret_cast

(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC80
*
reinterpret_cast

(
samp_handle
+
0x6EC80
)
=
0xC3
;

moreveal
13.07.2024, 09:17
Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции

void __thiscall CScoreboard::Enable(void)

опкод выхода.

C++:






auto
samp_handle
=
reinterpret_cast

(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC81
*
reinterpret_cast

(
samp_handle
+
0x6EC81
)
=
0xC3
;





да, но вопрос по сф, и плагин назван "скриптом" и т.п., я решил не грузить

yssimb
13.07.2024, 16:43
сф, и плагин назван "скриптом" и т.п., я решил н





Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции

void __thiscall CScoreboard::Enable(void)

опкод выхода.

C++:






auto
samp_handle
=
reinterpret_cast

(
GetModuleHandle
(
"samp.dll"
)
)
)
;
// R1: 0x6AD30
// R3: 0x6EC80
*
reinterpret_cast

(
samp_handle
+
0x6EC80
)
=
0xC3
;






https://forum.antichat.xyz/attachments/28518677/

C++:






#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
}
}
else
{
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
192
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"нет))"
)
;
auto
samp_handle
=
reinterpret_cast

(
GetModuleHandle
(
"samp.dll"
)
)
;
*
reinterpret_cast

(
samp_handle
+
0x6EC80
)
=
0xC3
;
//return;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}




может я не так понял, но оно крашит, даже при открытии консоли сампфункса.

fuflexxxx
13.07.2024, 17:09
C++:






#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
}
}
else
{
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
192
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"нет))"
)
;
auto
samp_handle
=
reinterpret_cast

(
GetModuleHandle
(
"samp.dll"
)
)
;
*
reinterpret_cast

(
samp_handle
+
0x6EC80
)
=
0xC3
;
//return;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}




может я не так понял, но оно крашит, даже при открытии консоли сампфункса.


Попробуй права доступа к памяти изменить через VirtualProtect перед записью нового значения.

dertex
13.07.2024, 17:19
это конечно очень круто, но позволь поинтересовать зачем тебе блокировать таб?

yssimb
13.07.2024, 18:12
это конечно очень круто, но позволь поинтересовать зачем тебе блокировать таб?


переделываю на цеф его

up

yssimb
15.07.2024, 05:04
up

moreveal
15.07.2024, 06:26
C++:






#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
DWORD oldProtect
;
const
auto
patchAddr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x6EC86
;
// R1 - 0x6AD36
VirtualProtect
(
reinterpret_cast

(
patchAddr
)
,
2
,
PAGE_READWRITE
,
&
oldProtect
)
;
*
reinterpret_cast

(
patchAddr
)
=
0xC35E
;
VirtualProtect
(
reinterpret_cast

(
patchAddr
)
,
2
,
oldProtect
,
nullptr
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}

yssimb
15.07.2024, 07:28
C++:






#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
DWORD oldProtect
;
const
auto
patchAddr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x6EC86
;
// R1 - 0x6AD36
VirtualProtect
(
reinterpret_cast

(
patchAddr
)
,
2
,
PAGE_READWRITE
,
&
oldProtect
)
;
*
reinterpret_cast

(
patchAddr
)
=
0xC35E
;
VirtualProtect
(
reinterpret_cast

(
patchAddr
)
,
2
,
oldProtect
,
nullptr
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}





спасибо, заработало)