[T#1 DOTA] Получение CBaseEntity, поиск EntityList

Пользователь
Статус
Оффлайн
Регистрация
7 Сен 2014
Сообщения
61
Реакции[?]
86
Поинты[?]
0
Добрый день, с вами Ve4niySooN.
[Tutorial #1]: Получение структуры Entity


Вот и настала первая часть урока по созданию читов на Dota 2. Что нам нужно в первую очередь, дабы чит и вправду считался читом? - Получать полезную информацию. Что самое полезное может быть в доте? Информация об сущностях \ игроках. Где она хранится? Правильно в структуре сущности (CBaseEntity), указатель на которую мы и научимся получать в нашем первом уроке.

Необходимое программное обеспечение на сегодня:
Нам понадобится Cheat Engine (или любой аналог, даже любой x64 дебагер), кто во что горазд.
На примере CE я покажу как искать то, что нам нужно.

Объяснять я буду популярно, простыми словами, грубо, но понятно объясняя суть работы всего происходящего.

Что такое "структура сущности"?
В структуре энтити лежат "ништяки". Так что это и как оно устроенно?

Очень простыми словами это структура, в которой описаны и хранятся параметры "объекта", например его имя, тип, положение, адреса на что-либо что с ней связано и т.п.
Брошенная ветка, летящий кулак свена, крип, кура, фонтан, башня и всё в таком роде - это Entity.

В движках idTech, GoldSrc, Source (а так-же многих других) для удобства есть список указателей на Entity - EntityList. Многие из вас пастят свои хацки для CS:GO, откройте какой-нибудь исходник External чита, сразу станет ясно о чём я говорю: чит ищет указатель на EntityList, потом бегает в цикле по адресам, хранимым в нём и получают информацию об игроке. Тут принцип точно такой-же.


Давайте попробуем найти EntityList в доте?

Стартуем дотку, подключаемся к ней Cheat Engine'ом:

Стартуем либо в лобби, либо в просто проверке героя, в нашем случае это роли никакой не играет. Начнём. Так-как структура Entity содержит информацию, попробуем найти энтити своего героя, самый простой способ - по его мане. Вбиваем кол-во маны, тип вещественный 4 байта, жмякаем на поиск.
Качаем скил, кастуем, мана меняется - ставим на паузу и отсеиваем в ce весь ненужный мусор.
Было найдено 4 адреса, первые два из которых - это не от самого игрока, а от игрового манабара (переключитесь на крипа с маной, значение изменится); далее попробуем узнать кто читает адрес вторых двух.
В регистре RCX у нас будет находится адрес нашей Entity (выделено стрелочкой), а A0C это смещение от этого адреса, которое указывает на нашу ману.
Переключаем поиск на 8 байт, целочисленное, ставим галку на HEX и ищем все адреса, указывающие на нашу Entity (то, что было у нас в регистре RCX)

У меня нашло 125 адресов, не страшно, самый ленивый метод это посмотреть кто читает его, а так-как мы знаем, что наш адрес будет находится в EntityLst, то нам покажут примерно: mov Z,[X+Y*I], где I это смещение в EntityList, которое указывает на новую энтити. Клацаем на каждую в надежде увидеть это:
То, что в Value имеет зелёный цвет - пропускайте, зря время потратите, а всё остальное сохраняем. Их будет несколько, сразу скажу что если RCX = 0, то это указатель на локального игрока (только вас, других энтитей там не найдёте), по этому если ваша цель только EntityList, пропускайте.

Так вот, мы нашли то, что скорее всего и является нашим EntityList (регистр RAX):
Вобьём его адрес в поиск и увидим зелёный адрес - статичный указатель (до следующей обновы client.dll - он не поменяется).

Пробуем теперь подставить всю цепочку из указателей: [[[client.dll + offset] + Ident * 0x8] + 0xA0C] = Наша мана.

[Ident * 0x8] в моей ветке выше это и есть то смещение в EntityList, которое указывает на новую Entity, однако, в CE отображается смещение как каждые 8 байт, что не верно, меняйте на 0x30 (я поставил 0x10).
В итоге побрутив я нашёл что по [0x1E*0x10] находится указатель на CBaseEntity нашего героя.

Для подтверждения создадим ещё героя и подбирая Ident попробуем найти и его.
Если показалась мана другого Entity - значит всё сделали правильно, у нас действительно получилось найти EntityList.

Смотрим есть ли какие-нибудь строки или набор уникальных байт рядом с нашим указателем, дабы сделать сигнатурку, и у нас уже есть поиск указателя EntityList который не сломается после обновы Dota 2.

Что нас будет ждать в T#2?
Сделаем сигнатурный поиск на LocalPlayer, поговорим об нетварах, попробуем что-нибудь нарисовать =)
 
Последнее редактирование:
Разработчик
Статус
Оффлайн
Регистрация
23 Авг 2017
Сообщения
171
Реакции[?]
474
Поинты[?]
1K
Всё на самом деле можно в разы проще получать, но как гайд по реверсингу - неплохой.
 
BRUTEFORCE
Начинающий
Статус
Оффлайн
Регистрация
12 Авг 2017
Сообщения
38
Реакции[?]
20
Поинты[?]
0
Круто, я просто думал что уже все загнулось, но нет)
Спасибо)
 
return 0;
Забаненный
Статус
Оффлайн
Регистрация
6 Мар 2017
Сообщения
405
Реакции[?]
237
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ЕБАНУЦА ДОЖДАЛИСЬ :pogchamp:
 
Пользователь
Статус
Оффлайн
Регистрация
7 Сен 2014
Сообщения
61
Реакции[?]
86
Поинты[?]
0
https://qweme.dev
Пользователь
Статус
Оффлайн
Регистрация
25 Май 2022
Сообщения
165
Реакции[?]
87
Поинты[?]
21K
2022
ничего не получилось, выводит либо 0 либо ???
посмотри на дату туториала, прошло почти 5лет, а так советую посмотреть гайд от либералиста, он попрженему (вроде как) актуален.
 
Сверху Снизу