ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   ASI плагин с использованием только структур/классов. Вопрос. (https://forum.antichat.xyz/showthread.php?t=1481126)

ya_noob 28.06.2023 22:31

Увидел как SR_team написал плагин используя только структуры без функции main, попробовал, но в игре НЕТ НИКАКИХ ИЗМЕНЕНИЙ.

Сначала был такой код:

C++:





Код:

#include
#pragma warning(disable:4996)
struct
loader
{
public
:
loader
(
)
{
memset
(
(
unsigned
char
*
)
0x00522F6A
,
0x90
,
6
)
;
// FixFOV
*
(
float
*
)
0x00522F7A
=
90
;
strcpy
(
reinterpret_cast

(
0x866C8C
)
,
"$-%d"
)
;
strcpy
(
reinterpret_cast

(
0x866C94
)
,
"$%d"
)
;
*
(
char
*
)
7520695
=
235
;
*
(
float
*
)
0xB6EC1C
=
0.00012
;
*
(
float
*
)
0xB6EC18
=
*
(
float
*
)
0xB6EC1C
;
*
(
unsigned
char
*
)
0x00561344
=
*
(
unsigned
char
*
)
0x005609FF
=
0xEB
;
*
(
float
*
)
0x00B7C4F0
=
420
;
*
(
char
*
)
0x058E280
=
235
;
}
}
Loader
;



Но, как я и описал выше, никаких изменений, затем я обратился за помощью к ChatGPT и он выдал мне этот код, который я скомпилировал:

C++:





Код:

#include
struct
Loader
{
Loader
(
)
{
PatchMemory
(
(
LPVOID
)
0x00522F6A
,
"\x90\x90\x90\x90\x90\x90"
,
6
)
;
// FixFOV
*
(
float
*
)
0x00522F7A
=
90
;
strcpy_s
(
reinterpret_cast

(
0x866C8C
)
,
sizeof
(
"$-%d"
)
,
"$-%d"
)
;
strcpy_s
(
reinterpret_cast

(
0x866C94
)
,
sizeof
(
"$%d"
)
,
"$%d"
)
;
*
(
char
*
)
7520695
=
235
;
*
(
float
*
)
0xB6EC1C
=
0.00012f
;
*
(
float
*
)
0xB6EC18
=
*
(
float
*
)
0xB6EC1C
;
*
(
unsigned
char
*
)
0x00561344
=
*
(
unsigned
char
*
)
0x005609FF
=
0xEB
;
*
(
float
*
)
0x00B7C4F0
=
420
;
*
(
char
*
)
0x058E280
=
235
;
}
static
void
PatchMemory
(
LPVOID address
,
const
void
*
data
,
size_t size
)
{
DWORD oldProtect
;
VirtualProtect
(
address
,
size
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
memcpy
(
address
,
data
,
size
)
;
VirtualProtect
(
address
,
size
,
oldProtect
,
&
oldProtect
)
;
}
}
;
Loader loader
;



Чуда не произошло. Что есть плагин, что его нет, ГТАшке все равно. Пишу эту тему с потребностью поинтересоваться ЧТО НЕ ТАК?

Хочу дополнить. Вот ссылка не код, в котором я увидел подобную реализацию без функции main(): https://gitlab.com/prime-hack/samp/p.../main/main.cpp

siwage 28.06.2023 22:46

Я не знаю С++, но возможно это?

https://forum.antichat.xyz/attachments/28332886/

ya_noob 28.06.2023 22:51

Цитата:

Сообщение от siwage

Я не знаю С++, но возможно это?

скачал плагин SR_team'a работает

Цитата:

Сообщение от siwage

Я не знаю С++, но возможно это?

https://www.blast.hk/threads/173829/ Я скачал готовый .asi, захотел посмотреть сурс, а там это

EclipsedFlow 28.06.2023 23:01

C++:





Код:

// Создаешь класс/структуру. В
// Создай конструктор и деструктор для них.
// Первый метод после "public:" - Конструктор, второй Деструктор.
// Конструктор выполняет код один раз при создании объекта класса/структруры.
// Деструктор обратное, вызывается один раз при удалении объекта из поля видисмоти.
// Тебе остается создать объект в глобальной области.
class
Boot
{
public
:
Boot
(
void
)
// Конструктор
{
// код выполняется раз при инициализации объкта.
}
~
Boot
(
void
)
// деструктор
{
// код выполняется раз при выхода из видисмоти/удалении объекта.
}
}
g_boot
;
// Или
Boot g_boot
;


ya_noob 28.06.2023 23:25

Цитата:

Сообщение от EclipsedFlow

C++:





Код:

// Создаешь класс/структуру. В
// Создай конструктор и деструктор для них.
// Первый метод после "public:" - Конструктор, второй Деструктор.
// Конструктор выполняет код один раз при создании объекта класса/структруры.
// Деструктор обратное, вызывается один раз при удалении объекта из поля видисмоти.
// Тебе остается создать объект в глобальной области.
class
Boot
{
public
:
Boot
(
void
)
// Конструктор
{
// код выполняется раз при инициализации объкта.
}
~
Boot
(
void
)
// деструктор
{
// код выполняется раз при выхода из видисмоти/удалении объекта.
}
}
g_boot
;
// Или
Boot g_boot
;



так я же так и сделал?

SR_team 28.06.2023 23:32

Ты пишешь в память без VirtualProtect. Обычно это приводит к крашу игры, но если это делать в момент инициализации библиотеки, то вместо краша библиотека сразу выгрузится - что у тебя и происходит.

Тебе для каждого адреса по которому ты пишешь, надо сначала разрешить запись через VirtualProtect

ya_noob 28.06.2023 23:35

Цитата:

Сообщение от SR_team

Ты пишешь в память без VirtualProtect. Обычно это приводит к крашу игры, но если это делать в момент инициализации библиотеки, то вместо краша библиотека сразу выгрузится - что у тебя и происходит.

Тебе для каждого адреса по которому ты пишешь, надо сначала разрешить запись через VirtualProtect

Но если делать подобную инициализацию в цикле, который находится в функции main, то гта не крашится без разрешения записи VirtualProtect

SR_team 28.06.2023 23:38

Цитата:

Сообщение от ya_noob

Но если делать подобную инициализацию в цикле, который находится в функции main, то гта не крашится без разрешения записи VirtualProtect

У тебя она не может не крашится. Может ты под циклом имеешь в виду mainloop из SF - это немного другое, и там CLEO снимает протект на всю память игры. Тут ты пишешь раньше.

И адрес 0x00561344, например, указывает на код. У кода по умолчанию разрешены только чтение и выполнение, а запись запрещена

ya_noob 28.06.2023 23:40

Цитата:

Сообщение от SR_team

У тебя она не может не крашится. Может ты под циклом имеешь в виду mainloop из SF - это немного другое, и там CLEO снимает протект на всю память игры. Тут ты пишешь раньше.
И адрес 0x00561344, например, указывает на код. У кода по умолчанию разрешены только чтение и выполнение, а запись запрещена

C++:





Код:

#include "windows.h"
#include "process.h"
#include "cstdint"
#pragma warning(disable:4996)
class
rain_noise
{
public
:
void
fixNoise
(
)
;
private
:
static
char
&
a1
;
static
int
&
a2
;
static
char
&
b1
;
static
int
&
b2
;
static
char
&
c1
;
static
int
&
c2
;
static
char
&
d1
;
static
int
&
d2
;
}
;
char
&
rain_noise
::
a1
=
*
(
char
*
)
0x72C7C0
;
int
&
rain_noise
::
a2
=
*
(
int
*
)
0x72C7C1
;
char
&
rain_noise
::
b1
=
*
(
char
*
)
0x705078
;
int
&
rain_noise
::
b2
=
*
(
int
*
)
0x705079
;
char
&
rain_noise
::
c1
=
*
(
char
*
)
0x72AAE0
;
int
&
rain_noise
::
c2
=
*
(
int
*
)
0x72AAE1
;
char
&
rain_noise
::
d1
=
*
(
char
*
)
0x53E126
;
int
&
rain_noise
::
d2
=
*
(
int
*
)
0x53E127
;
void
rain_noise
::
fixNoise
(
)
{
a1
=
144
;
a2
=
-
1869574000
;
b1
=
144
;
b2
=
-
1869574000
;
c1
=
144
;
c2
=
-
1869574000
;
//d1 = 144;
//d2 = -1869574000;
}
class
fov90
{
public
:
void
setFov
(
)
{
Afov2
=
90
;
// ������� ���� ������, ������������ �� �����������
fov1
=
90
;
// �����������.
// ���� �������
fov3
=
90
;
// ����������� ���� ������ ��� ���2
fov4
=
90
;
}
private
:
float
&
fov1
=
*
(
float
*
)
0x00522F7A
;
float
&
Afov2
=
*
(
float
*
)
0x00B6F250
;
float
&
fov3
=
*
(
float
*
)
0x8D5038
;
float
&
fov4
=
*
(
float
*
)
0xB6FF5C
;
}
;
class
fogdist
{
public
:
void
setFogDist
(
int
distance
)
{
fd1
=
fd2
=
0xEB
;
fd3
=
distance
;
}
private
:
unsigned
char
&
fd1
=
*
(
unsigned
char
*
)
0x00561344
;
unsigned
char
&
fd2
=
*
(
unsigned
char
*
)
0x005609FF
;
float
&
fd3
=
*
(
float
*
)
0x00B7C4F0
;
// float& LodDist = *(float*)0x00858FD8;
}
;
class
HUD
{
public
:
void
setHUD
(
)
{
// HealthHeight = 9;
// HealthWidth = 109; // 109
// HealthX = 141; //141
// HealthY = 77;
// ArmorX = 114; // 94
// ArmorY = 48; // 48
//  MoneyX_ = 64;
//  MoneyY_ = 89;
// MoneyY_ = (float)89.0;
// MoneyX = 20;
// MoneyY = 79; // 89
MoneyXScale
=
0.5
;
// 0.55
MoneyYScale
=
0.9
;
// 1.1
// radarrect = 1075318232;
WantedXScale
=
0.45
;
// 0.605
WantedYScale
=
0.9
;
// 1.21
WI_W
=
47
;
// 47;
WantedColor
=
0xFFD8D8D8
;
}
private
:
//  float& HealthWidth = *(float*)0x866BB8;
//  float& HealthHeight = *(float*)0x85EED4;
//  float& HealthX = *(float*)0x86535C;
//  float& HealthY = *(float*)0x866CA8;
// float& ArmorX = *(float*)0x866B78;
// float& ArmorY = *(float*)0x862D38;
// float& MoneyX = *(float*)0x85950C;
// byte& MoneyX_ = *(byte*)0x58F5FC;
// float& MoneyY = *(float*)0x866C88;
// byte& MoneyY_ = *(byte*)0x58F5DC;
float
&
WI_W
=
*
(
float
*
)
0x866C4C
;
float
&
WantedXScale
=
*
(
float
*
)
0x866C60
;
float
&
WantedYScale
=
*
(
float
*
)
0x866C64
;
float
&
MoneyXScale
=
*
(
float
*
)
0x866CAC
;
float
&
MoneyYScale
=
*
(
float
*
)
0x858F14
;
int
&
radarrect
=
*
(
int
*
)
0x58585A
;
char
&
WantedColor
=
*
(
char
*
)
0x58DDC9
;
}
;
/*namespace radarzoomfix
{
    float& a3 = *(float*)5794971; // 180
  // float& a0 = *(float*)5794971;
    char& a2 = *(char*)5794943;
  //  float& b4 = *(float*)5810889;
  //  float& c5 = *(float*)5810877;
  //  float& d6 = *(float*)5810871;
  //  float& a7 = *(float*)5811888;
  //  float& a8 = *(float*)5811894;
   
    float& a6 = *(float*)5810871;
    float& a5 = *(float*)5810877;
    float& a7 = *(float*)5811888;
    float& a8 = *(float*)5811894;
}*/
void
__cdecl
MainThread
(
void
*
pArg
)
{
rain_noise a
;
fov90 b
;
fogdist c
;
HUD d
;
std
::
uint8_t
chromekiller
[
]
{
*
(
std
::
uint8_t
*
)
0x00733275
,
*
(
std
::
uint8_t
*
)
0x00733FB6
,
*
(
std
::
uint8_t
*
)
0x00733365
,
*
(
std
::
uint8_t
*
)
0x00734276
,
*
(
std
::
uint8_t
*
)
0x0073357E
,
*
(
std
::
uint8_t
*
)
0x007344D1
,
*
(
std
::
uint8_t
*
)
0x00733453
,
*
(
std
::
uint8_t
*
)
0x007343A6
}
;
while
(
true
)
{
while
(
(
*
(
char
*
)
0xC8D4C0
)
!=
9
)
{
Sleep
(
100
)
;
}
bool
&
denchik
=
*
(
bool
*
)
0x58F58D
;
int
&
colorhp
=
*
(
int
*
)
0xBAB22C
;
float
&
deagle
=
*
(
float
*
)
0x521632
;
float
&
ak47m4rifle
=
*
(
float
*
)
0x8CC4B4
;
float
&
zspeed
=
*
(
float
*
)
0x862F1C
;
float
&
sens1
=
*
(
float
*
)
0xB6EC1C
;
float
&
sens2
=
*
(
float
*
)
0xB6EC18
;
int
valuecolor
=
0xFFD8D8D8
;
int
*
p_valuecolor
;
denchik
=
1
;
p_valuecolor
=
(
int
*
)
0xBAB230
;
*
p_valuecolor
=
valuecolor
;
colorhp
=
valuecolor
;
deagle
=
70
;
ak47m4rifle
=
70
;
// freetarget = 90;
zspeed
=
0
;
// tochkapricel = 235;
sens1
=
0.00012
;
sens2
=
sens1
;
//aatochkapric = 235;
*
(
char
*
)
0x058E280
=
235
;
char
&
no_more_haze
=
*
(
char
*
)
7520695
;
a
.
fixNoise
(
)
;
b
.
setFov
(
)
;
c
.
setFogDist
(
600
)
;
d
.
setHUD
(
)
;
no_more_haze
=
235
;
strcpy
(
reinterpret_cast

(
0x866C8C
)
,
"$-%d"
)
;
strcpy
(
reinterpret_cast

(
0x866C94
)
,
"$%d"
)
;
for
(
std
::
uint8_t
element
:
chromekiller
)
{
element
=
0xEB
;
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
_beginthread
(
MainThread
,
NULL
,
nullptr
)
;
return
TRUE
;
}



Вот код из говна и палок где используется обычный цикл, гта не крашилась из-за него. Крашилась из-за достижения 500 МБ памяти стрима (я без BufferCleaner'a).

комментарии в "вопросиках", потому что я открыл .cpp в VS Code, а изначально он был в VS 2022

SR_team 29.06.2023 21:46

Цитата:

Сообщение от ya_noob

C++:





Код:

#include "windows.h"
#include "process.h"
#include "cstdint"
#pragma warning(disable:4996)
class
rain_noise
{
public
:
void
fixNoise
(
)
;
private
:
static
char
&
a1
;
static
int
&
a2
;
static
char
&
b1
;
static
int
&
b2
;
static
char
&
c1
;
static
int
&
c2
;
static
char
&
d1
;
static
int
&
d2
;
}
;
char
&
rain_noise
::
a1
=
*
(
char
*
)
0x72C7C0
;
int
&
rain_noise
::
a2
=
*
(
int
*
)
0x72C7C1
;
char
&
rain_noise
::
b1
=
*
(
char
*
)
0x705078
;
int
&
rain_noise
::
b2
=
*
(
int
*
)
0x705079
;
char
&
rain_noise
::
c1
=
*
(
char
*
)
0x72AAE0
;
int
&
rain_noise
::
c2
=
*
(
int
*
)
0x72AAE1
;
char
&
rain_noise
::
d1
=
*
(
char
*
)
0x53E126
;
int
&
rain_noise
::
d2
=
*
(
int
*
)
0x53E127
;
void
rain_noise
::
fixNoise
(
)
{
a1
=
144
;
a2
=
-
1869574000
;
b1
=
144
;
b2
=
-
1869574000
;
c1
=
144
;
c2
=
-
1869574000
;
//d1 = 144;
//d2 = -1869574000;
}
class
fov90
{
public
:
void
setFov
(
)
{
Afov2
=
90
;
// ������� ���� ������, ������������ �� �����������
fov1
=
90
;
// �����������.
// ���� �������
fov3
=
90
;
// ����������� ���� ������ ��� ���2
fov4
=
90
;
}
private
:
float
&
fov1
=
*
(
float
*
)
0x00522F7A
;
float
&
Afov2
=
*
(
float
*
)
0x00B6F250
;
float
&
fov3
=
*
(
float
*
)
0x8D5038
;
float
&
fov4
=
*
(
float
*
)
0xB6FF5C
;
}
;
class
fogdist
{
public
:
void
setFogDist
(
int
distance
)
{
fd1
=
fd2
=
0xEB
;
fd3
=
distance
;
}
private
:
unsigned
char
&
fd1
=
*
(
unsigned
char
*
)
0x00561344
;
unsigned
char
&
fd2
=
*
(
unsigned
char
*
)
0x005609FF
;
float
&
fd3
=
*
(
float
*
)
0x00B7C4F0
;
// float& LodDist = *(float*)0x00858FD8;
}
;
class
HUD
{
public
:
void
setHUD
(
)
{
// HealthHeight = 9;
// HealthWidth = 109; // 109
// HealthX = 141; //141
// HealthY = 77;
// ArmorX = 114; // 94
// ArmorY = 48; // 48
//  MoneyX_ = 64;
//  MoneyY_ = 89;
// MoneyY_ = (float)89.0;
// MoneyX = 20;
// MoneyY = 79; // 89
MoneyXScale
=
0.5
;
// 0.55
MoneyYScale
=
0.9
;
// 1.1
// radarrect = 1075318232;
WantedXScale
=
0.45
;
// 0.605
WantedYScale
=
0.9
;
// 1.21
WI_W
=
47
;
// 47;
WantedColor
=
0xFFD8D8D8
;
}
private
:
//  float& HealthWidth = *(float*)0x866BB8;
//  float& HealthHeight = *(float*)0x85EED4;
//  float& HealthX = *(float*)0x86535C;
//  float& HealthY = *(float*)0x866CA8;
// float& ArmorX = *(float*)0x866B78;
// float& ArmorY = *(float*)0x862D38;
// float& MoneyX = *(float*)0x85950C;
// byte& MoneyX_ = *(byte*)0x58F5FC;
// float& MoneyY = *(float*)0x866C88;
// byte& MoneyY_ = *(byte*)0x58F5DC;
float
&
WI_W
=
*
(
float
*
)
0x866C4C
;
float
&
WantedXScale
=
*
(
float
*
)
0x866C60
;
float
&
WantedYScale
=
*
(
float
*
)
0x866C64
;
float
&
MoneyXScale
=
*
(
float
*
)
0x866CAC
;
float
&
MoneyYScale
=
*
(
float
*
)
0x858F14
;
int
&
radarrect
=
*
(
int
*
)
0x58585A
;
char
&
WantedColor
=
*
(
char
*
)
0x58DDC9
;
}
;
/*namespace radarzoomfix
{
    float& a3 = *(float*)5794971; // 180
  // float& a0 = *(float*)5794971;
    char& a2 = *(char*)5794943;
  //  float& b4 = *(float*)5810889;
  //  float& c5 = *(float*)5810877;
  //  float& d6 = *(float*)5810871;
  //  float& a7 = *(float*)5811888;
  //  float& a8 = *(float*)5811894;
 
    float& a6 = *(float*)5810871;
    float& a5 = *(float*)5810877;
    float& a7 = *(float*)5811888;
    float& a8 = *(float*)5811894;
}*/
void
__cdecl
MainThread
(
void
*
pArg
)
{
rain_noise a
;
fov90 b
;
fogdist c
;
HUD d
;
std
::
uint8_t
chromekiller
[
]
{
*
(
std
::
uint8_t
*
)
0x00733275
,
*
(
std
::
uint8_t
*
)
0x00733FB6
,
*
(
std
::
uint8_t
*
)
0x00733365
,
*
(
std
::
uint8_t
*
)
0x00734276
,
*
(
std
::
uint8_t
*
)
0x0073357E
,
*
(
std
::
uint8_t
*
)
0x007344D1
,
*
(
std
::
uint8_t
*
)
0x00733453
,
*
(
std
::
uint8_t
*
)
0x007343A6
}
;
while
(
true
)
{
while
(
(
*
(
char
*
)
0xC8D4C0
)
!=
9
)
{
Sleep
(
100
)
;
}
bool
&
denchik
=
*
(
bool
*
)
0x58F58D
;
int
&
colorhp
=
*
(
int
*
)
0xBAB22C
;
float
&
deagle
=
*
(
float
*
)
0x521632
;
float
&
ak47m4rifle
=
*
(
float
*
)
0x8CC4B4
;
float
&
zspeed
=
*
(
float
*
)
0x862F1C
;
float
&
sens1
=
*
(
float
*
)
0xB6EC1C
;
float
&
sens2
=
*
(
float
*
)
0xB6EC18
;
int
valuecolor
=
0xFFD8D8D8
;
int
*
p_valuecolor
;
denchik
=
1
;
p_valuecolor
=
(
int
*
)
0xBAB230
;
*
p_valuecolor
=
valuecolor
;
colorhp
=
valuecolor
;
deagle
=
70
;
ak47m4rifle
=
70
;
// freetarget = 90;
zspeed
=
0
;
// tochkapricel = 235;
sens1
=
0.00012
;
sens2
=
sens1
;
//aatochkapric = 235;
*
(
char
*
)
0x058E280
=
235
;
char
&
no_more_haze
=
*
(
char
*
)
7520695
;
a
.
fixNoise
(
)
;
b
.
setFov
(
)
;
c
.
setFogDist
(
600
)
;
d
.
setHUD
(
)
;
no_more_haze
=
235
;
strcpy
(
reinterpret_cast

(
0x866C8C
)
,
"$-%d"
)
;
strcpy
(
reinterpret_cast

(
0x866C94
)
,
"$%d"
)
;
for
(
std
::
uint8_t
element
:
chromekiller
)
{
element
=
0xEB
;
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
_beginthread
(
MainThread
,
NULL
,
nullptr
)
;
return
TRUE
;
}



Вот код из говна и палок где используется обычный цикл, гта не крашилась из-за него. Крашилась из-за достижения 500 МБ памяти стрима (я без BufferCleaner'a).

комментарии в "вопросиках", потому что я открыл .cpp в VS Code, а изначально он был в VS 2022

Так ты в цикле ждешь пока игра загрузится, за это время успевает загрузится CLEO и применить VirtualProtect к игре

ya_noob 29.06.2023 23:52

Цитата:

Сообщение от SR_team

Так ты в цикле ждешь пока игра загрузится, за это время успевает загрузится CLEO и применить VirtualProtect к игре

клео в сборке нет, ни клео, ни мунлоадера, ни сф, ни модлоадера. У меня в сборке один только ASI Loader. У меня один аси, чтобы избежать любых конфликтов с клео, луа, сф и так далее

SR_team 30.06.2023 04:37

Цитата:

Сообщение от ya_noob

клео в сборке нет, ни клео, ни мунлоадера, ни сф, ни модлоадера. У меня в сборке один только ASI Loader. У меня один аси, чтобы избежать любых конфликтов с клео, луа, сф и так далее

значит asi-loader снимает протект, потому что нельзя писать в зпротекченную ппамять

ya_noob 30.06.2023 06:41

Цитата:

Сообщение от SR_team

значит asi-loader снимает протект, потому что нельзя писать в зпротекченную ппамять

Я понял. Почему запись в функции main работает. А запись через структуру нет? Аси Лоадер распространяет снятие протекта только на "точку входа" или как это работает, наверное чушь написал, просто мне непонятно, если аси лоадер снимает протект, то он должен снимать его и для структур или нет?


Время: 09:14