 |
|

06.03.2022, 17:25
|
|
Новичок
Регистрация: 16.01.2022
Сообщений: 28
С нами:
2276608
Репутация:
8
|
|
Сообщение от Dadazik
Всем добый вечер,подскажите пожалуйста как узнать координаты объекта по его айди?
Notepad++
Ctrl+F
И получаешь результат.
Скриншот 06-03-2022 162807.pngwriteline · 6 Мар 2022 в 16:25' data-fancybox="lb-post-991447" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/138833/" style="cursor: pointer;" title="Скриншот 06-03-2022 162807.png">

|
|
|

06.03.2022, 17:30
|
|
Познавший АНТИЧАТ
Регистрация: 29.09.2018
Сообщений: 1,292
С нами:
4012500
Репутация:
138
|
|
|
|
|

07.03.2022, 09:25
|
|
Познающий
Регистрация: 16.01.2022
Сообщений: 71
С нами:
2276608
Репутация:
8
|
|
Сообщение от writeline
Ты не понял суть вопроса, либо рофлишь.
При заходе в игру появится такая же папка, с тем же названием "GTA San Andreas User Files"
А нужен "хук" по этому адресу.
Notepad++
Ctrl+F
И получаешь результат.
мне нужно на с++ в реальном времени
|
|
|

07.03.2022, 20:39
|
|
Новичок
Регистрация: 17.02.2022
Сообщений: 26
С нами:
2230348
Репутация:
3
|
|
Как сделать фаст аним?
|
|
|

07.03.2022, 22:57
|
|
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами:
5526867
Репутация:
183
|
|
Сообщение от writeline
Ты не понял суть вопроса, либо рофлишь.
При заходе в игру появится такая же папка, с тем же названием "GTA San Andreas User Files"
А нужен "хук" по этому адресу.
Notepad++
Ctrl+F
И получаешь результат.
Кароче, что касается вопроса изменения названия папки, то идешь по адресу 0x74503E и перезаписываешь указатель на свою строку. т.е.
C++:
Код:
std
::
string nameFolder
{
"\\GTA SA My Name Folder"
}
;
*
reinterpret_cast
(
0x74503F
)
=
&
nameFolder
[
0
]
;
|
|
|

08.03.2022, 02:38
|
|
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами:
5526867
Репутация:
183
|
|
Сообщение от writeline
Сделал вот так, папка не появляется, подсасывает как обычно с дефолт папки.
C++:
Код:
#include "pch.h"
#include "string"
void
USER_FILES
(
)
{
std
::
string nameFolder
{
"\\GTA SA My Name Folder"
}
;
*
reinterpret_cast
(
0x74503F
)
=
&
nameFolder
[
0
]
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
Во первых ты функцию нигде не вызываешь, вот полностью рабочий код:
C++:
Код:
std
::
string nameFolder
{
"\\GTA SA My Name Folder"
}
;
class
patchNameFolder
{
public
:
patchNameFolder
(
)
{
*
reinterpret_cast
(
0x74503F
)
=
&
nameFolder
[
0
]
;
}
}
pNF
;
|
|
|

08.03.2022, 02:51
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от 4el0ve4ik
Кароче, что касается вопроса изменения названия папки, то идешь по адресу 0x74503E и перезаписываешь указатель на свою строку. т.е.
C++:
Код:
std
::
string nameFolder
{
"\\GTA SA My Name Folder"
}
;
*
reinterpret_cast
(
0x74503F
)
=
&
nameFolder
[
0
]
;
Конкретно данный пример будет крашить если что.
|
|
|

09.03.2022, 15:49
|
|
Новичок
Регистрация: 10.10.2021
Сообщений: 15
С нами:
2418048
Репутация:
8
|
|
Сообщение от 4el0ve4ik
Во первых ты функцию нигде не вызываешь, вот полностью рабочий код:
C++:
Код:
std
::
string nameFolder
{
"\\GTA SA My Name Folder"
}
;
class
patchNameFolder
{
public
:
patchNameFolder
(
)
{
*
reinterpret_cast
(
0x74503F
)
=
&
nameFolder
[
0
]
;
}
}
pNF
;
Мелочь, но всё же:
C++:
Код:
std
::
string desiredFolderName
{
"Example"
}
;
void
*
folderNameAddress
{
reinterpret_cast
(
0x74503F
)
}
;
// Проверяем доступность страницы виртуальной памяти, в которой расположен указатель.
::
MEMORY_BASIC_INFORMATION mbi
{
}
;
if
(
0
!=
::
VirtualQuery
(
folderNameAddress
,
&
mbi
,
sizeof
(
mbi
)
)
&&
mbi
.
State
==
MEM_COMMIT
&&
(
mbi
.
Protect
&
(
PAGE_EXECUTE
|
PAGE_EXECUTE_READ
|
PAGE_EXECUTE_READWRITE
|
PAGE_EXECUTE_WRITECOPY
)
)
)
{
// На случай, если адрес памяти указателя под защитой, меняем флаг доступа.
::
DWORD protectionFlagsBefore
{
}
;
if
(
::
VirtualProtect
(
folderNameAddress
,
sizeof
(
void
*
)
,
PAGE_READWRITE
,
&
protectionFlagsBefore
)
)
{
// Клонируем указатель, который находится по данному адресу.
char
*
folderNamePtr
{
nullptr
}
;
std
::
memcpy
(
&
folderNamePtr
,
folderNameAddress
,
sizeof
(
char
*
)
)
;
if
(
nullptr
!=
folderNamePtr
)
{
// Если указатель валиден, то записываем значение прямо в его объект, в отличие от прошлого примера.
// Метод перезаписи адреса, на кой направляет указатель, мне не очень нравится,
// ибо придётся постоянно держать в памяти объект, созданный нами для сего деяния.
// Потому делаем иначе!
std
::
memcpy
(
folderNamePtr
,
desiredFolderName
.
c_str
(
)
,
desiredFolderName
.
size
(
)
)
;
}
}
}
|
|
|

09.03.2022, 19:35
|
|
Познавший АНТИЧАТ
Регистрация: 18.09.2017
Сообщений: 1,044
С нами:
4553429
Репутация:
153
|
|
Не отправляется пакет, использую RakHook
C++:
Код:
void
SendVehiclePacket
(
unsigned
__int16 vehID
,
CVector pos
,
CVector speed
)
{
stInCarData data
=
{
0
}
;
data
.
sVehicleID
=
vehID
;
data
.
fPosition
[
0
]
=
pos
.
x
;
data
.
fPosition
[
1
]
=
pos
.
y
;
data
.
fPosition
[
2
]
=
pos
.
z
;
data
.
fMoveSpeed
[
0
]
=
speed
.
x
;
data
.
fMoveSpeed
[
1
]
=
speed
.
y
;
data
.
fMoveSpeed
[
2
]
=
speed
.
z
;
data
.
fQuaternion
[
0
]
=
0
;
data
.
fQuaternion
[
1
]
=
0
;
data
.
fQuaternion
[
2
]
=
0
;
data
.
fQuaternion
[
3
]
=
0
;
data
.
fVehicleHealth
=
1000.0f
;
RakNet
::
BitStream bs
;
bs
.
Write
(
ID_VEHICLE_SYNC
)
;
bs
.
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stInCarData
)
)
;
rakhook
::
send
(
&
bs
,
PacketPriority
::
HIGH_PRIORITY
,
PacketReliability
::
RELIABLE
,
'\000'
)
;
}
|
|
|

10.03.2022, 15:35
|
|
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами:
5526867
Репутация:
183
|
|
Сообщение от Чёрный вурдалак
Мелочь, но всё же:
C++:
Код:
std
::
string desiredFolderName
{
"Example"
}
;
void
*
folderNameAddress
{
reinterpret_cast
(
0x74503F
)
}
;
// Проверяем доступность страницы виртуальной памяти, в которой расположен указатель.
::
MEMORY_BASIC_INFORMATION mbi
{
}
;
if
(
0
!=
::
VirtualQuery
(
folderNameAddress
,
&
mbi
,
sizeof
(
mbi
)
)
&&
mbi
.
State
==
MEM_COMMIT
&&
(
mbi
.
Protect
&
PAGE_EXECUTE_FLAGS
)
)
{
// На случай, если адрес памяти указателя под защитой, меняем флаг доступа.
::
DWORD protectionFlagsBefore
{
}
;
if
(
::
VirtualProtect
(
folderNameAddress
,
sizeof
(
void
*
)
,
PAGE_READWRITE
,
&
protectionFlagsBefore
)
)
{
// Клонируем указатель, который находится по данному адресу.
char
*
folderNamePtr
{
nullptr
}
;
std
::
memcpy
(
&
folderNamePtr
,
folderNameAddress
,
sizeof
(
char
*
)
)
;
if
(
nullptr
!=
folderNamePtr
)
{
// Если указатель валиден, то записываем значение прямо в его объект, в отличие от прошлого примера.
// Метод перезаписи адреса, на кой направляет указатель, мне не очень нравится,
// ибо придётся постоянно держать в памяти объект, созданный нами для сего деяния.
// Потому делаем иначе!
std
::
memcpy
(
folderNamePtr
,
desiredFolderName
.
c_str
(
)
,
desiredFolderName
.
size
(
)
)
;
}
}
}
А ниче, что если имя папки будет больше оригинального - ты перезапишешь следующую строку? В моем методе эта проблема решена. На счет протекта памяти - это был всего лишь пример.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|