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

  #1  
Старый 12.08.2019, 00:01
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

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

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

Всем привет, пытаюсь поставит хук на самповскую функцию SAMP_FUNC_SENDCMD 0x65C60

ставлю через https://blast.hk/threads/30412/

C++:





Код:
DWORD Trampoline
=
0x0
;
byte prologue
[
6
]
;
void
UserHook
(
void
*
_this
,
char
*
message
)
{
MessageBoxA
(
NULL
,
message
,
"sadasd"
,
NULL
)
;
__asm jmp Trampoline
}
// устанавливаю
DWORD Addr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
SAMP_FUNC_SENDCMD
;
Trampoline
=
MakeJump
(
Addr
,
(
DWORD
)
&
UserHook
,
prologue
,
6
)
;


но при вызове команды происходит краш

вот скрины с енжина
до

и после установки

по моему выглядит красиво, но все же я где-то проебался

пробовал и с __stdcall функцию UserHook, и брал размер пролога 8 вместо 6 тоже не помогло, что я делаю не так?
как то трудно всё.

в сф без этого всего можно ставить хуки

C++:





Код:
DWORD hk_address
;
void
__declspec
(
naked
)
hook
(
)
{
static
DWORD jmp_address
=
hk_address
+
6
;
__asm
{
mov eax
,
fs
:
[
00000000
]
pushad
        pushfd
}
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"hooked!"
)
;
__asm
{
popfd
        popad
        jmp jmp_address
}
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
hk_address
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x65C60
;
SF
->
getGame
(
)
->
createHook
(
reinterpret_cast

(
hk_address
)
,
hook
,
DETOUR_TYPE_JMP
,
6
)
;
init
=
true
;
}
}
 
Ответить с цитированием

  #2  
Старый 12.08.2019, 00:03
Cake_
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами: 4793630

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

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

как то трудно всё.
в сф без этого всего можно ставить хуки

C++:





Код:
DWORD hk_address
;
void
__declspec
(
naked
)
hook
(
)
{
static
DWORD jmp_address
=
hk_address
+
6
;
__asm
{
mov eax
,
fs
:
[
00000000
]
pushad
        pushfd
}
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"hooked!"
)
;
__asm
{
popfd
        popad
        jmp jmp_address
}
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
hk_address
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x65C60
;
SF
->
getGame
(
)
->
createHook
(
reinterpret_cast

(
hk_address
)
,
hook
,
DETOUR_TYPE_JMP
,
6
)
;
init
=
true
;
}
}

Можно пример хука без сф?
 
Ответить с цитированием

  #3  
Старый 12.08.2019, 00:15
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

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

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

Можно пример хука без сф?
тоже самое всё, ниже функа

кстати, можно использовать для call хука если заменить 0xE9 на 0xE8

C++:





[CODE]
void
CreateJmpHook
(
BYTE
*
pAddress
,
DWORD dwJumpTo
,
size_t size
=
5
)
{
if
(
size

(
pAddress
+
0x1
)
=
dwJumpTo
-
reinterpret_cast

(
pAddress
)
-
0x5
;
for
(
size_t i
=
0x5
;
i

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

  #4  
Старый 11.08.2019, 22:41
Roger571
Познающий
Регистрация: 22.07.2015
Сообщений: 58
С нами: 5689694

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

Скорее я тупой и не вижу очевидного.

Возникла проблема с получением имени сетевого адаптера и я в душе не чаю, что не так и в какой магической кодировке оно находится.

Самое интересное, описание в нормальном виде. У обоих тип char*, ес шо.

Вот, сообсна, код.

C++:





Код:
PIP_ADAPTER_INFO pAdapter
=
pAdapterInfo
;
while
(
pAdapter
)
{
Log
(
"Adapter Name: %s %s\n"
,
pAdapter
->
AdapterName
,
pAdapter
->
Description
)
;
Log
(
"IP Address: %s\n"
,
pAdapter
->
IpAddressList
.
IpAddress
.
String
)
;
pAdapter
=
pAdapter
->
Next
;
}


Вот лог:

Цитата:

{D387BCE2-FD49-4AFA-AA49-E7634ED15008} Intel(R) Ethernet Connection (2) I219-V
А теперь главный вопрос, как привести имя адаптера в человеческий вид?
 
Ответить с цитированием

  #5  
Старый 11.08.2019, 22:51
Cake_
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами: 4793630

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

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

Скорее я тупой и не вижу очевидного.
Возникла проблема с получением имени сетевого адаптера и я в душе не чаю, что не так и в какой магической кодировке оно находится.
Самое интересное, описание в нормальном виде. У обоих тип char*, ес шо.
Вот, сообсна, код.

C++:





Код:
PIP_ADAPTER_INFO pAdapter
=
pAdapterInfo
;
while
(
pAdapter
)
{
Log
(
"Adapter Name: %s %s\n"
,
pAdapter
->
AdapterName
,
pAdapter
->
Description
)
;
Log
(
"IP Address: %s\n"
,
pAdapter
->
IpAddressList
.
IpAddress
.
String
)
;
pAdapter
=
pAdapter
->
Next
;
}


Вот лог:

А теперь главный вопрос, как привести имя адаптера в человеческий вид?
вот тут должно быть то, что тебе нужно https://books.google.com.ua/books?i...oECAgQAQ#v=onepage&q=имя адаптера c++&f=false
 
Ответить с цитированием

  #6  
Старый 11.08.2019, 23:04
Roger571
Познающий
Регистрация: 22.07.2015
Сообщений: 58
С нами: 5689694

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

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

вот тут должно быть то, что тебе нужно
Оно то есть, да и в других примерах работы с этой библиотекой у людей все нормально и имя адаптера выводится в читаемом формате.

Если интересно, можешь попробовать у себя

Цитата:
Сообщение от Спойлер  


C++:





Код:
#pragma comment (lib, "Iphlpapi.lib")
#include "Windows.h"
#include "stdio.h"
#include "iphlpapi.h"
int
main
(
)
{
IP_ADAPTER_INFO
*
pAdapterInfo
;
ULONG            ulOutBufLen
;
DWORD            dwRetVal
;
pAdapterInfo
=
(
IP_ADAPTER_INFO
*
)
malloc
(
sizeof
(
IP_ADAPTER_INFO
)
)
;
ulOutBufLen
=
sizeof
(
IP_ADAPTER_INFO
)
;
if
(
GetAdaptersInfo
(
pAdapterInfo
,
&
ulOutBufLen
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterInfo
)
;
pAdapterInfo
=
(
IP_ADAPTER_INFO
*
)
malloc
(
ulOutBufLen
)
;
}
if
(
(
dwRetVal
=
GetAdaptersInfo
(
pAdapterInfo
,
&
ulOutBufLen
)
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterInfo
)
;
}
PIP_ADAPTER_INFO pAdapter
=
pAdapterInfo
;
while
(
pAdapter
)
{
printf
(
"Adapter Name: %s %s\n"
,
pAdapter
->
AdapterName
,
pAdapter
->
Description
)
;
printf
(
"IP Address: %s\n"
,
pAdapter
->
IpAddressList
.
IpAddress
.
String
)
;
pAdapter
=
pAdapter
->
Next
;
}
if
(
pAdapterInfo
)
free
(
pAdapterInfo
)
;
system
(
"pause"
)
;
return
0
;
}


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

  #7  
Старый 11.08.2019, 23:06
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

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

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

Оно то есть, да и в других примерах работы с этой библиотекой у людей все нормально и имя адаптера выводится в читаемом формате.
Если интересно, можешь попробовать у себя
Цитата:
Сообщение от Спойлер  


C++:





Код:
#pragma comment (lib, "Iphlpapi.lib")
#include "Windows.h"
#include "stdio.h"
#include "iphlpapi.h"
int
main
(
)
{
IP_ADAPTER_INFO
*
pAdapterInfo
;
ULONG            ulOutBufLen
;
DWORD            dwRetVal
;
pAdapterInfo
=
(
IP_ADAPTER_INFO
*
)
malloc
(
sizeof
(
IP_ADAPTER_INFO
)
)
;
ulOutBufLen
=
sizeof
(
IP_ADAPTER_INFO
)
;
if
(
GetAdaptersInfo
(
pAdapterInfo
,
&
ulOutBufLen
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterInfo
)
;
pAdapterInfo
=
(
IP_ADAPTER_INFO
*
)
malloc
(
ulOutBufLen
)
;
}
if
(
(
dwRetVal
=
GetAdaptersInfo
(
pAdapterInfo
,
&
ulOutBufLen
)
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterInfo
)
;
}
PIP_ADAPTER_INFO pAdapter
=
pAdapterInfo
;
while
(
pAdapter
)
{
printf
(
"Adapter Name: %s %s\n"
,
pAdapter
->
AdapterName
,
pAdapter
->
Description
)
;
printf
(
"IP Address: %s\n"
,
pAdapter
->
IpAddressList
.
IpAddress
.
String
)
;
pAdapter
=
pAdapter
->
Next
;
}
if
(
pAdapterInfo
)
free
(
pAdapterInfo
)
;
system
(
"pause"
)
;
return
0
;
}


В примере вроде похожее имя адаптера?

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

  #8  
Старый 11.08.2019, 23:42
Roger571
Познающий
Регистрация: 22.07.2015
Сообщений: 58
С нами: 5689694

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

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

В примере вроде похожее имя адаптера?
Да, был невнимателен.

В общем, если кому вдруг пригодится, на новых системах нужно использовать GetAdaptersAddresses(), который содержит поле FriendlyName. Он то и содержит читаемое имя адаптера. Источник.

Рабочий код:

Цитата:
Сообщение от Спойлер  


C++:





Код:
#include 
#include 
#include 
#include 
int
main
(
)
{
PIP_ADAPTER_ADDRESSES pAdapterAdresses
=
NULL
;
ULONG ulOutBufLen
=
0x1000
;
DWORD dwRetVal
;
char
buff
[
0x10
]
,
adapterName
[
0x20
]
,
desc
[
0x20
]
;
pAdapterAdresses
=
(
IP_ADAPTER_ADDRESSES
*
)
malloc
(
ulOutBufLen
)
;
ulOutBufLen
=
sizeof
(
IP_ADAPTER_INFO
)
;
if
(
GetAdaptersAddresses
(
AF_INET
,
GAA_FLAG_INCLUDE_PREFIX
,
NULL
,
pAdapterAdresses
,
&
ulOutBufLen
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterAdresses
)
;
pAdapterAdresses
=
(
IP_ADAPTER_ADDRESSES
*
)
malloc
(
ulOutBufLen
)
;
}
if
(
(
dwRetVal
=
GetAdaptersAddresses
(
AF_INET
,
GAA_FLAG_INCLUDE_PREFIX
,
NULL
,
pAdapterAdresses
,
&
ulOutBufLen
)
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterAdresses
)
;
}
PIP_ADAPTER_ADDRESSES pAdapter
=
pAdapterAdresses
;
while
(
pAdapter
)
{
wcstombs
(
adapterName
,
pAdapter
->
FriendlyName
,
wcslen
(
pAdapter
->
FriendlyName
)
)
;
wcstombs
(
desc
,
pAdapter
->
Description
,
wcslen
(
pAdapter
->
Description
)
)
;
printf
(
"Adapter Name: %s %s\n"
,
adapterName
,
desc
)
;
if
(
pAdapter
->
FirstUnicastAddress
->
Address
.
lpSockaddr
->
sa_family
==
AF_INET
)
{
sockaddr_in
*
sa_in
=
(
sockaddr_in
*
)
pAdapter
->
FirstUnicastAddress
->
Address
.
lpSockaddr
;
printf
(
"IP Address: %s\n"
,
inet_ntop
(
AF_INET
,
&
(
sa_in
->
sin_addr
)
,
buff
,
0x10
)
)
;
}
pAdapter
=
pAdapter
->
Next
;
}
if
(
pAdapterAdresses
)
free
(
pAdapterAdresses
)
;
system
(
"pause"
)
;
return
0
;
}


Цитата:
Сообщение от Cake_  
Это описание сетевого адаптера, указывается имя железа.
 
Ответить с цитированием

  #9  
Старый 11.08.2019, 23:13
Cake_
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами: 4793630

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

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

  #10  
Старый 12.08.2019, 23:35
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

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

Как можно взять параметры которые передавались в функцию которую хукнули?

И где они хранятся, в коком регистре?
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.