- 20.06.2022
- 23 845
- 218
- 36
- Награды
- 10
- Пол
- Муж.
Репутация:
- Автор темы
- Администратор
- Модератор
- Команда форума
- #1
Сегодня я научу вас разблокировать Dota Plus парой простых движений. Разумеется, только client-side.
Нам понадобится IDA + плагин Class Informer.
Открываем в IDA client.dll => Class Informer. Ищем что-то очевидное с упоминанием плюса.
Выглядит легитимно. Кликаем, смотрим. Там две функции. Сразу скажу, что первая нам не нужна. Да она и не выглядит обещающе.
Смотрим псевдокод второй.
Очевидный возврат другой функции, с передачей в неё this (CDOTAPlusController). Смотрим её код.
Первым делом попробуем понять, что такое этот qword_18379CD68.
Запускаем доту, открываем любой на выбор дебаггер. Я предпочитаю работать в Cheat Engine, так что рассказывать буду на его примере.
Открываем Memory View, жмем Ctrl+G, вводим "client.dll+18BD6B0" (имя функции из IDA, без sub_18).
Пробуем поставить бряху (Ctrl+F5). Тыкаем туда-сюда; Понимаем, что ничего не происходит.
Не буду ходить вокруг да около -- проверка статуса подписки происходит перед самой загрузкой главного меню доты.
Если ты в CE, то закрой доту не закрывая Memory View; Запусти доту еще раз, и как можно быстрей вернись в CE, выбери процесс доты, и в Memory View нажми Ctrl+F5.
Если в Memory View у тебя явно не наша функция -- нажми Ctrl+G, клавишу "вверх" -- это выберет предыдущий адрес. Перейди на него, поставь бряху.
Вот он наш qword_18379CD68 -- выделен синим.
Кликаем по опкодам, копируем адрес. Жмем Ctrl+D, вставляем адрес, жмем Ctrl+N. Видим, что это Pointer to instance of ConVar.
Пока ничего интересного. Смотрим окоды дальше. Чуть ниже идет mov ecx,[rax+58], т.е. ConVar + 0x58;
Смотрим, что там. У моего нового аккаунта есть подписка (как и у всех новых акков), и там лежит 1.
Тут хорошо бы иметь старый аккаунт, где подписки нет, но я уже всё сделал за вас.
Перезаходим в другой акк, снова проделываем всё выше описанное, смотрим ConVar + 0x58. Там лежит 0.
Выглядит многообещающе. Очевидный вариант -- заменить mov ecx,[rax+58] на mov ecx, 00000001.
Но придется нопать, да и вообще выглядит, как костыль. Лучше еще раз посмотрим на наш ConVar.
На нашу удачу, на оффсете 0x70 так удобно лежит нужная нам единичка. Сразу скажу, что протестировал тонну разных вариантов -- там всегда 1.
Пробуем заменить mov ecx,[rax+58] на mov ecx,[rax+70]. Убираем бряху, жмем Ctrl+F9.
Да, это было довольно просто.
Что же со всем этим делать? Ну тут куча вариантов:
Добавлять это в свой интернал и патчить на рантайме.
Сделать небольшой экстернал. Например, ждать запуска доты и загрузки ей client.dll, потом патчить.
Нам понадобится IDA + плагин Class Informer.
Открываем в IDA client.dll => Class Informer. Ищем что-то очевидное с упоминанием плюса.
Выглядит легитимно. Кликаем, смотрим. Там две функции. Сразу скажу, что первая нам не нужна. Да она и не выглядит обещающе.
Смотрим псевдокод второй.
Очевидный возврат другой функции, с передачей в неё this (CDOTAPlusController). Смотрим её код.
Первым делом попробуем понять, что такое этот qword_18379CD68.
Запускаем доту, открываем любой на выбор дебаггер. Я предпочитаю работать в Cheat Engine, так что рассказывать буду на его примере.
Открываем Memory View, жмем Ctrl+G, вводим "client.dll+18BD6B0" (имя функции из IDA, без sub_18).
Пробуем поставить бряху (Ctrl+F5). Тыкаем туда-сюда; Понимаем, что ничего не происходит.
Не буду ходить вокруг да около -- проверка статуса подписки происходит перед самой загрузкой главного меню доты.
Если ты в CE, то закрой доту не закрывая Memory View; Запусти доту еще раз, и как можно быстрей вернись в CE, выбери процесс доты, и в Memory View нажми Ctrl+F5.
Если в Memory View у тебя явно не наша функция -- нажми Ctrl+G, клавишу "вверх" -- это выберет предыдущий адрес. Перейди на него, поставь бряху.
Вот он наш qword_18379CD68 -- выделен синим.
Кликаем по опкодам, копируем адрес. Жмем Ctrl+D, вставляем адрес, жмем Ctrl+N. Видим, что это Pointer to instance of ConVar.
Пока ничего интересного. Смотрим окоды дальше. Чуть ниже идет mov ecx,[rax+58], т.е. ConVar + 0x58;
Смотрим, что там. У моего нового аккаунта есть подписка (как и у всех новых акков), и там лежит 1.
Тут хорошо бы иметь старый аккаунт, где подписки нет, но я уже всё сделал за вас.
Перезаходим в другой акк, снова проделываем всё выше описанное, смотрим ConVar + 0x58. Там лежит 0.
Выглядит многообещающе. Очевидный вариант -- заменить mov ecx,[rax+58] на mov ecx, 00000001.
Но придется нопать, да и вообще выглядит, как костыль. Лучше еще раз посмотрим на наш ConVar.
На нашу удачу, на оффсете 0x70 так удобно лежит нужная нам единичка. Сразу скажу, что протестировал тонну разных вариантов -- там всегда 1.
Пробуем заменить mov ecx,[rax+58] на mov ecx,[rax+70]. Убираем бряху, жмем Ctrl+F9.
Да, это было довольно просто.
Что же со всем этим делать? Ну тут куча вариантов:
Добавлять это в свой интернал и патчить на рантайме.
Сделать небольшой экстернал. Например, ждать запуска доты и загрузки ей client.dll, потом патчить.
Последние темы в этом разделе:
- [Udemy] Paul Chin - Гейм Хакинг: Основы взлома игр с Cheat Engine (2021)
- [Infinite Skills] Реверс-инжиниринг и разработка эксплойтов. Часть 1
- Скрипт Лоадер [Key,UID,Auth - System]
- Скрипт Hwid Checker + анимации + ключ к Hwid + сброс Hwid
- Скрипт Hwid Checker + ключ привязка к Hwid + отправка в телеграм
- Скрипт Hwid Checker
- Приватный Курс по реверс-инжирингу - Курс от colby57
- Курс по реверс-инжирингу - Создание читов для игр
- Как создать chams в Unity
- Как в EFT получить информацию о игроке (K/D, LVL, etc...)