-
Автор темы
- #1
Добрый день, с вами 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, поговорим об нетварах, попробуем что-нибудь нарисовать =)
[Tutorial #1]: Получение структуры Entity
Вот и настала первая часть урока по созданию читов на Dota 2. Что нам нужно в первую очередь, дабы чит и вправду считался читом? - Получать полезную информацию. Что самое полезное может быть в доте? Информация об сущностях \ игроках. Где она хранится? Правильно в структуре сущности (CBaseEntity), указатель на которую мы и научимся получать в нашем первом уроке.
Необходимое программное обеспечение на сегодня:
Нам понадобится Cheat Engine (или любой аналог, даже любой x64 дебагер), кто во что горазд.
На примере CE я покажу как искать то, что нам нужно.
Объяснять я буду популярно, простыми словами, грубо, но понятно объясняя суть работы всего происходящего.
Что такое "структура сущности"?
В структуре энтити лежат "ништяки". Так что это и как оно устроенно?
Очень простыми словами это структура, в которой описаны и хранятся параметры "объекта", например его имя, тип, положение, адреса на что-либо что с ней связано и т.п.
В движках idTech, GoldSrc, Source (а так-же многих других) для удобства есть список указателей на Entity - EntityList. Многие из вас пастят свои хацки для CS:GO, откройте какой-нибудь исходник External чита, сразу станет ясно о чём я говорю: чит ищет указатель на EntityList, потом бегает в цикле по адресам, хранимым в нём и получают информацию об игроке. Тут принцип точно такой-же.
Давайте попробуем найти EntityList в доте?
Стартуем дотку, подключаемся к ней Cheat Engine'ом:
Стартуем либо в лобби, либо в просто проверке героя, в нашем случае это роли никакой не играет. Начнём. Так-как структура Entity содержит информацию, попробуем найти энтити своего героя, самый простой способ - по его мане. Вбиваем кол-во маны, тип вещественный 4 байта, жмякаем на поиск.
Переключаем поиск на 8 байт, целочисленное, ставим галку на HEX и ищем все адреса, указывающие на нашу Entity (то, что было у нас в регистре RCX)
У меня нашло 125 адресов, не страшно, самый ленивый метод это посмотреть кто читает его, а так-как мы знаем, что наш адрес будет находится в EntityLst, то нам покажут примерно: mov Z,[X+Y*I], где I это смещение в EntityList, которое указывает на новую энтити. Клацаем на каждую в надежде увидеть это:
Так вот, мы нашли то, что скорее всего и является нашим EntityList (регистр RAX):
Пробуем теперь подставить всю цепочку из указателей: [[[client.dll + offset] + Ident * 0x8] + 0xA0C] = Наша мана.
[Ident * 0x8] в моей ветке выше это и есть то смещение в EntityList, которое указывает на новую Entity, однако, в CE отображается смещение как каждые 8 байт, что не верно, меняйте на 0x30 (я поставил 0x10).
В итоге побрутив я нашёл что по [0x1E*0x10] находится указатель на CBaseEntity нашего героя.
Для подтверждения создадим ещё героя и подбирая Ident попробуем найти и его.
Смотрим есть ли какие-нибудь строки или набор уникальных байт рядом с нашим указателем, дабы сделать сигнатурку, и у нас уже есть поиск указателя EntityList который не сломается после обновы Dota 2.
Что нас будет ждать в T#2?
Сделаем сигнатурный поиск на LocalPlayer, поговорим об нетварах, попробуем что-нибудь нарисовать =)
Последнее редактирование: