Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Что такое оффсеты и как их искать

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
19 Мар 2026
Сообщения
4
Реакции
0
Считаем на примере доты два и client.dll, а конкретнее на примере оффсета до функции контроллера локального игрока.
С помощью dylibs ищем
1776838133246.png

1776838218842.png

Копируешь адресс слева.
1776845547453.png


Вставляешь в нижнюю строку такое нехитрое выражение, получаешь оффсет.
1776845577395.png
C++:
Expand Collapse Copy
struct SomeClass
{
    int data1;
    int data2;
};


auto* instance = new SomeClass{.data1 = 1,.data2 = 4};
Следовательно выражение.
reinterpret_cast<int*>(reinterpret_cast<std::uint8_t*>(instance) + 4)
Будет равно поинтеру на instance->data2
И также в асме можно понять что lea rax,[rsi+0x30] задвигает поинтер на rsi+0x30 в rax.
Если знать, что [rax] это какой-то там счетчик хитпоинтов и его же меняют инструкциями расчитанными на 4 байт можно предположить, что там инт.
наводимся и жмем X - xrefs
И ищем что-то что вызывает нашу функцию не очень глубоко и то у чего есть run-time type information RTTI потому что так будет легче.
Тут ничего нету. Лимита скриншотов не хватит.
Или можно облегчить себе жизнь если найти строковый xref.
Кликаю на xref'ы самого статического поля и вижу HasAnyLocalPlayer.
Вижу функцию TraceCallback в xref'ах HasAnyLocalPlayer, в самом начале которой, вызывается HasAnyLocalPlayer.
1776847909694.png



Ищу такой же строковый xref в client.dll

Перехожу по нему в функцию TraceCallback и открываю первый вызов в начале, благодаря чему нахожу статическое поле.

По xrefам статического поля нахожу
1776848130888.png


Нахожу его оффсет и ...

1776849290887.png

Получаю то, что хотел найти.

А также понимание процессов игры может упростить поиск.
Я подумал, что команда получения позиции юнита должна содержать получение локального контроллера.
Есть команда getpos и если посмотреть в ее сторону можно увидеть искомую функцию (dylibs)
1776839381458.png


Тогда в client.dll будет
1776839575596.png

Перехожу внутрь функции которую я нашел в декомпилированном представлении и синхронизирую дефолтный view с ним.

Прихожу к осознанию, что делаю гайд на бдшке, которую я не обновлял уже два патча

обновляю

Считаю оффсет и перехожу в дебаггер.
1776845655312.png

Нажимаю ctrl+G и перехожу. Ставлю брейкпоинт на конце функции.

Судя по всему результат должен находиться в rax.
1776845704269.png


Значит я беру то, что лежит в rax, открываю ReClass только для того чтобы сверить RTTI.
1776845775982.png

Ого пешка, а нужна была функция, которая возвращает контроллер локального игрока.

Не повезло.
 
Последнее редактирование:
Назад
Сверху Снизу