1. Привет Гость, в нашем магазине проходит акция! Смотри эту тему.
    Так же цена на VIP снижена!

Модификация игры ASM/C++ Часть 1.

Тема в разделе "Уроки, Создание читов и трейнеров, исходники", создана пользователем RedYu, 25 июл 2016.

  1. Оффлайн

    RedYu

    На форуме с:
    25 июл 2016
    Сообщения:
    6
    Симпатии:
    4
    Баллы:
    2
    Пол:
    Мужской
    Всем, привет!
    На сегодняшний день когда в мире много различных игр, так же много игроков которые в них играют, большинство этих игроков хотят упростить прохождение конкретной игры.
    Они используют различные трейнеры, читы, программы такие как: Cheat Engine, ArtMoney.
    Эти программы позволяют изменять значения в памяти игры.
    Например у игрока 100 золота, с помощью этих программ он может изменить это количество на любое другое.
    Но есть так же люди которые разрабатывают читы к играм, им намного интересней разобраться как игра работает(взглянуть на её изнутри) нежели играть в эту игруsmile-z

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

    Для начала нужно сказать про приложения которые будут помогать в создании модификации.
    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 файл игры.

    [​IMG]

    На скриншоте видно что игра написана на 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 в папку с игрой.

    [​IMG]

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

    [​IMG]

    После чего нажимаем на Rebuild Import Table. И сохраняем приложение.

    Запустим игру, и увидим окошко которые мы создали в DLL.

    [​IMG]

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

    [​IMG]

    Причина ее возникновения следующая: программа была скомпилирована с Microsoft.VC80.CRT и в ней проверяются атрибуты секций. Которые мы изменилиsmile-z
    Для исправления этой проблемы нужно пропатчить в исполняемом файле функцию __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 посмотреть расположение этих байт в исполняемом файле.

    [​IMG]

    [​IMG]

    И видим что в файле они находятся по смещению 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 игра
     
    Rango нравится это.
  2.  
  3. Оффлайн

    StasBess рядовой

    На форуме с:
    27 янв 2014
    Сообщения:
    1.306
    Симпатии:
    0
    Баллы:
    0
    VT добавь
     
  4. Оффлайн

    RedYu

    На форуме с:
    25 июл 2016
    Сообщения:
    6
    Симпатии:
    4
    Баллы:
    2
    Пол:
    Мужской
    редактировать не могу
     
  5. Оффлайн

    StasBess рядовой

    На форуме с:
    27 янв 2014
    Сообщения:
    1.306
    Симпатии:
    0
    Баллы:
    0
    В комменты, во всех темах...
     
  6. Оффлайн

    RedYu

    На форуме с:
    25 июл 2016
    Сообщения:
    6
    Симпатии:
    4
    Баллы:
    2
    Пол:
    Мужской

Поделиться этой страницей

Уважаемый пользователь!

Мы обнаружили, что вы блокируете показ рекламы на нашем сайте.

Просим внести его в список исключения или отключить AdBlock.

Наши материалы предоставляются БЕСПЛАТНО и единственным доходом является реклама.

Спасибо за понимание!