Показать сообщение отдельно

  #3  
Старый 17.07.2020, 02:24
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

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

Назрело у меня пару вопросов
Первое:
Структура SAMP R3 Выглядит следующим образом:
Цитата:
Сообщение от Спойлер  


Каким образом в ulPort попадает порт, у которого оффсет 1388?

Второе:
Как на хукнутом RakClientInterface реализовать перехват входящих RPC как в s0beit'е. Т.е. условно если сервер пытается сетнуть мне хп, у меня в чат вывелось, что сервер мне пытается поставить мне хп. Или например нопить входящие RPC.

Третье:
Почему-то при вызове addChatMessage в основном потоке, работает, а при вызове этой же функции в где-нибудь в другом месте крашит.

Потоки:





Код:
void
test
(
char
*
szParams
)
{
pSAMP
->
addMessageToChat
(
0xFFFFFFFF
,
"addMessageToChat causes exception in gta_sa.exe(samp.dll)"
)
;
}
void
mainThread
(
void
*
pvParams
)
{
if
(
pSAMP
)
{
while
(
!
pSAMP
->
tryInit
(
)
)
{
Sleep
(
100
)
;
}
pSAMP
->
addMessageToChat
(
0xFFFFFFFF
,
"addMessageToChatWorks here!"
)
;
pSAMP
->
addClientCommand
(
"test"
,
test
)
;
}
}


addMessageToChat:





Код:
void
SAMPFramework
::
addMessageToChat
(
D3DCOLOR cColor
,
const
char
*
szMsg
,
.
.
.
)
{
if
(
g_Chat
==
nullptr
)
return
;
void
(
__thiscall
*
AddToChatWindowBuffer
)
(
const
void
*
_this
,
int
iType
,
char
*
szText
,
char
*
szPrefix
,
DWORD cColor
,
DWORD cPrefixColor
)
=
(
void
(
__thiscall
*
)
(
const
void
*
,
int
,
char
*
,
char
*
,
DWORD
,
DWORD
)
)
(
dwSAMPAddr
+
SAMP_FUNC_ADDTOCHATWND
)
;
if
(
szMsg
==
NULL
)
return
;
va_list ap
;
char
tmp
[
512
]
;
memset
(
tmp
,
0
,
512
)
;
va_start
(
ap
,
szMsg
)
;
vsnprintf
(
tmp
,
sizeof
(
tmp
)
-
1
,
szMsg
,
ap
)
;
va_end
(
ap
)
;
return
AddToChatWindowBuffer
(
(
void
*
)
g_Chat
,
8
,
tmp
,
NULL
,
cColor
,
0x00
)
;
}


Само исключение:

Код:
Вызвано исключение по адресу 0x0A279392 (samp.dll) в gta_sa.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000007.
Стек вызовов пустой
1. Переведи 1388 в шестнадцатиричную систему.

2. Используй VMT Hook Manager.

3. Попробуй.

C++:





Код:
void
/*CChat::AddEntry*/
AddEntry
(
DWORD color
,
const
char
*
text
,
.
.
.
)
{
char
buf
[
128
]
{
0
}
;
va_list args
;
va_start
(
args
,
text
)
;
vsprintf_s
(
buf
,
text
,
args
)
;
va_end
(
args
)
;
// Адреса 100% действительны для 0.3.7-R1
reinterpret_cast

(
/*(DWORD)GetModuleHandle("samp.dll")*/
g_dwSAMPBase
+
0x63850
)
(
g_Chat
,
buf
)
;
reinterpret_cast

(
g_dwSAMPBase
+
0x64010
)
(
g_Chat
,
8
,
buf
,
nullptr
,
color
,
0
)
;
}
 
Ответить с цитированием