Модификация игры ASM/C++ Часть 1.
Всем, привет!
На сегодняшний день когда в мире много различных игр, так же много игроков которые в них играют, большинство этих игроков хотят упростить прохождение конкретной игры. Они используют различные трейнеры, читы, программы такие как: Cheat Engine, ArtMoney. Эти программы позволяют изменять значения в памяти игры. Например у игрока 100 золота, с помощью этих программ он может изменить это количество на любое другое. Но есть так же люди которые разрабатывают читы к играм, им намного интересней разобраться как игра работает(взглянуть на её изнутри) нежели играть в эту игру:) Здесь я хочу поделится своим опытом в модификации игр с новичками которые хотят научится создавать читы к играм, а так же изменить что-то в игре. Я буду показывать именно пример модификации(изменения игры), внедрение своего кода в игру. Скажу сразу я не профессионал в этом деле. Так же хочу услышать советы людей которые многое прошли в обратной разработке приложений. Для начала нужно сказать про приложения которые будут помогать в создании модификации.
В качестве примера я буду писать модификацию для игры Plants vs Zombies. Первое что нам надо сделать это скачать и проанализировать игру. Запустим программу PEID и выберем EXE файл игры. http://s017.radikal.ru/i434/1607/f2/4f5fc733ae93.png На скриншоте видно что игра написана на VC++, а так же то что она не упакована и не защищена протекторами. Следующий этап это написание своей DLL и подключение её к игре. Создадим в Visual Studio проект Win32 DLL. И напишем следующий код: PHP код:
http://s017.radikal.ru/i440/1607/d6/84377c1dafdd.png Теперь запускаем CFF Explorer и подключаем нашу DLL к игре. На всякий случай сделаем backup нашего EXE, если что-то пойдет не так чтобы можно было восстановить все в исходное состояние. Открываем в этой программе PlantsVsZombies.exe и переходим на вкладку Import Adder. Нажимаем на кнопку Add и выбираем нашу DLL. Внизу появится список функций которые экспортируются, выбираем DllMain и нажимаем Import By Name. http://s017.radikal.ru/i429/1607/0e/f4c4f857eb25.png После чего нажимаем на Rebuild Import Table. И сохраняем приложение. Запустим игру, и увидим окошко которые мы создали в DLL. http://s019.radikal.ru/i632/1607/ec/fc4394787224.png Но при закрытии игры вылетает очень страшная ошибка:) Runtime error R6002 floating point not loaded http://s018.radikal.ru/i522/1607/cd/4baa13b2bcd8.png Причина ее возникновения следующая: программа была скомпилирована с Microsoft.VC80.CRT и в ней проверяются атрибуты секций. Которые мы изменили Для исправления этой проблемы нужно пропатчить в исполняемом файле функцию __fptrap, которая и отвечает за появление этого сообщения об ошибке. Запускаем дизассемблер IDA Pro и ждем когда она проанализирует всю игру. Находим функцию __fptrap. Код:
.text:006B5B17 __fptrap proc near ; DATA XREF: .data:off_718908 Код:
006B5B17 6A 02 E8 76 62 FE FF 59 C3 8B FF 55 8B EC 83 EC j.шvb¦*Y+Л*UЛьГь И находим нашу последовательность байт, можно посредством поиска, а можно с помощью IDA Pro посмотреть расположение этих байт в исполняемом файле. http://s018.radikal.ru/i517/1607/92/d4b36b0878ff.png http://s009.radikal.ru/i308/1607/05/b27151ab697e.png И видим что в файле они находятся по смещению 002B4F17, переходим в WinHex по этому смещению. И изменяем наш байтик на C3 90. Нопить не обязательно, можно просто изменить первый байт. Теперь сохраняем изменения. Проверим что мы записали с помощью IDA Pro. Запустим снова анализ приложения. Код:
.text:006B5B17 nullsub_4 proc near ; DATA XREF: .data:off_718908 Если нужен исходник: PlantsVsZombies.rar PlantsVsZombies игра Скоро напишу продолжение... |
Текущее время: 02:23. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot