Модификация игры ASM/C++ Часть 1. - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 27.07.2016, 13:59   #1
Аватар для VOLKyiv
Пользователь

Автор темы (Топик Стартер) Модификация игры ASM/C++ Часть 1.

Всем, привет!
На сегодняшний день когда в мире много различных игр, так же много игроков которые в них играют, большинство этих игроков хотят упростить прохождение конкретной игры.
Они используют различные трейнеры, читы, программы такие как: Cheat Engine, ArtMoney. Эти программы позволяют изменять значения в памяти игры.
Например у игрока 100 золота, с помощью этих программ он может изменить это количество на любое другое.

Но есть так же люди которые разрабатывают читы к играм, им намного интересней разобраться как игра работает(взглянуть на её изнутри) нежели играть в эту игру

Здесь я хочу поделится своим опытом в модификации игр с новичками которые хотят научится создавать читы к играм, а так же изменить что-то в игре.
Я буду показывать именно пример модификации(изменения игры), внедрение своего кода в игру.
Скажу сразу я не профессионал в этом деле. Так же хочу услышать советы людей которые многое прошли в обратной разработке приложений.

Для начала нужно сказать про приложения которые будут помогать в создании модификации.
  1. Дизассемблер - IDA Pro + Hex Rays;
  2. Cheat Engine - для поиска значений в памяти игры;
  3. CFF Explorer - для подключения своей DLL к приложениям; (Об этом чуть позже);
  4. Писать модификацию я буду на VC++ с использованием WINAPI;
  5. PEID - анализатор исполняемых файлов. Хорошо определяет многие упаковщики и протекторы; (Можно еще использовать DIE);
  6. ReClass - для удобного создания классов разных объектов в игре;
  7. WinHex - для патчинга приложений.
Этого достаточно для написания своей первой модификации.

В качестве примера я буду писать модификацию для игры Plants vs Zombies.
Первое что нам надо сделать это скачать и проанализировать игру. Запустим программу PEID и выберем EXE файл игры.



На скриншоте видно что игра написана на VC++, а так же то что она не упакована и не защищена протекторами.

Следующий этап это написание своей DLL и подключение её к игре.
Создадим в Visual Studio проект Win32 DLL.

И напишем следующий код:

PHP код:
__declspec(dllexportBOOL APIENTRY DllMain(HMODULE hModuleDWORD ul_reason_for_callLPVOID lpReserved)
{
    switch (
ul_reason_for_call)
    {
    case 
DLL_PROCESS_ATTACH:
        
MessageBox(NULL_T("DLL PROCESS ATTACH"), _T("DLL"), MB_OK MB_ICONINFORMATION);
        break;
    case 
DLL_THREAD_ATTACH:
    case 
DLL_THREAD_DETACH:
    case 
DLL_PROCESS_DETACH:
        break;
    }
    return 
TRUE;

Компилируем с конфигурацией Release. И копируем DLL в папку с игрой.



Теперь запускаем CFF Explorer и подключаем нашу DLL к игре.
На всякий случай сделаем backup нашего EXE, если что-то пойдет не так чтобы можно было восстановить все в исходное состояние.
Открываем в этой программе PlantsVsZombies.exe и переходим на вкладку Import Adder.
Нажимаем на кнопку Add и выбираем нашу DLL. Внизу появится список функций которые экспортируются, выбираем DllMain и нажимаем Import By Name.



После чего нажимаем на Rebuild Import Table. И сохраняем приложение.
Запустим игру, и увидим окошко которые мы создали в DLL.



Но при закрытии игры вылетает очень страшная ошибка
Runtime error R6002 floating point not loaded



Причина ее возникновения следующая: программа была скомпилирована с Microsoft.VC80.CRT и в ней проверяются атрибуты секций. Которые мы изменили
Для исправления этой проблемы нужно пропатчить в исполняемом файле функцию __fptrap, которая и отвечает за появление этого сообщения об ошибке.
Запускаем дизассемблер IDA Pro и ждем когда она проанализирует всю игру.
Находим функцию __fptrap.

Код:
.text:006B5B17 __fptrap        proc near               ; DATA XREF: .data:off_718908
.text:006B5B17                                         ; .data:off_71890C ...
.text:006B5B17                 push    2
.text:006B5B19                 call    __amsg_exit
.text:006B5B1E                 pop     ecx
.text:006B5B1F                 retn
.text:006B5B1F __fptrap        endp
Следующее что нам надо сделать так это изменить её действие например забить всё NOP'ами или сделать вначале вместо push 2, сразу же выход retn.

Код:
006B5B17  6A 02 E8 76 62 FE FF 59  C3 8B FF 55 8B EC 83 EC  j.шvb¦*Y+Л*UЛьГь
Байты 6A 02 и есть наш push 2, заменим 6A на C3. Для этого воспользуемся программой WinHex. И откроем наше приложение PlantsVsZombies.exe.

И находим нашу последовательность байт, можно посредством поиска, а можно с помощью IDA Pro посмотреть расположение этих байт в исполняемом файле.





И видим что в файле они находятся по смещению 002B4F17, переходим в WinHex по этому смещению. И изменяем наш байтик на C3 90. Нопить не обязательно, можно просто изменить первый байт. Теперь сохраняем изменения.

Проверим что мы записали с помощью IDA Pro. Запустим снова анализ приложения.

Код:
.text:006B5B17 nullsub_4       proc near               ; DATA XREF: .data:off_718908
.text:006B5B17                                         ; .data:off_71890C ...
.text:006B5B17                 retn
.text:006B5B17 nullsub_4       endp
.text:006B5B17
.text:006B5B17 ; ---------------------------------------------------------------------------
.text:006B5B18                 db 2
.text:006B5B19 ; ---------------------------------------------------------------------------
.text:006B5B19                 call    __amsg_exit
.text:006B5B1E                 pop     ecx
.text:006B5B1F                 retn
Теперь осталось лишь проверить игру на наличие этой ошибки. Запустим её и убедимся что ошибки больше нет.

Если нужен исходник:
PlantsVsZombies.rar
PlantsVsZombies игра

Скоро напишу продолжение...
VOLKyiv вне форума Ответить с цитированием
Сказали спасибо:
Ответ

Метки
модификация игры, создание чита


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модификация клиента skew Blade & Soul 4 12.12.2014 19:41
Giran 2.0. Модификация Respect Курилка / Yak floor 30 29.07.2012 21:30
Визуальная часть игры Ajax52 Документация 5 04.01.2012 21:10
Часть Клиента и часть серверная DRAGYN Lineage II 3 20.02.2011 00:25


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 14:53. Часовой пояс GMT +3.

Вверх