Что такое Оффсеты? Как найти и обновить?
Что такое Оффсеты?
Оффсет (Offset) - на простом языке, это смещение адреса в памяти. Например, в ячейке памяти есть игрок, по адресу 0x5100 (или любому другому), соответственно что этот объект содержит несколько ячеек данных: количество HP, процент брони, местоположение - координаты нахождения на карте, а также и другую информацию.
Как их найти и произвести обновление?
Вероятно вы зададитесь вопросом, как их найти и извлечь? Постараемся немного объяснить, на примере одновременно популярной и простой в этом плане игре Counter Strike: Global Offensive. Игровой движок Source имеет есть так называемые глобальные значения "Networked Variables" или же Netvar, сокращенный вариант. По сути, это обширные таблицы для каждого типа объекта. За известный адрес игрока, возьмем 0x5100, переносим игровой client.dll и загружаем в IDA- интерактивный дизассемблер. После открываем список строк через комбинацию клавиш Shitf + F12, в открывшимся окне и делаем поиск по строке, вписываем "Health" в переводе Здоровье (Игрока), после этого появится целый список с результатами.
На изображении выше, в после String есть много префиксов, но нужен именно тот, который имеет в начале "m_" - это член класса, в полном названии member. Для примера возьмем m_iHealth, который имеет следующий код:
Два раза кликаем по любому из столбиков, и перед глазами появляется очередная таблица:
Этими действиями, удалось найти Оффсет, который равен значению - 0xFC. Но на этом еще не все, осталось еще одно незаконченное действие, чтобы узнать внутренние значение, нужно выполнить код ниже, применяем его, так как тип данных integer:
Оффсет (Offset) - на простом языке, это смещение адреса в памяти. Например, в ячейке памяти есть игрок, по адресу 0x5100 (или любому другому), соответственно что этот объект содержит несколько ячеек данных: количество HP, процент брони, местоположение - координаты нахождения на карте, а также и другую информацию.
Как их найти и произвести обновление?
Вероятно вы зададитесь вопросом, как их найти и извлечь? Постараемся немного объяснить, на примере одновременно популярной и простой в этом плане игре Counter Strike: Global Offensive. Игровой движок Source имеет есть так называемые глобальные значения "Networked Variables" или же Netvar, сокращенный вариант. По сути, это обширные таблицы для каждого типа объекта. За известный адрес игрока, возьмем 0x5100, переносим игровой client.dll и загружаем в IDA- интерактивный дизассемблер. После открываем список строк через комбинацию клавиш Shitf + F12, в открывшимся окне и делаем поиск по строке, вписываем "Health" в переводе Здоровье (Игрока), после этого появится целый список с результатами.
На изображении выше, в после String есть много префиксов, но нужен именно тот, который имеет в начале "m_" - это член класса, в полном названии member. Для примера возьмем m_iHealth, который имеет следующий код:
class CBasePlayer
{
pad;
pad;
pad;
int m_iHealth; // 0xFC
}
Pad - это функция, в которой расположены другие члены класса, такие как:- int - integer "целое число";
- float - число с плавающей запятой;
- etc - оператор.
Два раза кликаем по любому из столбиков, и перед глазами появляется очередная таблица:
Этими действиями, удалось найти Оффсет, который равен значению - 0xFC. Но на этом еще не все, осталось еще одно незаконченное действие, чтобы узнать внутренние значение, нужно выполнить код ниже, применяем его, так как тип данных integer:
void * player = getentity(....);
int health = *(int*)((DWRD)player + 0xFC);
print( health );
5
5
6 комментариев
9 230 просмотров