HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.07.2024, 05:52
yssimb
Новичок
Регистрация: 08.03.2016
Сообщений: 13
С нами: 5358262

Репутация: 213
По умолчанию

Я написал скрипт, который по сути должен блокировать 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
;
}
 
Ответить с цитированием

  #2  
Старый 13.07.2024, 08:27
moreveal
Постоянный
Регистрация: 01.08.2020
Сообщений: 988
С нами: 3043831

Репутация: 163


По умолчанию

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

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

  #3  
Старый 13.07.2024, 09:17
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
Код:
void __thiscall CScoreboard::Enable(void)
опкод выхода.



C++:





Код:
auto
samp_handle
=
reinterpret_cast

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

(
samp_handle
+
0x6EC80
)
=
0xC3
;
 
Ответить с цитированием

  #4  
Старый 13.07.2024, 09:17
moreveal
Постоянный
Регистрация: 01.08.2020
Сообщений: 988
С нами: 3043831

Репутация: 163


По умолчанию

Цитата:
Сообщение от whyega  

Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
Код:
void __thiscall CScoreboard::Enable(void)
опкод выхода.

C++:





Код:
auto
samp_handle
=
reinterpret_cast

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

(
samp_handle
+
0x6EC81
)
=
0xC3
;

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

  #5  
Старый 13.07.2024, 16:43
yssimb
Новичок
Регистрация: 08.03.2016
Сообщений: 13
С нами: 5358262

Репутация: 213
По умолчанию

Цитата:
Сообщение от moreveal  

сф, и плагин назван "скриптом" и т.п., я решил н
Цитата:
Сообщение от whyega  

Можно обойтись без прямого хука вндпрока, как вариант, записать в начало функции
Код:
void __thiscall CScoreboard::Enable(void)
опкод выхода.

C++:





Код:
auto
samp_handle
=
reinterpret_cast

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

(
samp_handle
+
0x6EC80
)
=
0xC3
;



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
;
}


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

  #6  
Старый 13.07.2024, 17:09
fuflexxxx
Познающий
Регистрация: 10.06.2020
Сообщений: 37
С нами: 3119285

Репутация: 63
По умолчанию

Цитата:
Сообщение от yssimb  

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 перед записью нового значения.
 
Ответить с цитированием

  #7  
Старый 13.07.2024, 17:19
dertex
Новичок
Регистрация: 19.06.2024
Сообщений: 4
С нами: 1002029

Репутация: 3
По умолчанию

это конечно очень круто, но позволь поинтересовать зачем тебе блокировать таб?
 
Ответить с цитированием

  #8  
Старый 13.07.2024, 18:12
yssimb
Новичок
Регистрация: 08.03.2016
Сообщений: 13
С нами: 5358262

Репутация: 213
По умолчанию

Цитата:
Сообщение от dertex  

это конечно очень круто, но позволь поинтересовать зачем тебе блокировать таб?
переделываю на цеф его

up
 
Ответить с цитированием

  #9  
Старый 15.07.2024, 05:04
yssimb
Новичок
Регистрация: 08.03.2016
Сообщений: 13
С нами: 5358262

Репутация: 213
По умолчанию

up
 
Ответить с цитированием

  #10  
Старый 15.07.2024, 06:26
moreveal
Постоянный
Регистрация: 01.08.2020
Сообщений: 988
С нами: 3043831

Репутация: 163


По умолчанию

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
;
}
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.