Как изменять данные в игре или как работают читы?
Как я программно могу менять значения в другой программы\игры? ведь нет никакого изначального «api». я подозреваю, что изменения происходят на низком уровне, то есть изменяются данные в памяти.. но как они тогда узнают адреса? и что именно этот адрес принадлежит именно этой программе\игре??
- алгоритм
- reverse-engineering
Отслеживать
задан 19 июл 2017 в 15:30
119 2 2 серебряных знака 4 4 бронзовых знака
Что касается Windows, то советую почитать Рихтера — «Windows для профессионалов», в частности «Глава 22 — Внедрение DLL и перехват API-вызовов». Если коротко, то вы можете внедриться в память чужого приложения и выполнять код из его адресного пространства: wiki: DLL injection. По Unix системам ничего сказать не могу.
19 июл 2017 в 15:58
Читайте про виртуальное адресное пространство. Давно уже в юзермоде нет проблемы попасть в «чужие» адреса.
19 июл 2017 в 16:15
«и что именно этот адрес принадлежит именно этой программе\игре??» — такого вопроса в ОС с виртуальной памятью не существует. Виртуальные адреса не могут «принадлежать именно этой программе\игре». Физические могут, но в данном вопросе это не нужно.
20 июл 2017 в 0:21
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
«я подозреваю, что изменения происходят на низком уровне»
Верно подозреваете:) Но есть немного и другие штучки.
А так, давайте рассмотрим одну онлайн игру. Смысл такой, есть игроки тоесть танки. У танков есть определенное действие, например стрельба, передвижение.
Выходит: 1 программа сервер, которой мы отправляем данные, а она обрабатывает их. И неограниченное количество клиентов которые эти данные и шлют(перемещение танков).
В клиент программе присутствуют обычные нам ограничения. Например: вы можете выстрелить только 1 раз в 2 секунды. Тоесть пользователь нажал на пробел->проверка на таймер->если все ок то отправляем серверу комманду что мы выстрелили.
Вот пример небольшой игры. Как создать под нее чит? Требуется детально продебагить код программы, ее действия. Существуют множество утилит делающие это, они используя низкоуровневое апи могут определить какие программа вызывала функции, что писала в переменные.
И искать изьяны. Например: если клиент при нажатии на клавишу вперед отправляет напрямую кординаты нахождения танка, то почему-бы не отправить свои нужные кординаты:) Или если клиент отправляет с какой скоростью движется танк, определяя природные условия, то почемубы не отправить скорость нужную. Вот на таких недочетах и строятся читы.
Если игра оффлайн: дело становится проще, мы имеем лишь 1 прогу. Мы сможем также продебагить программу, продизасемблировать (тоесть разобрать прогу на исходный код) и установить нужные нам значения, например человек может подниматся по лестнице с такой-то нужной нам скоростью.
Как редактировать код игры, будучи непосредственно в этой игре?
Всем привет. Да, вопрос задан тупо, понимаю!
Нужно реализовать игре текстовое поле, в котором пользователь будет писать код, нажимать на кнопку «Выполнить», и код выполнялся в игре.
Как это реализовать? Куда копать?
Спасибо.
Например:
На экране сфера.
Пользователь вводит:
GameObject.Find("UserButtonInput(Clone)"); transform.position = Vector2.MoveTowards(transform.position, Target.position, step);
Нажимает на кнопку «Выполнить».
Сфера движеться.
- Вопрос задан более трёх лет назад
- 490 просмотров
Динозавр Chrome: Чит на скорость + бессмертие
Браузер с собственной игрой пасхалкой — это уже тренд. В Firefox — пинг-понг, в Edge — серфинг, в Chrome — динозавр. Однако для последнего существуют чит коды, которые позволят сделать игру интереснее.
ЧТО НУЖНО ДЕЛАТЬ:
1. Откройте в браузере Chrome ссылку chrome://dino.
2. Нажмите правой кнопкой мыши на странице и выберите пункт «Просмотреть код». Либо нажмите кнопку «F12».
3. Перейдите во вкладку «Console».
4. Введите команду Runner.instance_.setSpeed(1000) и нажмите «Enter».
После этого, скорость динозавра будет очень быстрой. Вместо 1000 можете указать другое значение.

Прохождение сквозь препятствия в игре с динозавриком в Google Chrome
Наверняка вы не раз наталкивались на эту мини-игру при потере интернет-соединения. В браузере игра доступна по ссылке:
Вот вам небольшая читерская команда к игре:
1. Откройте в браузере Chrome выше указанную ссылку.
2. Нажмите правой кнопкой мыши на странице и выберите пункт «Просмотреть код». Либо нажмите кнопку «F12».
3. Перейдите во вкладку «Console».
4. Введите команду Runner.instance_.gameOver = function()<>; и нажмите «Enter».
После этого, динозаврик будет спокойно пробегать сквозь все препятствия.
Статья Как изменить код программы без исходника
Бывают ситуации, когда под рукой нет исходника, а Вам срочно требуется внести изменения в коде, написанной ранее Вами программы. Например, дано приложение «TextEdit.exe» — текстовый редактор, написанный на языке c#, который имеет простой пользовательский интерфейс, состоящий из двух кнопок и текстового поля.
При нажатии на кнопку “Чтение” из файла 1.txt считываются и выводятся все строки в окно элемента управления textBox, а при нажатии на кнопку “Запись” данные из текстового поля сохраняются в файле 2.txt
Для хранения путей в программе используются две текстовых переменных: filePathIn и filePathOut
Прошёл год, как программа была написана и отдана заказчику, но вдруг ему потребовалось изменить имя папки, в которой должны храниться оба файла, c 123 на Text. Задача простая, но прошло уже много времени, и исходник был потерян, что делать в такой ситуации?
Для начала вспомним, как образуется .NET сборка
Полученный в результате компиляции файл (сборка) содержит внутри себя метаданные, манифест, код на языке IL (MSIL).
Метаданные — описывают типы данных и их члены
Манифест описывают саму сборку
MSIL код, полученный в результате компиляции файла исходного кода
То есть перед вами тот же исходник, только в другом формате. И для того, чтобы поработать с ним, Вам понадобиться специальный инструмент, который позволяет просматривать и редактировать данные внутри сборки.
Дизассемблер ILDASM
Данный инструмент входит состав пакета .Net Framework SDK, который является бесплатным и устанавливается вместе с Visual Studio (включая Express версию). С помощью него вы можете, как просматривать внутреннее содержимое сборки, так и изменять его.
Для удобства работы создадим отдельную папку, например: ”c:\newasm” и поместим в неё файл TextEdit.exe
Затем в меню “Пуск” открываем папку: «Visual Studio Tools»
Запускаем командную строку разработчика
Откроется консоль, вводим первую команду: ildasm. Для выполнения команды нажмите клавишу Enter.
Появиться главное окно программы.
Переместим файл сборку TextEdit.exe в окно дизассемблера ILASM, в результате отобразиться её внутреннее содержимое.
Убедимся, что в ней содержатся нужные нам данные (пути к файлам).
Два поля на месте, теперь взглянем на метаданные.
Для доступа к метаданным Вы так же можно использовать сочетание горячих клавиш: Ctrl+M. Затем с помощью кнопки Find, найдём имя одного из файлов.
Как видно присутствуют оба. Пути найдены, и теперь их нужно изменить, но все данные, в текущий момент, доступны только для просмотра, и изменить их в самой дизассемблере нельзя, поэтому воспользуемся второй возможностью данной программы и выгрузим содержимое сборки в файл.
Выгрузка данных
Выберите пункт меню File -> Dump
Появится меню. В данном примере, все пункты меню оставим без изменений и просто нажмём кнопку OK.
Появится диалоговое окно
Выберем ранее созданную папку “newasm”, затем укажем имя и тип файла и нажмём на кнопку “Сохранить”
В результате в папке “newasm” должно появиться несколько новых файлов
Закрываем окно ildasm, а так же удаляем файл Textedit.exe, больше он нам не понадобиться. Теперь нас интересует полученный файл texted.il и для начала откроем его любым текстовым редактором, например блокнотом.
Снова воспользуемся поиском (Ctrl+F)
Так же видим найденные строки, которые содержат пути к файлам.
Изменим текущее имя папки 123 на новое название Text, для обоих файлов
Сохраняем внесённые изменения и закрываем блокнот.
Ассемблер ILASM
Изменения внесены и теперь нужно преобразовать файл txted.il обратно в исполняемый файл (.exe) Для этого нам понабиться второй инструмент ILASM, ассемблер, который так же входит в состав пакета SDK и не требует отдельной установки.
файл (.il) -> компилятор ilasm = сборка (.exe и .dll)
Возвращаемся в консоль
Вводим вторую команду:
ilasm /exe c:\newasm\txted.il /output=c:\newasm\textEdit.exe
Первый параметр: /exe — указывает компилятору, что на выходе мы хотим получить файл с расширением .exe. Затем указываем файл, который содержит MSIL-код. С помощью второго параметра /output — указываем имя и расширение нового файла.
Если компиляции прошла успешно, то в окне консоли вы должны увидеть сообщение, которое выделено на картинке, а внутри папке “newasm” должен появиться новый файл TextEdit.exe, который теперь уже содержит новые пути к файлам.
Вот таким не сложным способом можно выйти из данной ситуации, при этом не имея исходника под рукой.
- Cоздание файла dll
- Программное выравнивание текста по ширине
- Как удалить параметр реестра Windows
Вложения
1554325668160.png
16,8 КБ · Просмотры: 485
1554325822178.png
8,4 КБ · Просмотры: 552
The Codeby
Well-known member
- Сообщения 4 656
- Реакции 6 538
The Codeby
Well-known member
30.12.2015 4 656 6 538
Комментарии, перенесенные из блога
Сергей
Четверг на 02:09
Здравствуйте, когда пытаюсь открыть файл exe в редакторе LD DASM у меня появляется ошибка «отсутствует допустимый заголовок CLR поэтому дизассемблирование невозможно» что это? и можно как нибудь исправить?
admin
Пятница на 10:09
Программа (файл) на каком языке написана?
Иван
Суббота на 10:09
Добрый день. Такая же ситуация. Пытаюсь открыть файл exe в редакторе LD DASM у меня появляется ошибка «отсутствует допустимый заголовок CLR поэтому дизассемблирование невозможно». Файл написан на Delphi.
admin
Воскресенье на 09:09
Привет.
Эта утилита предназначена только для просмотра кода написанного на языке IL (MSIL) — это промежуточный язык, в который компилируется код .NET языков. Полученный в результате компиляции файл (сборка) содержит CLR заголовок. Затем, во время запуска приложения, выполняется вторая компиляция, которая превращает полученный код IL в машинный.
В дельфи сборка не содержит CLR заголовок и код, если не ошибаюсь, сразу преобразуется в машинный.
Иван
Понедельник на 12:09
А как-то нормально можно посмотреть код, если есть уже окончательный exe и несколько dll проекта?
admin
Понедельник на 09:09 ПП
Что значит «нормально посмотреть код» ?
Иван
Среда на 03:09 ПП
Ну чтобы взять код себе в другой проект
admin
Четверг на 11:09
Есть вроде какие-то, но не помню названия, потому что не использую их.
Анатолий
Четверг на 12:02 ПП
Можете, помочь как я хочу переписать лаунчер для игры, что бы изменить проверку файлов но не могу никак открыть его. Пробывал через ресторатор 2007 но оно не может прочитать пату файлов точнее отобразить язык.