- Сообщения
- 815
- Реакции
- 435
Всем привет это Дарвин, сегодня я вам покажу как обновлять оффсеты читов для игры Sea Of Thieves, исходник вы можете найти как на нашем форуме так и на любом сайте
Сегодня я вам так же расскажу принципы как это все работает и устроенно и естественно мы будем использовать UnrealEngine Dumper потому что игра на этом движке
Вам понадобится обновленный SDK и проект для взлома.
(Вам понадобится Visual Studio C++ с инструментами сборки v142 для редактирования проекта и создания собственного дампа SDK, нам нужен UnrealDumper ссылка ниже, а затем запустите его, пока вы находитесь на сервере в игре) .
Смещения управляются вашим файлом SDK.h в вашем проекте.
Скажем, нам нужно обновить эту структуру:
Откройте файлы дампа SDK и найдите строку AProjectileWeapon или Athena.ProjectileWeapon.
(Большинство элементов, начинающихся с A, — это просто Athena.Something и наиболее часто используемые файлы .h
для SoT_Hook — это Engine_struct.h, Engine_classes.h, Athena_struct.h, Athena_classes.h)
Или просто найдите саму строку "FPProjectileWeaponParameters WeaponParameters;". Он находится в Athena_classes.h и выглядит так:
Все, что мы здесь делаем, это вводим число в блокнот,
Блокнот в основном говорит ему перейти к значению внутри квадратных скобок [], потому что он читается со строки 0 вниз. Так что:
Как рассчитать несколько колодок.
Возьмите это, например;
Итак, для начала нам нужно найти 3 разных мероприятия. Просто найдите каждую строку в SDK
1. struct ACharacter* Персонаж; // 0x3e8(0x08)
2. struct APlayerCameraManager* PlayerCameraManager; // 0x460(0x08)
3. логическое значение IdleDisconnectEnabled; // 0x14b1(0x01)
1. Итак, что мы здесь делаем, так это берем смещение, с которого мы начинаем (0x3e8), и просто помещаем его прямо в стартовую площадку (не часть в скобках).
2. Для расчета pad_2 мы берем все первое смещение, включая часть в скобках, путем сложения их вместе с помощью HEX-калькулятора.
(который можно найти в Windows 10, найти калькулятор и при открытии переключиться на программатор> шестнадцатеричный)
Итак, 0x3e8 + 0x08 = 0x3f0.
Затем мы берем следующее смещение 0x460 (без добавления части 0x08) и вычитаем из него 0x3f0 (мы только что получили от 0x3e8 + 0x08).
В калькуляторе будет 460 - 3f0 = 70
3. наконец, мы берем 0x460 + 0x08 и вычитаем его из 0x14b1 так,
14б1 - 468 = 1049. Теперь просто подставляем их для каждой подушечки.
Возьмите этот незавершенный пример кода:
0x70 нельзя вычесть из 0x18, поэтому вместо этого мы должны учитывать это, используя что-то вроде этого
char pad_CaptureParams_struct охватывает первые 0x18 в FWorldMapIslandDataCaptureParams.
который приведет вас к позиции смещения для FVector WorldSpaceCameraPosition.
(Вам не обязательно называть пэды таким образом, но это поможет вам вспомнить, почему они у вас есть).
Ссылка на UnrealEngine Dumper:
Сегодня я вам так же расскажу принципы как это все работает и устроенно и естественно мы будем использовать UnrealEngine Dumper потому что игра на этом движке
Вам понадобится обновленный SDK и проект для взлома.
(Вам понадобится Visual Studio C++ с инструментами сборки v142 для редактирования проекта и создания собственного дампа SDK, нам нужен UnrealDumper ссылка ниже, а затем запустите его, пока вы находитесь на сервере в игре) .
Смещения управляются вашим файлом SDK.h в вашем проекте.
Скажем, нам нужно обновить эту структуру:
C++:
struct AProjectileWeapon {
char pad[0x???];
FProjectileWeaponParameters WeaponParameters;
bool CanFire()
{
static auto fn = UObject::FindObject<UFunction>("Function Athena.ProjectileWeapon.CanFire");
bool canfire;
ProcessEvent(this, fn, &canfire);
return canfire;
}
};
Откройте файлы дампа SDK и найдите строку AProjectileWeapon или Athena.ProjectileWeapon.
(Большинство элементов, начинающихся с A, — это просто Athena.Something и наиболее часто используемые файлы .h
для SoT_Hook — это Engine_struct.h, Engine_classes.h, Athena_struct.h, Athena_classes.h)
Или просто найдите саму строку "FPProjectileWeaponParameters WeaponParameters;". Он находится в Athena_classes.h и выглядит так:
C++:
// Class Athena.ProjectileWeapon
// Size: 0xa60 (Inherited: 0x790)
struct AProjectileWeapon : ASkeletalMeshWieldableItem {
char UnknownData_790[0x28]; // 0x790(0x28)
struct UInventoryItemComponent* InventoryItem; // 0x7b8(0x08)
DelegateProperty ProjectileAimValidator; // 0x7c0(0x10)
struct FProjectileWeaponParameters WeaponParameters; // 0x7d0(0x1e0) <----(the offset we want to update)
char State; // 0x9b0(0x01)
char UnknownData_9B1[0x7]; // 0x9b1(0x07)
struct UAimSensitivityComponent* AimSensitivityComponent; // 0x9b8(0x08)
char UnknownData_9C0[0x10]; // 0x9c0(0x10)
char ProjectileWeaponType; // 0x9d0(0x01)
char UnknownData_9D1[0x3]; // 0x9d1(0x03)
float MaxAcceptableAttackTimeStampDelta; // 0x9d4(0x04)
char UnknownData_9D8[0x4]; // 0x9d8(0x04)
int32_t AmmoLeft; // 0x9dc(0x04)
float DistanceBeforeGravity; // 0x9e0(0x04)
float NameplateVisibilityRangeExtensionFactorWhileAiming; // 0x9e4(0x04)
char UnknownData_9E8[0x39]; // 0x9e8(0x39)
bool ShouldShowAmmoUI; // 0xa21(0x01)
char UnknownData_A22[0x3e]; // 0xa22(0x3e)
Все, что мы здесь делаем, это вводим число в блокнот,
Блокнот в основном говорит ему перейти к значению внутри квадратных скобок [], потому что он читается со строки 0 вниз. Так что:
C++:
struct AProjectileWeapon {
char pad[0x7d0]; <----- updated
FProjectileWeaponParameters WeaponParameters;
bool CanFire()
{
static auto fn = UObject::FindObject<UFunction>("Function Athena.ProjectileWeapon.CanFire");
bool canfire;
ProcessEvent(this, fn, &canfire);
return canfire;
}
};
Как рассчитать несколько колодок.
Возьмите это, например;
C++:
struct AController {
char pad_1[0x???];
class ACharacter* Character;
char pad_2[0x???];
APlayerCameraManager* PlayerCameraManager;
char pad_3[0x???];
bool IdleDisconnectEnabled;
};
Итак, для начала нам нужно найти 3 разных мероприятия. Просто найдите каждую строку в SDK
1. struct ACharacter* Персонаж; // 0x3e8(0x08)
2. struct APlayerCameraManager* PlayerCameraManager; // 0x460(0x08)
3. логическое значение IdleDisconnectEnabled; // 0x14b1(0x01)
1. Итак, что мы здесь делаем, так это берем смещение, с которого мы начинаем (0x3e8), и просто помещаем его прямо в стартовую площадку (не часть в скобках).
2. Для расчета pad_2 мы берем все первое смещение, включая часть в скобках, путем сложения их вместе с помощью HEX-калькулятора.
(который можно найти в Windows 10, найти калькулятор и при открытии переключиться на программатор> шестнадцатеричный)
Итак, 0x3e8 + 0x08 = 0x3f0.
Затем мы берем следующее смещение 0x460 (без добавления части 0x08) и вычитаем из него 0x3f0 (мы только что получили от 0x3e8 + 0x08).
В калькуляторе будет 460 - 3f0 = 70
3. наконец, мы берем 0x460 + 0x08 и вычитаем его из 0x14b1 так,
14б1 - 468 = 1049. Теперь просто подставляем их для каждой подушечки.
C++:
struct AController {
char pad_1[0x3e8];
class ACharacter* Character;
char pad_2[0x70];
APlayerCameraManager* PlayerCameraManager;
char pad_3[0x1049];
bool IdleDisconnectEnabled;
};
C++:
struct UWorldMapIslandDataAsset {
char pad[0x30];
struct FWorldMapIslandDataCaptureParams CaptureParams; // 0x30(0x40)
FVector WorldSpaceCameraPosition; // 0x18(0x0c)
};
C++:
struct UWorldMapIslandDataAsset {
char pad_UWorldMapIslandDataAsset[0x30];
char pad_CaptureParams_struct[0x18];
FVector WorldSpaceCameraPosition; // 0x18(0x0c)
};
char pad_CaptureParams_struct охватывает первые 0x18 в FWorldMapIslandDataCaptureParams.
который приведет вас к позиции смещения для FVector WorldSpaceCameraPosition.
(Вам не обязательно называть пэды таким образом, но это поможет вам вспомнить, почему они у вас есть).
Ссылка на UnrealEngine Dumper:
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Последнее редактирование: