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

  #6  
Старый 22.03.2021, 23:29
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

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

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

Отвечаю на вопросы 1, 2 и 3.
VirtualProtectEx нужен для того, чтобы установить нужному кусочку памяти необходимый уровень защиты для того, чтобы читать и записывать данные. Условно: сказать программе, что есть разрешение на запись/чтение этого участка памяти.
Использовать стоит везде, где ты её читаешь или записываешь.
Последствия, с которыми сталкивался я, – краш от античита с причиной "Нарушение прав доступа к памяти". Пример:

Это из краш-лога одного пользователя, который воспользовался моим скриптом без VirtualProtectEx.

Теперь по поводу вопроса 4.
Измени ту функцию на вот эту. Вероятно, у тебя возникнет ошибка, просто надо поставить многобайтовую кодировку. В VS это делается вот так.

C++:





Код:
DWORD
getModuleBaseAddress
(
DWORD pID
,
TCHAR
*
szModuleName
)
// функция, которая получает этот адрес "samp.dll". её трогать не надо
{
DWORD dwModuleBaseAddress
=
0
;
HANDLE hSnapshot
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
|
TH32CS_SNAPMODULE32
,
pID
)
;
if
(
hSnapshot
!=
INVALID_HANDLE_VALUE
)
{
MODULEENTRY32 ModuleEntry32
;
ModuleEntry32
.
dwSize
=
sizeof
(
MODULEENTRY32
)
;
if
(
Module32First
(
hSnapshot
,
&
ModuleEntry32
)
)
{
do
{
if
(
strcmp
(
ModuleEntry32
.
szModule
,
szModuleName
)
==
0
)
{
dwModuleBaseAddress
=
(
DWORD_PTR
)
ModuleEntry32
.
modBaseAddr
;
break
;
}
}
while
(
Module32Next
(
hSnapshot
,
&
ModuleEntry32
)
)
;
}
CloseHandle
(
hSnapshot
)
;
}
return
dwModuleBaseAddress
;
}


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


Спасибо за ответ , я вам очень признателен , теперь буду юзать VirtualProtectEx ну или просто переделаю ReadProcessMemory c встроенным VirtualProtectEx в нее🥸🤠 это должно уменьшить код ) .

[S]Про стиль общения это маска дабы общение было приятным[/S] ( 🥷[S]я не такой[/S]🥷 ) . 🤩 🥰 😀
 
Ответить с цитированием