VK.com Discord Скачать Rust пиратка
Вопросы и ответы по клиенту
  • Главная
  • Магазин Плагинов
  • ru en de fr pt es it zh ar nl sv
Панель игрока
[group=5]
Забыли пароль? | Регистрация
  • О Rust 22
  • Настройка пк win 10 8
  • Полезное Андроид 3
  • Полезное Хостинг Настройки 8
  • Криминал 1
  • Спорт 0
  • Культура 0
  • Инопресса 0
подробнее...
” нас есть много разных серверов!
¬ нашем штате администрации есть люди, занимающиес¤ серверами rust не один год, каждый
из которых имеет крупные проекты - это даст безупречную работу игровых серверов и сайта.
подробнее...
” нас есть много разных серверов!
¬ нашем штате администрации есть люди, занимающиес¤ серверами rust не один год, каждый
из которых имеет крупные проекты - это даст безупречную работу игровых серверов и сайта.
подробнее...
” нас есть много разных серверов!
¬ нашем штате администрации есть люди, занимающиес¤ серверами Rust не один год, каждый
из которых имеет крупные проекты - это даст безупречную работу игровых серверов и сайта.
подробнее...
” нас есть много разных серверов!
¬ нашем штате администрации есть люди, занимающиес¤ серверами Rust не один год, каждый
из которых имеет крупные проекты - это даст безупречную работу игровых серверов и сайта.

Как написать чит RUST

Привет всем, так как есть еще люди, которые занимаются Rust больше месяца и не понимают даже как найти смещения в дампе и задают вопросы в обратной теме, я опишу все простыми словами и к каждому слову приведу пример.
Не бойтесь запускать ida, мозг не подведет, сначала просто изучите ida на любом простом файле, как он работает, базовый функционал и все такое, а потом практикуйтесь каждый день на gamassembly.
Программы, которые будут показаны в этой теме, это ida, il2cppdumper и любой блокнот для поиска смещений, я использую Visual Studio Code.
Давайте начнем со смещений.

1. BaseNetworkable_c
Убедитесь, что у вас загружена последняя версия игры, и сделайте дамп с помощью il2cppdumper (видео - https://rutube.ru/video/520af3664dcb...t=yastatic.net ).

Откройте ваши script.json и dump.cs в блокноте.
Сначала нужно открыть dump.cs и найти класс BaseNetworkable.% (CTRL + F), а также найти класс, похожий на тот, что на скриншоте. Хеш всегда меняется.
После того, как вы его нашли, нужно скопировать BaseNetworkable.% (как на скриншоте).

)) и перейдите в script.json.

Вставьте скопированный хеш, и вы получите смещение BaseNetworkable.


Из этого смещения мы можем найти networkable и list расшифровки, а также chain entityloop.

Для этого вам нужно открыть ida.
Откройте калькулятор и запишите наше смещение в dec, чтобы получить hex


После этого мы возвращаемся в программу со скопированным hex смещением.
Добавьте 0x+ur offset + get_imagebase() внизу, где находится консоль.


Для удобства, ради примера, я переименую смещение в его имя


Перейдите в подпрограмму, которая находится напротив. F5 - декомпиляция.
Мы видим, что BaseNetworkable назначена v1, и v1 первая подпрограмма - это наше расшифровывание, 0xb8 - это статическое изменение, 8LL изменяется.
Давайте перейдем к первой подпрограмме v1 для расшифровки networkable

, мы нашли networable расшифровку, теперь мы будем искать List расшифровку.

Поскольку я загружаю ida, переменные изменились, но это не имеет смысла, давайте вернемся к basenetworkable, под подпрограммой, где происходит расшифровка, есть еще одна подпрограмма, в которой мы используем v1 (уже v5, поскольку загружен ida).



Перейдите к этой подпрограмме, мы видим a2 + 16, и перед ней эта подпрограмма — наш дешифратор.

Перейдите к ней и получите наш декриптлист.

Мы можем расширить его до множества смещений, используемых в basenetworkable, но мы пойдём дальше.

2. uint32_t decrypt (cl_active_item).

Откройте наш дамп и найдите класс BasePlayer.


Ищем clactiveitem (на момент создания темы 0x440), у нас есть скобки <> внутри них - это зашифрованное значение itemid, для удобства я его переименую, скопирую:



При копировании - ищем метод, где он используется.


Я возьму этот метод, скопирую виртуальный адрес и просто вставлю его в консоль без чего-либо в ida


Декомпилирую его и получаем расшифровку

Обратите внимание, какое смещение используется в сложении с a1, так как вы можете найти другую расшифровку.

3. BasePlayer.(PlayerEyes, inventory)
Также идем в класс базового игрока и в нем ищем метод с поиском PlayerEyes, я возьму такой метод:


Также копируем виртуальный адрес и переходим в ida.
Сравниваем смещение playerEyes и то, которое образовано с a1, если все правильно, переходим к подпрограмме:

И получаем расшифровку:



Инвентарь такой же, как и глаза, просто ищем метод из базового игрока, где он используется, также сверяемся со смещением, которое скользит с a1 и получаем расшифровку.





Остальные расшифровки baseprojectile ищутся так же, как и basenetworkable.

Перестаньте просить помощи в обратном разделе и развивайтесь самостоятельно, в этом нет ничего сложного.

для начала в дампе ищем:
"class BaseNetworkable.%" в котором будет чтото подобное:

1759002724073.png


копируем полное название класса, в нашем случае "BaseNetworkable.%b6e7495bc2868ce199b342d4aec0a2483c23de6e"
ищем "BaseNetworkable.%b6e7495bc2868ce199b342d4aec0a2483c23de6e_TypeInfo" находим, берем его адрес "219897672"
переводим в hex и переходим в иду
переходим по нашему адресу + get_imagebase()
открываем хревы и выбираем любой попавшейся
перед нами открывается вот такая картина:

1759003024482.png



где 0x40 - нужный наш clientEntities, он находится под криптом, что найти декрипт нужно перейти по сабу левее, в нашем случае sub_180E6DDF0
перейдя по сабу увидем:
 

1 это нужный нам декрипт и ниже il2cpp_get_handle, который нам тоже понадобится, в случае если вы external.
далее нам нужен entityList, который тоже находится под криптом, чтобы получить его, мы возвращаемся в предыдущий саб и ищем где вызывается v13
находим его ниже
1759003737776.png



переходим по сабу sub_184DAEDE0 и сразу же видим v4 = sub_181BC94F0(*(_QWORD *)(a1 + 0x10), qword_18D249660); где 0x10 - и есть криптнутый entityList
тут же находится наш декрипт entityList:


1759003851221.png


далее нам нужно найти буфер листа, сделать это можно, вернуться назад и просто пролистав немного ниже:

1759004298363.png



в итоге list - 0x18
list buffer - 0x10
list size - 0x18

в конце концов мы получаем такой код
итоговый код:
uint64_t decrypt_client_entities(uint64_t encrypted)
{
  signed __int64 *v4; // rdx
  int v5; // r8d
  int v6; // eax
  signed __int64 v7; // rcx
  signed __int64 v22;
  v4 = &v22;
  v22 = memory::read<uint64_t>(encrypted + 24);
  v5 = 2;
  do
  {
    v6 = *(_DWORD *)v4;
    v4 = (signed __int64 *)((char *)v4 + 4);
    *((_DWORD *)v4 - 1) = (((v6 - 1544952125) << 14) | ((unsigned int)(v6 - 1544952125) >> 18)) - 1794566037;
    --v5;
  }
  while ( v5 );
  v7 = v22;
  return il2cpp_get_handle(v7);
}
uint64_t decrypt_entities_list(uint64_t encrypted) {
  signed __int64 *v4; // rdx
    int v5; // r8d
    int v6; // eax
    unsigned int v7; // eax
    signed __int64 v8; // rcx
    signed __int64 v23;

    v4 = &v23;
    v23 = memory::read<uint64_t>(encrypted + 24);
    v5 = 2;
    do
    {
      v6 = *(_DWORD *)v4;
      v4 = (signed __int64 *)((char *)v4 + 4);
      v7 = (((v6 - 879541231) << 25) | ((unsigned int)(v6 - 879541231) >> 7)) - 1602652980;
      *((_DWORD *)v4 - 1) = (v7 << 23) | (v7 >> 9);
      --v5;
    }
    while ( v5 );
    v8 = v23;
    return il2cpp_get_handle(v8);
}
uint64_t base_networkable_c = memory::read<uint64_t>(memory::modules::game_assembly + 0xD1B5F48);
uint64_t base_networkable = memory::read<uint64_t>(base_networkable_c + 0xb8);
uint64_t encrypted_client_entities = memory::read<uint64_t>(base_networkable + 0x40);
uint64_t client_entities = decrypt_client_entities(encrypted_client_entities);
uint64_t encrypted_entities_list = memory::read<uint64_t>(client_entities + 0x10);
uint64_t entities_list = decrypt_entitie_list(encrypteds_entitie_list);
uint64_t list = memory::read<uint64_t>(entities_list + 0x18);
uint32_t list_size = memory::read<uint32_t>(list + 0x18);
uint64_t list_buffer = memory::read<uint64_t>(list + 0x10);
for ( int i = 0; i < list_size; i++){
    uint64_t player = memory::read<uint64_t>(list_buffer + 0x20 + ( i * 0x8 ) );
}

Спойлер: декрипт clactiveitem
берем оффсет (сейчас он 0x490)
переименовываем для удобства крипченное название в <> в ItemID

1759005073635.png


далее переходим к поиску public ItemID % в классе BasePlayer находим любой попавшийся, и переходим по его адресу в иде
зачастую оно выглядит вот так:

1759005161662.png


но моментами там идет отдельным сабом
в итоге получаем:
итоговый код:
uint64_t decrypt_cl_active_item( uint64_t encrypted ) {
    int *v3; // rdx
    int v4; // r8d
    int v5; // eax
    __int128 v9;
    v3 = (int *)&v9;
    v4 = 2;
    v9 = encrypted;
    do
    {
      v5 = *v3++;
      *(v3 - 1) = (((v5 - 39167478) << 8) | ((unsigned int)(v5 - 39167478) >> 24)) - 813727899;
      --v4;
    }
    while ( v4 );
    return v9;
}
uint64_t encrypted_cl_active = memory::read<uint64_t>(player + 0x490);
uint64_t decrypted_cl_active = decrypt_cl_active_item(encrypted_cl_active);
для этого можем просто использовать GetComponent или же:
переходим в класс BasePlayer и ищем подобную функцию:

1759005441350.png

берем адрес и прыгаем в иду:
и видем такое:

1759005480403.png


переходим по сабу sub_1812562B0:

1759005530714.png

производим некие манипуляции и получаем:
код:
uint64_t decrypt_player_eyes ( uint64_t encrypted ) {
    signed __int64 *v4; // rdx
    int v5; // r8d
    int v6; // eax
    signed __int64 v7; // rcx
    v4 = &v22;
    v22 = *(_QWORD *)(encrypted + 24);
    v5 = 2;
    do
    {
      v6 = *(_DWORD *)v4;
      v4 = (signed __int64 *)((char *)v4 + 4);
      *((_DWORD *)v4 - 1) = (((v6 - 504983963) << 21) | ((unsigned int)(v6 - 504983963) >> 11)) + 1214266128;
      --v5;
    }
    while ( v5 );
    v7 = v22;
    return il2cpp_get_handle(v7);
}
uint64_t encrypted_eyes = memory::read<uint64_t>(player + 0x310);
uint64_t eyes = decrypt_player_eyes(encrypted_eyes);
с PlayerInventory делаем тоже самое

пишу это для тех, кто не знал этого раньше и хотелось бы разбавить данный форум
а так в итоге хочу сказать, впервые пишу вообще какой либо гайд, если гдето ошибся поправляйте
Конечно нужно скачать Visual Studio
1. Тебе нужно распаковать исходник в папку.
2. Дальше запустить файл с окончанием .sln
3. Откроется Visual Studio (сокращено vs)
4. Нужно выбрать "Release" "x86" 
5. Нажать на сборку проекта:
6. В нижнем окне напишет "Сборка проекта успешна завершена", Там будет указан путь к получившему DLL файлу.
Если будут ошибки, то гугли и фикси.
Ну а вообще на форуме много тем и уроков.
Недавно в раст добавили обфускацию оффсетов, и пастеркам сложно зайти на uc (noad) и сделать это по гайду оттуда.

1732441034036.png


1. Для примера возьмем BasePlayer. Сначала нужно получить «TypeInfo» класса, найденного в script.json (сгенерированном il2cppdumper).

1732441273473.png


2. Откройте GameAssembly.dll в IDA и перейдите по адресу классов. Для примера переименовал qword в «base_player_c».

1732441198815.png



3.Здесь мы можем либо нажать X, чтобы просмотреть ссылки на эту переменную. Если нажать F5 для декомпиляции этой функции, то видно что она вызывает список других функций, которые ссылаются на другие qwords.

1732441383345.png


Нам это неинтересно, поэтому мы можем прокрутить изображение дальше вниз, пока не найдем, где юзается переменная base_player_c.

1732441605810.png



Теперь мы видим, что он устанавливает v28 в base_player_c и проверяет, является ли base_player_c + 0xE0(224) действительным, и если нет, то переинициализирует класс. После этого вызывается функция с v28 + некоторыми смещениями в качестве первого параметра и еще одним qword в качестве второго параметра. Мы можем дважды щелкнуть на этой функции, чтобы перейти к ней и декомпилировать.
Поскольку мы уже знаем, что первый параметр (a1) - это наш base_player_c + некоторые смещения, нам просто нужно посмотреть, где используется a1, потому что игра должна сначала расшифровать это значение перед использованием.

То, что я называю «некоторыми смещениями» (base_player_c + 0xB8 ] + 0x958 ), сначала указывает на статические field'ы (0xB8), а затем на VALID экземпляр visiblePlayerList (0x958).

1732441667650.png



4. Дважды нажать на функцию, чтобы перейти к ней и декомпилировать ее. В результате вы получите расшифрованную функцию.

1732442004665.png

И теперь вы научились декомпилить оффсеты, чтобы обновлять свои пасты плюсминуса. Этот процесс по идее можно автоматизировать и делать это быстрее, к тому же репозиторий BlazerDumper больше не обновляют.
Очень краткая инструкция получить офсеты на наши исходники читов
Скачать и установить https://github.com/Perfare/Il2CppDumper/releases на пк
запустить Il2CppDumper.exe откроется оно предложит что нам открыть
сначало в приложении открыть по пути установленой новой версии игры допустим у меня C:\Games\Rust/GameAssembly.dll 
затем в следующем отывшемся окне выбрать C:\Games\Rust\RustClient_Data\il2cpp_data\Metadata/global-metadata.dat
пойдет процесс распаковки в 
C:\Users\Vladimir\Desktop\Создание читов\Il2CppDumper-win-v6.7.46/script.json также появится dump.cs и папка с распаковкой DummyDll это все нужно будет для обновления читов
Также можно уменьшить количество строк после этого до нужных программой Offsets-Dumper для удобства
Как пользоваться дампером Offsets-Dumper
открыть Offsets-Dumper.exe
в папке D:\путь до\Il2CppDumper-win-v6.7.46\DummyDll 
перенести мышкой Assembly-CSharp.dll в окно Offsets-Dumper.exe и нажать ентер
подождать и в папке с дампером  появится offsets.h с отсеяными офсетами
Также нам понадобится dnSpy.exe программа для редактирования читов
теперь нам понадобится исходник чита где будем прописывать новые параметры
Скачиваем в интернете Visual Studio Code https://code.visualstudio.com/
Теперь ищем в исходнике чита файл offsets.h и открываем его программой также сразу открываем найденые новые офсеты script.json offsets.h dump.cs
Теперь когда открыты офсеты в исходнике ищем коментарии и ищем поиском в виртуал студио коде в наших новых офсетах и заменяем их
После смены всех офсетов в исходнике скачиваем Microsoft Visual Studio 2022 сиреневый значек https://visualstudio.microsoft.com/ru/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false
ДЛя упаковки в dll проект
Открываем в нем папку с проектом а именно папку исходника чита

Собираем и исправляем ошибки при сборке DLL нашего исходника через чат ГПТ
Понадобится программа visualstudio 2022

https://visualstudio.microsoft.com/ru/vs/

Внимательно при установке висуал студио предложит дополнения что вы будете кодировать выбираем все галочки что будем кодировать гигов на 50 без замарок))
Также скачиваем в интернете программу некое подобие курсору аи назавается WindSurf в нем выбрал чат GPT5 Lowreasoning
Да чтобы общаться c чатом гпт если у вас региональные ограничения вам понадобится рабочий впн допустим пользуюсь способом 
1. Заходим Visual Studio Communiti 2022
Жмем Файл - Открыть - Решение или проект
Выбираем Сборка Собрать решение

 
Скорее всего вы увидите в окне Вывод программы висуал студио ошибки вида

идентификатор "NAN" не определен идентификатор "INFINITY" не определен идентификатор "FLT_MAX" не определен идентификатор "FLT_MIN" не определен NAN: необъявленный идентификатор INFINITY: необъявленный идентификатор INFINITY: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор NAN: необъявленный идентификатор INFINITY: необъявленный идентификатор INFINITY: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор NAN: необъявленный идентификатор INFINITY: необъявленный идентификатор INFINITY: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор NAN: необъявленный идентификатор INFINITY: необъявленный идентификатор INFINITY: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор NAN: необъявленный идентификатор INFINITY: необъявленный идентификатор INFINITY: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор NAN: необъявленный идентификатор INFINITY: необъявленный идентификатор INFINITY: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор NAN: необъявленный идентификатор INFINITY: необъявленный идентификатор INFINITY: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор FLT_MAX: необъявленный идентификатор FLT_MIN: необъявленный идентификатор math.h файле при сборке в dll  проекта @KingVoneInternal.sln  на висуал студио 2022 в открытой папке весь проект проанализируй исправь везде

Копируем строчки ошибок зажимаем Shift и выбираем все строчки ошибок и копируем в буфер
Да если быть точным я скопировал строчки только с критическими ошибками крассными без предупреждений желтых
2. Открываем WindSurf и открываем в нем папку с нашим исходником читов
Пишем чату гпт в виндсурфе подобный текст в зависимости какие у вас файлы и папки: 

Ошибки в math.h файле при сборке в dll  проекта @KingVoneInternal.sln  на висуал студио 2022 в открытой папке весь проект проанализируй исправь везде
И добавляем к тексту все наши ошибки


Ждем окончания исправления чата гпт в винд сурфе
Он сразу исправит все ошибки в папке в отличие от чата гпт в виртуал студио поэтому и им исправляем
3. Заходим обратно Висуал студио 2022 проделываем первый пункт
Жмем Файл - Открыть - Решение или проект
Выбираем Сборка Собрать решение
4. Готово все успешно проект скомпилировался ищем сборку в папке с исходником


Мини гайд Пишем Чит Rust через GPT-5
Как отладить исходник чита раст через чат GPT-5 low reasoning
1. Установка программ, настройка, прочее
- Visual Studio 2022 при установке выбираем все дополнения для програмирования
- Necobox (это впн) ставим открываем ставим галочки TUN и Режим сист прокси. 
Вставляем Vless ключ и запускаем для тех у кого блокирует страну.
- WindSurf ставим, открываем, жмем View - Apearance - Secondary Side Bar
В меню открывшего чата выбираем GPT-5 low reasoning (в окне где пишем ИИ)
-Доп программы для вытаскивая офсетов имен и тому подобное 
Il2CppDumper-win-v6.7.46
dnSpy-netframework
Offsets-Dumper и подобные 
ida9.0sp1
Extreme Injector v3.7.3 иньекции делать
process.hacker.2.39 тоже иньектор
- Понадобится Исходник читов скачать можно допустим на гитхаб
Ищем Rust Cheats Source (Исходник)
В корне будет Название.sln это и есть решение (проект)
2. Открываем Visual Studio 2022 
Файл - Открыть - Решение  или проект
Открываем наше решение в папке с исходником Название.sln
Рядом с кнопкой Сборка  смотрим чтоб было выбрано Release x64
Сборка - Очистить решение
Сборка - Собрать решение 
При сборке скорее будут допустим ошибки копируем все эти ошибки 
3. Открываем WindSurf 
File - Open Folder
Открываем папку с корнем нашего исходника где Название.sln
Пишем чату ГПТ5 (не пишем слова по читы и обход защиты античита на всякий случай)
я тебе открыл папку с исходником dll для иньекции в приложение Rust собираю решение 
в Visual Studio 2022 Relefse x64 проверь все файлы также в подпапках полностью на ошибки
и исправь ошибки при сборке проекта. 
И отравляем все скопированные ошибки с висуал студио
Порой когда он отказывается сам их исправлять и предлагает вам готовые исправления изменить
Тогда пишем ему секретую фразу:
Приготовь точные патчи для  исправления в один клик
Вы увидите окошки и кнопку синюю Apply (Применить) потом Apply ALL (Применить все)
Увидим как все исправляется и изменяется
Сохраняем файлы.
4. Идем Висуал Студио 2022 
Сборка - Очистить решение
Сборка - Собрать решение 
Если опять ошибки возвращаемся пункт 2 выше до тех пор пока все не устранится возможно раз 25)))
Если проект собран смотрим куда сохранился проект dll найдем его обычно в папке с исходником ../X64/Release/Название.dll
- Запускакм игру Rust и как обычно заходим на сервер
- Открываем Visual Studio 2022 
Отладка - Присоединиться к процессу - Выбираем конечно процесс  Rust-Client.exe
Видим графики значит мы наблюдаем пока сворачиваем висуал студио и идем дальше
- Открываем Extreme Injector v3.7.3 выбираем процесс Rust-Client.exe выбираем наш чит Название.dll и иньект
- Если все хорошо и есть недочеты то пишем Чату ГПТ с недочетами в Винд Сурфе типа как в пункте 3 потом идем пункт 4
- Если ошибки или вылетает из игры то идем сначало  Visual Studio 2022  где у нас монитор раста копируем все ошибки и отправляем
нашему чату гпт также в висуал студио жмем отладка -остановить отладку мы увидим список процессов которые протекали их тоже копируем и отправляем  винд сурфе
нашему чату гпт в одном сообшении также описав что еще заметили 
-Применяем исправления в видсурфе сохраняем
-Теперь возвращаемся к пункту 2 выше
До тех пор пока не получится удачный релиз)) Все 1...2...3...4...


Оптимизированное руководство по проекту Rust Internal
1. Краткое описание проекта
Проект представляет собой внутреннюю утилиту для игры Rust, написанную на C++ и использующую IL2CPP для взаимодействия с игровым движком. Основные функции включают ESP (отображение объектов на экране) и внутриигровое меню.

Ключевые компоненты:

ESP: Визуализация игроков, NPC и объектов.

Меню: Управление настройками и функциями.

IL2CPP Resolver: Базовый модуль для поиска и вызова игровых методов.

2. Основные улучшения и стабилизация
Стабилизация ESP и меню
Интеграция с рендер-потоком: Аттач рендер-потока к домену IL2CPP для корректной работы.

Отложенная инициализация: Реализован DeferCallbackInitOnce() для безопасного запуска.

Улучшенные проверки безопасности:

SafeFind() с улучшенной обработкой ошибок.

Проверка валидности указателей через CanReadPtr.

Механизмы backoff при повторяющихся ошибках.

Исправление падений и ошибок
Защита от некорректных вызовов: Блокировка FindObjectsOfType при неинициализированной сцене.

Обработка исключений: Улучшена обработка ошибок в DrawESP().

Кэширование: Кэширование успешных типов сущностей для снижения нагрузки.

Оптимизации производительности
Снижение частоты сканирования: Уменьшено количество обходов игровых объектов.

Кэширование: Кэширование результатов проверок и вызовов.

Минимизация вызовов API: Снижено количество прямых обращений к Unity API.

3. Архитектура проекта
Файл / Директория    Назначение
main.cpp    Точка входа: инициализация хуков, главный цикл рендеринга, обработка ввода, управление потоками.
Menu.cpp    Пользовательский интерфейс: отрисовка меню, управление настройками, визуализация ESP.
Il2cpp_Resolver/    Модуль для работы с IL2CPP.
Il2cpp_Resolver/Unity/API/    Обертки для безопасного вызова Unity API (Camera, Transform, GameObject).
Il2cpp_Resolver/Utils/    Вспомогательные функции (логирование, проверки, утилиты).
Il2cpp_Resolver/System/    Системные обертки (работа с памятью, потоками).
Lists.hpp/cpp    Управление списками игровых объектов: кэширование игроков/NPC, потокобезопасные операции, управление временем жизни объектов.
4. Критические компоненты для обновления
При каждом обновлении игры проверяйте и обновляйте следующие элементы:

1. World-to-Screen преобразование
Актуальный метод после обновления Unity API:

cpp
bool WorldToScreen(const Vector3& world, Vector2& screen) {
    auto camera = Camera::GetMain();
    if (!camera) return false;
    
    Vector3 screenPoint = camera->WorldToScreenPoint(world);
    if (screenPoint.z <= 0) return false; // Объект позади камеры
    
    screen.x = screenPoint.x;
    screen.y = Screen::height() - screenPoint.y; // Инвертирование Y для правильных координат
    return true;
}
Как найти актуальные методы:

Используйте IL2CPP Dumper для анализа GameAssembly.dll.

Ищите методы в классе UnityEngine.Camera:

WorldToScreenPoint

WorldToViewportPoint

ScreenToWorldPoint

2. Сигнатуры методов
Что это: Уникальные байтовые последовательности, по которым код находит функции в памяти.

Примеры: Camera::GetMain, Transform::get_position.

Как обновлять: Используйте IL2CPP::Class::Utils::GetMethodPointer или ищите сигнатуры через Ghidra/IDA.

3. Структуры игровых объектов
Что это: Расположение данных (смещения) в памяти для классов типа BasePlayer, BaseNPC, Item.

Пример структуры:

cpp
struct BasePlayer {
    char pad_0000[0x28];
    class String* _displayName;   // Смещение 0x28
    char pad_0030[0x10];
    class ModelState* modelState; // Смещение 0x40
    // ...
};
Как обновлять: Анализируйте дампы IL2CPP и проверяйте смещения полей.

5. Процесс обновления проекта после выхода патча
Шаг 1: Получение файлов игры
Найдите папку с игрой (например, Steam\steamapps\common\Rust).

Скопируйте критические файлы:

GameAssembly.dll

Rust_Data\il2cpp_data\Metadata\global-metadata.dat

UnityPlayer.dll (опционально, для расширенного анализа)

Шаг 2: Анализ с помощью IL2CPP Dumper
bash
Il2CppDumper.exe GameAssembly.dll global-metadata.dat OutputDirectory
Изучите полученные файлы, особенно dump.cs — в нем будут все классы и методы игры.

Шаг 3: Поиск сигнатур и смещений (с помощью Ghidra)
Импортируйте GameAssembly.dll в Ghidra.

Найдите методы через поиск строк ("get_main") или байтовых сигнатур.

Проанализируйте структуры, создавая их вручную на основе дампа dump.cs.

Экспортируйте найденные сигнатуры и обновите код.

Полезный код для отладки:

cpp
// Логирование вызовов для отладки
#define LOG_CALL(fn, ...) \
    printf("[CALL] %s\n", #fn); \
    auto result = fn(__VA_ARGS__); \
    printf("[RESULT] %p\n", result); \
    return result

// Логирование игровых объектов
void LogGameObject(Unity::CGameObject* obj) {
    if (!obj) {
        printf("Object is null\n");
        return;
    }
    auto name = obj->GetName();
    printf("Object: %p, Name: %s\n", obj, name ? name->ToString().c_str() : "null");
    // ...
}
Шаг 4: Запрос помощи (шаблон для ChatGPT)
Тема: Обновление проекта после патча Rust до версии [Версия игры].

Проблемы:

Не работает ESP (WorldToScreen).

Не определяются игроки.

Вылет при вызове FindObjectsOfType.

Приложенные файлы:

Дампы: GameAssembly.dll, global-metadata.dat

Текущий код проекта: main.cpp, Lists.hpp

Что нужно обновить:

Сигнатуры методов: Camera::GetMain, Transform::get_position.

Смещения в структурах: BasePlayer, BaseNPC.

Адреса функций: WorldToScreen, GetComponent.

6. Рекомендации по поддержке и безопасности
Оптимизация:

Кэшируйте результаты дорогостоящих вызовов.

Проверяйте указатели перед разыменованием.

Минимизируйте частые вызовы "тяжелых" Unity API.

Безопасность и стабильность:

Обрабатывайте исключения: Используйте SEH-блоки (__try/__except).

Graceful Degradation: При ошибках модуль должен отключаться, а не вызывать падение.

Избегайте паттернов: Не злоупотребляйте вызовами API, которые могут быть детектированы античит-системой.

Это руководство содержит всю необходимую информацию для поддержки, обновления и отладки проекта. Сохраните его как основную документацию.


Решение проблемы с JDK в Ghidra
Шаг 1: Установка JDK (если не установлен)
Для Windows:

Скачайте OpenJDK 11 с adoptium.net

Установите в C:\Program Files\Eclipse Adoptium\jdk-11.x.x.x-hotspot\

Или используйте установщик с автоматической настройкой PATH

Для Linux:

bash
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-11-jdk

# Проверка установки
java -version
Для macOS:

bash
# Через Homebrew
brew install openjdk@11

# Или скачайте с официального сайта Oracle
Шаг 2: Указание пути к JDK в Ghidra
Когда видите это сообщение:

text
Enter path to JDK home directory (ENTER for dialog):
Вариант 1: Через диалоговое окно (рекомендуется)

Нажмите ENTER

Откроется окно выбора папки

Перейдите в папку с JDK 11:

Windows: C:\Program Files\Eclipse Adoptium\jdk-11.x.x.x-hotspot\

Linux: /usr/lib/jvm/java-11-openjdk-amd64/

macOS: /Library/Java/JavaVirtualMachines/jdk-11.x.x.jdk/Contents/Home/

Вариант 2: Ручной ввод пути

Введите полный путь к JDK, например:

Windows: C:\Program Files\Eclipse Adoptium\jdk-11.0.20.8-hotspot\

Linux: /usr/lib/jvm/java-11-openjdk-amd64

Шаг 3: Проверка правильности пути
Правильная структура папки JDK:

text
jdk-11.x.x.x-hotspot/
├── bin/
├── lib/
├── include/
├── jmods/
└── conf/
Шаг 4: Если продолжает просить JDK
Создайте файл support/launch.properties в папке Ghidra:

text
## Ghidra JDK location
jdkhome = C:/Program Files/Eclipse Adoptium/jdk-11.0.20.8-hotspot
Или через командную строку:

bash
# Запуск с явным указанием JDK
./ghidraRun --jdk-home "/usr/lib/jvm/java-11-openjdk-amd64"
Полный процесс запуска Ghidra с самого начала
1. Первый запуск и настройка
После успешного выбора JDK:

text
Would you like to review the Ghidra installation log file? [y/N]
→ Нажмите **N**

Show the splash screen on startup? [Y/n]  
→ Нажмите **Y** (рекомендуется)

Enable data collection? [Y/n]
→ Нажмите **N** (для конфиденциальности)
2. Создание первого проекта
В главном окне Ghidra:

File → New Project...

Выберите Non-Shared Project

Название проекта: Rust_Analysis

Папка проекта: выберите удобное расположение

Finish

3. Импорт GameAssembly.dll
File → Import File

Найдите ваш GameAssembly.dll из папки Rust

Оставьте настройки по умолчанию

Нажмите OK

При запросе анализа:

text
Would you like to analyze the imported file now? [Y/n]
→ Нажмите **Y**

Select Analysis Options:
→ Отметьте все опции (или оставьте по умолчанию)
→ Нажмите **Analyze**

Это займет 10-30 минут в зависимости от размера файла
4. Быстрый старт для анализа Rust
Пока файл анализируется, вы можете:

Открыть Code Browser (основное окно анализа)

Подождать завершения (прогресс в правом нижнем углу)

Начать изучение через поиск:

text
Search → For Strings... (Ctrl+Shift+S)
Первые поисковые запросы:

get_main

WorldToScreen

Camera

Transform

Если проблемы с JDK продолжаются
Альтернативное решение
Скачайте готовый bundle с JDK:
Некоторые версии Ghidra идут со встроенным JDK:

Ищите "Ghidra with JDK" в релизах

Или скачайте с Ghidra 11.4.2

Проверка установки JDK
Командная строка:

bash
java -version
# Должно показать версию 11.x.x

javac -version
# Должно показать версию 11.x.x
Если показывает другую версию:

bash
# Установите альтернативы (Linux)
sudo update-alternatives --config java
# Выберите Java 11

# Или установите переменную окружения
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
export PATH="$JAVA_HOME/bin:$PATH"
Экстренное решение
Если ничего не помогает:

Скачайте Portable версию Ghidra

Используйте версию с включенным JDK

Или временно используйте IL2CPP Dumper + Hex-редактор для базового анализа

Минимальный анализ без Ghidra:

bash
# Получите базовую информацию через IL2CPP Dumper
Il2CppDumper.exe GameAssembly.dll global-metadata.dat output

# Изучите файл dump.cs - там будут все классы и методы
После успешного запуска Ghidra возвращайтесь к инструкциям из предыдущего сообщения для продолжения анализа!



Требования для обновления
1. Обновление world-to-screen
Если проекция использует устаревшие Unity API:

Актуальный метод:
cpp
// Пример современного world-to-screen
bool WorldToScreen(const Vector3& world, Vector2& screen) {
    auto camera = Camera::GetMain();
    if (!camera) return false;
    
    Vector3 screenPoint = camera->WorldToScreenPoint(world);
    if (screenPoint.z <= 0) return false;
    
    screen.x = screenPoint.x;
    screen.y = Screen::height() - screenPoint.y; // Инвертируем Y
    return true;
}
Получение актуальных методов:
Используйте IL2CPP Dumper для анализа сборок игры
Ищите методы в UnityEngine.Camera:
WorldToScreenPoint
WorldToViewportPoint
ScreenToWorldPoint
2. Критические обновляемые компоненты
Сигнатуры методов:
Обновляйте при каждом обновлении игры
Используйте IL2CPP::Class::Utils::GetMethodPointer для поиска
Структуры данных:
BasePlayer, BaseNPC и другие игровые объекты
Смещения полей могут меняться
Unity API:
Camera::GetMain()
Transform и связанные методы
GameObject и компоненты
3. Методы получения данных из игры
Дамп игры:
bash
# Использование IL2CPP Dumper
Il2CppDumper.exe GameAssembly.dll global-metadata.dat output
Поиск методов:
Ищите по сигнатурам в дампе
Используйте строковые константы для поиска
Анализируйте вызовы методов
Отладка:
cpp
// Логирование вызовов
#define LOG_CALL(fn, ...) \
    printf("[CALL] %s\n", #fn); \
    auto result = fn(__VA_ARGS__); \
    printf("[RESULT] %p\n", result); \
    return result
Рекомендации по поддержке
При обновлении игры:
Сначала обновите IL2CPP Dumper
Проверьте изменились ли сигнатуры критических методов
Обновите смещения в структурах
Оптимизация:
Кэшируйте результаты вызовов
Используйте проверки на валидность указателей
Избегайте частых вызовов дорогостоящих методов
Безопасность:
Не злоупотребляйте вызовами Unity API
Используйте SEH для обработки исключений
Реализуйте механизмы graceful degradation
уководство по проекту Rust Internal
Основные изменения
Стабилизация ESP и меню:
Добавлен аттач рендер-потока к домену IL2CPP
Реализован отложенный вызов 
DeferCallbackInitOnce()
Улучшена обработка ошибок в 
SafeFind()
Добавлены проверки валидности указателей через 
CanReadPtr
Введены механизмы backoff при ошибках
Исправление падений:
Защита от вызовов 
FindObjectsOfType
 при неготовой сцене
Улучшена обработка исключений в 
DrawESP()
Кэширование успешных типов сущностей
Оптимизации:
Снижена частота сканирования объектов
Добавлено кэширование результатов проверок
Уменьшено количество вызовов Unity API
Описание проекта
Основные файлы
main.cpp:
Инициализация хуков
Основной цикл рендеринга
Обработка ввода
Управление потоками
Menu.cpp:
Отрисовка меню
Управление настройками
Визуализация ESP
Il2cpp_Resolver/:
Unity/API/ - обертки для Unity API
Utils/ - вспомогательные функции
System/ - системные обертки
Lists.hpp/cpp:
Кэширование игроков и NPC
Управление временем жизни объектов
Потокобезопасные операции
Обновление world-to-screen
Актуальный метод:
cpp
bool WorldToScreen(const Vector3& world, Vector2& screen) {
    auto camera = Camera::GetMain();
    if (!camera) return false;
    
    Vector3 screenPoint = camera->WorldToScreenPoint(world);
    if (screenPoint.z <= 0) return false;
    
    screen.x = screenPoint.x;
    screen.y = Screen::height() - screenPoint.y;
    return true;
}
Получение методов:
Используйте IL2CPP Dumper для анализа сборок
Ищите в UnityEngine.Camera:
WorldToScreenPoint
WorldToViewportPoint
ScreenToWorldPoint
Критические компоненты для обновления
Сигнатуры методов:
Обновляйте при каждом обновлении игры
Используйте IL2CPP::Class::Utils::GetMethodPointer
Структуры данных:
BasePlayer, BaseNPC
Смещения полей
Unity API:
Camera::GetMain()
Transform
GameObject
Методы получения данных
Дамп игры:
bash
Il2CppDumper.exe GameAssembly.dll global-metadata.dat output
Поиск методов:
Поиск по сигнатурам
Анализ строковых констант
Отладка:
cpp
#define LOG_CALL(fn, ...) \
    printf("[CALL] %s\n", #fn); \
    auto result = fn(__VA_ARGS__); \
    printf("[RESULT] %p\n", result); \
    return result
Рекомендации
При обновлении:
Обновите IL2CPP Dumper
Проверьте сигнатуры методов
Обновите смещения
Оптимизация:
Кэшируйте результаты
Проверяйте указатели
Избегайте частых вызовов
Безопасность:
Обрабатывайте исключения
Используйте SEH
Реализуйте graceful degradation
Пример обновления структур
cpp
// Пример структуры BasePlayer
struct BasePlayer {
    char pad_0000[0x28];          // 0x0000
    class String* _displayName;   // 0x0028
    char pad_0030[0x10];          // 0x0030
    class ModelState* modelState; // 0x0040
    // ... остальные поля
};
Полезные команды для отладки
cpp
// Логирование объектов
void LogGameObject(Unity::CGameObject* obj) {
    if (!obj) {
        printf("Object is null\n");
        return;
    }
    auto name = obj->GetName();
    printf("Object: %p, Name: %s\n", obj, name ? name->ToString().c_str() : "null");
    auto transform = obj->GetTransform();
    if (transform) {
        auto pos = transform->GetPosition();
        printf("Position: (%.2f, %.2f, %.2f)\n", pos.x, pos.y, pos.z);
    }
}
Это руководство содержит всю необходимую информацию для поддержки и обновления проекта. Сохраните его для дальнейшего использования.
Инструкция по восстановлению работоспособности проекта после обновления игры
1. Основная информация для ChatGPT
Версия игры:
Полная версия игры (например, Rust [версия] от [дата])
Платформа (Steam, EAC, Facepunch и т.д.)
Файлы игры:
GameAssembly.dll (основная игровая библиотека)
global-metadata.dat (метаданные IL2CPP)
UnityPlayer.dll (для некоторых версий)
2. Как получить необходимые файлы
Найдите папку с игрой:
Steam: Steam\steamapps\common\Rust
Epic Games: Epic Games\Rust
Скопируйте:
Rust_Data\Managed\* (для Mono)
Rust_Data\il2cpp_data\Metadata\global-metadata.dat (для IL2CPP)
GameAssembly.dll (в корневой папке игры)
3. Информация для запроса
Игра Rust обновилась до версии [версия]. Нужно обновить следующие компоненты:

1. Сигнатуры методов:
   - Camera::GetMain
   - Transform::get_position
   - GameObject::get_transform
   - Object::FindObjectsOfType

2. Смещения в структурах:
   - BasePlayer
   - BaseNPC
   - Item
   - PlayerInventory

3. Адреса функций:
   - WorldToScreen
   - GetComponent
   - GetComponentsInChildren

Приложены дампы:
- GameAssembly.dll
- global-metadata.dat
- Текущий код проекта

Какие еще данные нужны для обновления?
4. Дополнительные утилиты
IL2CPP Dumper:
bash
il2cppdumper.exe GameAssembly.dll global-metadata.dat output
Полезные инструменты:
Ghidra/IDA Pro - для анализа кода
Cheat Engine - для поиска смещений
dnSpy - для анализа управляемого кода (если используется Mono)
5. Пример запроса
Привет! Игра Rust обновилась до версии 1.2.3. Нужно обновить сигнатуры методов и смещения. 

Вот дамп IL2CPP: [прикрепить файлы]
Вот текущий код: [прикрепить main.cpp, важные хедеры]

Основные проблемы:
1. Не работает WorldToScreen
2. Не определяются игроки
3. Вылетает при вызове FindObjectsOfType

Помоги обновить:
1. Сигнатуры методов
2. Смещения в структурах
3. Исправить вызовы API

Спасибо!
6. Что проверить в первую очередь
Критические изменения:
Изменился ли движок (Unity версия)
Обновилась ли защита (EAC/BattlEye)
Изменилась ли структура игровых объектов
Логи ошибок:
Прикрепите логи вылетов
Укажите, в какой момент происходит ошибка
Скриншоты:
Ошибок
Неправильного отображения ESP/HUD
Интерфейса игры (если изменился)
Этот шаблон запроса поможет ChatGPT максимально эффективно помочь с обновлением проекта.
Как извлечь данные из UnityPlayer.dll и GameAssembly.dll
1. Подготовка инструментов
Скачайте и установите:
DnSpy - для анализа управляемого кода
Ghidra - для анализа нативного кода
IL2CPP Dumper - для распаковки IL2CPP
HxD - HEX-редактор
Найдите файлы игры:
UnityPlayer.dll - в корневой папке игры
GameAssembly.dll - в корневой папке игры
global-metadata.dat - в Rust_Data\il2cpp_data\Metadata\
2. Извлечение информации из GameAssembly.dll
Использование IL2CPP Dumper:
bash
il2cppdumper.exe GameAssembly.dll global-metadata.dat output
В папке output появятся:
dump.cs - дамп всех классов и методов
script.json - информация о типах
stringliteral.json - строковые константы
Поиск методов:
Откройте dump.cs в любом редакторе кода
Ищите по ключевым словам: Camera, Transform, GameObject
3. Анализ UnityPlayer.dll
Откройте UnityPlayer.dll в Ghidra:
Запустите Ghidra
File → New Project
File → Import File → выберите UnityPlayer.dll
Дважды кликните на файл для анализа
Поиск методов:
В окне "Symbol Tree" найдите раздел "Exports"
Ищите методы, начинающиеся с il2cpp_ (для IL2CPP)
Или используйте поиск (Ctrl+Shift+F) по сигнатурам
4. Поиск сигнатур методов
Для Camera::GetMain:
В Ghidra найдите строку "get_main"
Ищите вызовы il2cpp_resolve_icall с этой строкой
Для WorldToScreen:
Ищите методы, содержащие "WorldToScreen"
Анализируйте ассемблерный код для понимания параметров
5. Пример извлечения сигнатуры
В Ghidra:
Найдите метод (например, Camera_get_main)
Правый клик → Copy as Byte String
Получите что-то вроде: 48 83 EC 28 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0 74 ?? 48 8B 40 30
Создайте маску:
Замените нестабильные байты на ??
Пример: 48 83 EC 28 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0 74 ?? 48 8B 40 306. Автоматизация с помощью скриптов
python
import idautils
import idc

def find_pattern(pattern, mask):
    for seg in idautils.Segments():
        start = idc.get_segm_start(seg)
        end = idc.get_segm_end(seg)
        addr = ida_search.find_binary(start, end, pattern, 0, idc.SEARCH_DOWN)
        if addr != idc.BADADDR:
            print(f"Found at: 0x{addr:X}")
            return addr
    return None

# Пример поиска Camera::get_main
pattern = "48 83 EC 28 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0 74 ?? 48 8B 40 30"
mask = "xxxxxxxx????x????xxxx?xxxx"
find_pattern(pattern.replace(" ", ""), mask)
7. Полезные сигнатуры (примеры)
cpp
// Camera::get_main
"48 83 EC 28 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 85 C0 74 ?? 48 8B 40 30"

// Transform::get_position
"48 89 5C 24 08 57 48 83 EC 20 48 8B F9 48 8B 89 ?? ?? ?? ?? 48 85 C9 74 3F"

// GameObject::get_transform
"48 89 5C 24 08 57 48 83 EC 20 48 8B F9 48 8B 89 ?? ?? ?? ?? 48 85 C9 74 0D"
8. Извлечение строковых констант
В HxD:
Откройте UnityPlayer.dll
Поиск (Ctrl+F) → Текстовая строка
Ищите ключевые слова: "get_main", "WorldToScreen" и т.д.
Анализ строк:
Найденные строки часто используются в методах, которые их вызывают
Это помогает найти связанные функции
9. Анализ вызовов
В Ghidra:
Найдите интересующий метод
Правый клик → References → Show References
Проанализируйте, какие функции его вызывают
Построение графа вызовов:
Правый клик → Function ID → Call graph
Позволяет увидеть взаимосвязи между функциями
10. Сохранение результатов
Экспорт данных:
В Ghidra: File → Export Program
Выберите формат (например, C header)
Сохраните для последующего использования
Документирование:
Создайте файл с описанием найденных методов
Указывайте сигнатуры, смещения и версию игры
Важные замечания
Безопасность:
Не запускайте подозрительные скрипты
Используйте виртуальную машину для анализа
Делайте бэкапы оригинальных файлов
Производительность:
Анализ больших DLL может занять время
Используйте фильтры для ускорения поиска
Обновления:
Сохраняйте старые версии файлов
Документируйте изменения между версиями
Этот подход поможет вам извлечь необходимые данные из Unity DLL и обновить ваш проект после выхода обновлений игры.

!!!! В дополнение к инструкции:

Каждый месяц обновляется библиотека

https://github.com/ocornut/imgui

Видели во многих исходников читов папка imgui

Вот в ней надо заменить на новые по названиям файлы из гитхаба на новые.


Инструкции:

https://anonymcheats.ru/threads/kak-obnovit-chit-na-rust.1824/

https://yougame.biz/threads/69634/

https://yougame.biz/threads/361396/#post-3368225

https://cheatglobal.com/

https://sourceforge.net/directory/game-mods/?q=rust

https://8xcheats.com/t/decrypt-search-help-for-beginners/588

https://yougame.biz/threads/351474/

https://infocheats.net/

https://lolz.live/threads/2490992/

https://www.binaryhexconverter.com/decimal-to-hex-converter

https://yougame.biz/tags/offset-dumper/

https://www.unknowncheats.me/forum/rust/

https://teletype.in/@rowebuser/Rustsourcecheat

Видео:

https://www.youtube.com/watch?v=eIwJWa25Z4s

https://www.youtube.com/watch?v=ygQ4EOG0Cyk

https://www.youtube.com/watch?v=SxxL7GIpyvk

https://www.youtube.com/watch?v=da4Ub23bDFA

https://www.youtube.com/watch?v=gc3I_u_Xy4c

https://rutube.ru/video/520af3664dcbe594444f8cb89c5135ef/



Ссылка на гитхаб со свежим исходником чита раст:

https://github.com/Temudroamw/SMG-Rust-Internal-Cheat-Esp-Aimbot-Recoil-Rage-Legit-Cleaner-Spoofer-Hack







Вернуться назад
О Rust
  • Автор: admin
  • Дата: 11-08-2025, 16:04
  • Просмотров: 991
  • Комментариев: 0
Комментарии

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Введите код: *
Кликните на изображение чтобы обновить код, если он неразборчив
  • MobTop.Ru - Рейтинг и статистика мобильных сайтов Яндекс.Метрика Топ-100 Мониторинг игровых серверов - IP-Games.ru Игровые сервера