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

  #5951  
Старый 19.03.2022, 17:11
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

вы ебнутые? @legendabrn

какой нахуи std::string

C++:





Код:
#include 
BOOL APIENTRY
DllMain
(
HMODULE
,
DWORD dwReason
,
LPVOID
)
{
if
(
dwReason
==
DLL_PROCESS_ATTACH
)
{
auto
samp
=
(
DWORD
)
GetModuleHandleA
(
"samp.dll"
)
;
auto
addr
=
samp
+
0xE596Cu
+
29u
;
DWORD vp
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
1u
,
vp
,
&
vp
)
;
*
(
char
*
)
addr
=
'1'
;
VirtualProtect
(
(
void
*
)
addr
,
1u
,
vp
,
nullptr
)
;
}
}
 
Ответить с цитированием

  #5952  
Старый 19.03.2022, 17:16
legendabrn
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами: 3781678

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

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

вы ебнутые? @zTechnology @legendabrn

C++:





Код:
#include 
BOOL APIENTRY
DllMain
(
HMODULE
,
DWORD dwReason
,
LPVOID
)
{
if
(
dwReason
==
DLL_PROCESS_ATTACH
)
{
auto
samp
=
(
DWORD
)
GetModuleHandleA
(
"samp.dll"
)
;
auto
addr
=
samp
+
0xE596Cu
+
29u
;
DWORD vp
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
1
,
vp
,
&
vp
)
;
*
(
char
*
)
addr
=
'1'
;
VirtualProtect
(
(
void
*
)
addr
,
1
,
vp
,
nullptr
)
;
}
}

зачем трогать оригинальную строчку, ведь если ему потребуется использовать строку больше 46 символов, то твой пример затронет и чужую строку
 
Ответить с цитированием

  #5953  
Старый 19.03.2022, 17:17
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

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

зачем трогать оригинальную строчку, ведь если ему потребуется использовать строку больше 46 символов, то твой пример затронет и чужую строку
ему надо 1 символ поменять, кстати твой пример тоже работать не будет, там const char[] а ты подменяешь на std::string.
 
Ответить с цитированием

  #5954  
Старый 19.03.2022, 17:18
legendabrn
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами: 3781678

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

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

ему надо 1 символ поменять, кстати твой пример тоже работать не будет, там const char[] а ты подменяешь на std::string.


если что, мы подменяем указатель на строку
 
Ответить с цитированием

  #5955  
Старый 19.03.2022, 17:20
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

Цитата:
Сообщение от legendabrn  
в любом случае это UB, т.к. если кто то (к примеру другой плагин) будет пытаться обращаться к этой памяти, он скорее всего будет это делать как const char[], а там будет лежать указатель на std string
 
Ответить с цитированием

  #5956  
Старый 19.03.2022, 17:22
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

Цитата:
Сообщение от 4el0ve4ik  

че ты несешь, там указатель на саму строку...
Цитата:
Сообщение от legendabrn  

std::string chatSAMP{ "SAMP 0.3.7 R1" }
Цитата:
Сообщение от legendabrn  

*reinterpret_cast(module_samp + 0xB7C5) = &chatSAMP;
там указатель на std::string
 
Ответить с цитированием

  #5957  
Старый 19.03.2022, 17:25
legendabrn
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами: 3781678

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

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

там указатель на std::string
 
Ответить с цитированием

  #5958  
Старый 19.03.2022, 17:42
imring
Флудер
Регистрация: 03.08.2016
Сообщений: 2,363
С нами: 5145387

Репутация: 183


По умолчанию

@4el0ve4ik @legendabrn вам повезло, что указатель на первом месте стоит

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

такой структурой

Lua:





Код:
typedef struct
_stdstring
{
union
{
char str
[
16
]
;
char
*
pstr
;
}
;
size_t length
;
size_t allocated
;
}
stdstring
;


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

  #5959  
Старый 19.03.2022, 17:46
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

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




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

@4el0ve4ik @legendabrn вам повезло, что указатель на первом месте стоит
с gcc компилятором ничего не работает.



как наверняка и со всеми другими если будет использоваться алокация на хипе, а не статический баффер размером до 15 байт, который используется в std string для коротких строк.

собрал только что msvc с длинной строкой, как и ожидалось оно не работает.

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

ведь если ему потребуется использовать строку больше 46 символов
а твой пример ваще никак не будет работать
 
Ответить с цитированием

  #5960  
Старый 19.03.2022, 18:05
4el0ve4ik
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами: 5526867

Репутация: 183


По умолчанию

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

с gcc компилятором ничего не работает.

как наверняка и со всеми другими если будет использоваться алокация на хипе, а не статический баффер размером до 15 байт, который используется в std string для коротких строк.

собрал только что msvc с длинной строкой, как и ожидалось оно не работает.

а твой пример ваще никак не будет работать
да, действительно есть такой косяк.

вот так работоспособно:

C++:





Код:
*
reinterpret_cast

(
module_samp
+
0xB7C5
)
=
&
chatSAMP
[
0
]
;


совершенно не обратил на это внимание.
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.