Перейти к содержанию

[PS3] Создание читов с помощью дебаггера ProDG


Рекомендуемые сообщения

Статья о том, как искать и создавать чит-коды для игр Sony PlayStation 3. Способ второй (Real-Time Modding)

Автор статьи: Alias

Создание чит-кодов для игр Sony PlayStation 3 с помощью дебаггера ProDG Debugger

Автор статьи: Alias

Статья написана с использованием материалов с сайта www.nextgenupdate.com

Нам понадобится:

1) Сама консоль PS3 конвертированная в Debug (DEX) консоль. Дебаггер ProDG не видит обычные Retail (CEX) консоли, поэтому приходится конвертировать. Это не очень сложно и здесь процесс конвертации не описывается. Наберите в Google CEX to DEX Convert и найдёте инструкцию;

2) Дебаггер ProDG Debugger из состава PS3 SDK (Google в помощь);

3) Программа DarkEbootFixer v5.5 или новее;

4) Хотя бы некоторое представление об ассемблере PowerPC (он отличается от привычного интеловского);

5) Взламываемая игра. В этой статье ломать будем игру The Last of Us.

Здравствуйте. В предыдущей статье я описал довольно сложный метод взлома игр «вслепую» методом изменения набора ассемблерных инструкций наугад. В этой статье речь пойдёт о более простом способе взлома игр с помощью дебаггера ProDG Debugger, входящего в комплект PS3 SDK. Самое сложное здесь – конвертация консоли в DEX. Этот процесс и без меня подробно описан и ниже подразумевается что ваша консоль уже конвертирована.

  1. Подготовительный процесс

Первое что нам нужно сделать это переподписать игровой файл EBOOT.BIN для его запуска на DEX консоли. Если этого не сделать, дебаггер ProDG скорее всего не увидит запущенную игру. Не совсем понятно почему так происходит, ну да неважно.

EBOOT.BIN – стандартное название файла, с которого начинается процесс загрузки игры. Иногда этот файл может подгружать другой SELF-файл и тогда подписывать нужно не его, а этот другой файл, т.к. EBOOT.BIN в этом случае выступает в роли загрузчика и игровой код внутри себя не содержит. Но такое встречается редко и в основном подписывать нужно именно его.

EBOOT.BIN следует искать на диске с игрой в папке PS3_GAME\USRDIR. Скопируйте его себе на компьютер. Если у вас нет блурей дисковода, воспользуйтесь ftp сервером для PS3. Как настраивать ftp сервер на ps3 я тут объяснять не буду, инструкции есть в интернете, в любом случае FTP нам обязательно пригодится, так что настройте его, не поленитесь.

Теперь запускаем DarkEbootFixer. Выбираем DEX Utility (7), затем Resign EBOOT.BIN (DEX) (1):

3677067m.jpg 3711882m.jpg

Переходим к настройке ProDG Debugger.

2. Настройка Target Manager

Дебаггер ProDG Debugger подключается к консоли удалённо через локальную сеть. Настройте LAN-подключение консоли через кабель Ethernet (ни в коем случае не WiFi – капризный дебаггер мало того что не видит Retail консоли, не видит неподписанные особым образом игры, так вдобавок ко всему не дружит с WiFi подключениями, ужас какой…). Теперь открываем Target Manager (это такой модуль дебаггера, подключающий его к консоли). Выбираем Search for Targets, задаём диапазон IP-адресов, в котором находится наша консоль, и нажимаем F5 (Refresh), только перед этим не забудьте включить консоль:

3707786m.jpg

Наша консоль должна найтись. Нажимаем на ней правой кнопкой и перемещаем в группу Debugging Station:

3701642m.jpg

Снова нажимаем правой кнопкой и перемещаем найденную консоль в список доступных для подключения к дебаггеру (Add targets):

3687306m.jpg

3. Подключение игры к дебаггеру

Теперь подключите Target Manager к консоли, нажав F7 (Connect) и после появления статуса Connected можно попробовать запустить игру на консоли (не закрывая Target Manager):

3683210m.jpg

В этот момент вы уже можете запустить сам дебаггер ProDG Debugger и если всё сделано правильно после запуска игры в окне дебаггера Process вы увидите запущенный игровой процесс (лучше нажмите указанную на скриншоте кнопку авто-обновления, чтобы окно дебаггера само обновлялось по мере изменения чего бы то ни было на консоли). Если у вас нет окна Processes откройте его нажатием обведённой кнопки (с красной шестернёй):

3671946m.jpg

Подключаемся к процессу игры, нажав указанную выше кнопку в виде двух шестерёнок, выбираем Continue without symbols:

3678090m.jpg

После этого процесс игры должен остановиться (игра на консоли перестанет отвечать нажатию кнопок). Чтобы его запустить нужно в Target Manager на вкладке Kernel Explorer нажать кнопку Continue:

3728269m.jpg

4. Приступаем к взлому игры. Снятие дампов памяти

Теперь в ProDG Debugger открываем окно Memory (обведено кружком). Нам нужно найти по какому адресу игра хранит игровые параметры (патроны, здоровье и др.). В случае с игрой Infamous этим диапазоном адресов был 0x30000000 – 0x3fffffff. Однако в игре The Last of Us этот диапазон адресов не заполнен никакими данными и искать нужно в диапазоне 0x40000000 – 0x4fffffff. От чего это зависит и существуют ли игры в которых диапазон будет каким-то ещё точно сказать не могу, нужно взломать больше игр чтобы знать наверняка.

3724173m.jpg

Теперь нам нужно несколько раз сдампить указанный диапазон памяти и найти в нём желаемый параметр (патроны, здоровье) с помощью Artmoney (Artmoney единственный известный мне сканер, который умеет искать не только в памяти запущенного процесса, но и в файлах (дамп памяти или файл сохранения игры). Но есть одна проблема – просто так сдампить кусок 0x40000000 – 0x4fffffff не выйдет, выскочит ошибка. Дело в том, что игра не использует указанный кусок памяти целиком, а только его часть, и дебаггер не может сдампить неиспользованную игрой память. Нужно вручную найти границу этого диапазона. Сделать это довольно сложно, но возможно. Нужно просто вводить разные адреса и смотреть есть ли там данные. Если есть – прыгаем дальше. Если нет – прыгаем обратно. Например, я проверяю адреса 0x41000000, 0x42000000, 0x43000000, 0x44000000, 0x45000000 – последний адрес привёл нас к незаполненной памяти.

3711885m.jpg

Прыгаем назад, скажем, на 0x44100000, затем 0x44200000 – опять пустышка. Теперь можно просто скроллнуть колёсиком вверх и где-то там будет граница заполненной области (у меня границей стал адрес 0x441fffff, но этот адрес плавающий, может измениться после перезапуска игры). Таким образом в моём случае нужно сделать дамп диапазона 0x40000000 – 0x441fffff).

3719053m.jpg

Нажимаем правую кнопку в окне Memory -> Save Memory:

3704717m.jpg

Вводим Start Address: 0x40000000, End Address: 0x441fffff, вводим имя файла дампа и куда его сохранить и нажимаем кнопку Save.

3710861m.jpg

Получился дамп, размером 65 Мб (у вас может быть другой размер). Теперь меняем в игре значение ломаемого параметра (в моём случае патроны) и делаем новый дамп аналогичным образом (искать границу памяти уже не придётся до следующего перезапуска игры). Сделав некоторое количество дампов переходим к Artmoney.

5. Второй этап взлома. Поиск значений в дампах

Открываем Artmoney. Сначала переключим его на работу с файлами. Настройки -> Основные -> Объект: Файл.

3695501m.jpg

Выбираем первый дамп и ищем сколько в нём было патронов (у меня 3). Искать следует перевернутый порядок байт, 2 байта для патронов и 4 байта для здоровья (почему именно 2 байта для патронов – это выясняется только опытным путём, хотя можно найти патроны и поиском 4 байт):

3701645m.jpg

Затем выбираем второй дамп и отсеиваем 2 патрона (ну или сколько у вас):

3700621m.jpg

Продолжаем делать дампы и отсеивать, пока адресов не останется несколько штук (можно делать дампы с одинаковым числом патронов, это тоже должно уменьшить результаты при отсеивании). И вот на 4 шаге адресов осталось только три:

3691405m.jpg

Проверяем их все, перейдя к указанным адресам в окне дебаггера Memory и заменив первый ноль в адресе на 4, т.к. начальный адрес в нашем дампе соответствует адресу 0x40000000 на консоли. Пробуем поменять цифру 1 на любую другую (это легко делается прямо в окне дебаггера Memory. Только не пробуйте менять число в Artmoney – это ничего не даст =) ) и смотрим изменилось ли число патронов в игре. Первый же адрес 0x43313CF4 дал нужный результат!

6. Третий этап взлома. Создание чита

В принципе можно просто поставить себе 65535 патронов (больше не получится) и этим и ограничиться, но лучше создать полноценный чит-код. Для этого ставим бряк на найденном адресе патронов 0x43313CF4. Бряк ставится через меню Debug -> Hardware Breakpoint и снимается там же нажатием кнопки Disable:

3682189m.jpg

Указывавем адрес патронов:

3686285m.jpg

Лучше поставить бряк на запись. На предложение изменить адрес бряка на адрес 0x43313cf0 соглашаемся (выбора нам не оставляют). Вновь возвращаемся в игру и ждём срабатывания бряка (нужно выстрелить):

3673997m.jpg

Итак, нажимаем две кнопки сверху, обведенные красным. Откроются окна Registers и Disassembly. Переходим к бряку (его адрес указан в окне Registers в регистре pc) и видим ассемблерную инструкцию sth r9, 0x574(r28), т.е. число патронов r9 заносится в память [r28+0x574]. R28 = 43313780 это начало какой-то структуры, в которой патроны лежат по смещению 0x574 (0x43313780 + 0x574 = 0x0x43313cf4, наш адрес патронов).

Давайте попробуем занопить эту инструкцию. Перейдём к адресу инструкции 0x00686348 в окне Memory и заменим байты B1 3C 05 74 на 60 00 00 00 (инструкция nop):

3677069m.jpg

Снимаем сработавший бряк, нажав F5 и сам бряк, нажав кнопку Disable (см. скриншот установки\снятия бряка выше). Возвращаемся в игру, стреляем и… патроны перестали кончаться! Ну и наконец осталось изменить ELF-файл игры, чтобы не активировать каждый раз чит вручную. Адрес инструкции 0x00686348 должен быть постоянным и не меняться от перезапусков игры. Таким образом в формате Usercheats чит будет таким:


2000 00686348 60000000

Т.е. по адресу 0x00686348 забиваем байты 60000000. Чит готов!

Или же можете создать оригинальную цепочку байт (aobscan по терминологии Cheat Engine) и делать замену по ней:


OGP = B13C0574E80100A0EB810070EBA100787C0803A6EBE10088382100904E800020
COP = 60000000E80100A0EB810070EBA100787C0803A6EBE10088382100904E800020

Здесь OGP оригинальная сигнатура, COP сигнатура чит-кода.

Вновь воспользуемся DarkEbootFixer, выберем опцию Decrypt EBOOT (Make Eboot.ELF) (0), получим ELF-файл. Сделаем замену по указанным выше сигнатурам при помощи любого HEX-редактора (ищем сигнатуру OGP, меняем её на COP). Затем подписываем ELF-файл как делали раньше (опции 7 и 1). Всё, чит на бесконечные патроны готов.

Аналогично делаем бессмертие и всё что угодно. В этой игре здоровье хранится как Целое 4 байта, полное здоровье равно 100. Не забываем про перевернутые байты!

Gamehacking with ProDGDebugger.rar

  • Плюс 3
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Хотел видео снять, но мне проще время на статью потратить) Есть у меня нехорошее ощущение что капризный дебаггер потребует дополнительных танцев с бубном, чтобы всё заработало, в виде доп. настроек всяких опций на самой консоли. Так что если кто попробует и ничего не получится, пишите, будем разбираться...

Статью конечно публикуйте на сайте, я не против :)

Ссылка на комментарий
Поделиться на другие сайты

Статья просто отличная, молодец.

Чуть добавлю свои пять копеек. Когда я начинал взламывать игры на консоли (Xbox 360, там тот же PowerPC), то тоже практически везде ставил нопы. Это не всегда прокатывает, например когда инструкция которая отнимает патроны еще их и добавляет, т.е. если вы в игре поднимите оружие, то у вас будет 0 патронов. Теперь я первым делом смотрю какая инструкция пишет в регистр новое значение и изменяю его. В данном примере как раз руки так и чешутся записать свое значение в регистр r9.

Как мы видим предыдущая инструкция отнимает 1 патрон из регистра r9 и новое значение пишет обратно:

00686344 3929FFFF addi r9,r9, -1 ее можно заменить на 39290000 addi r9,r9,0 т.е. патрон не будет отниматься.

Но я бы сделал так, чтобы писалось постоянное значение например 99, делается это следующим образом:

Меняем инструкцию addi на li, вместо 00686344 3929FFFF addi r9,r9, -1 пишем 00686344 39200063 li r9,99 (0x63) и у нас постоянно будет 99 патронов.

А так очень радует, что появилась возможность взлома игр для PS3. Плохо только одно, что таким способом не сделать бессмертие если для игрока и врагов работает одна инструкция. С Xbox 360 проще, там я пишу на С++ полноценный трейнер со своим меню и возможностью включения и отключения читов и в нем я могу прописать проверку наносят урон мне или наношу урон я, чтобы сделать бессмертие и легкое убийство.

Изменено пользователем cosmaty
Ссылка на комментарий
Поделиться на другие сайты

Про nop согласен, не самое изящное решение. Но и чит не мой. Я только добавил пошаговую инструкцию как его создать. Что радует - игры на ps3 очень быстро ломают. Особой необходимости учиться самому делать читы нет, и без тебя всё давно сломано. Не знаю как там с Боксом дела обстоят, нету приставки. Но узнать как делаются читы всё равно было познавательно.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

Хм. Это конечно все здорово, но что если просто отредактировать значения в сейвах через тот же Артмани? Или не прокатит. Просто закинуть похаканный сейв гораздо проще чем проводить столь жуткую возню с памятью.

Ссылка на комментарий
Поделиться на другие сайты

Про nop согласен, не самое изящное решение. Но и чит не мой. Я только добавил пошаговую инструкцию как его создать. Что радует - игры на ps3 очень быстро ломают. Особой необходимости учиться самому делать читы нет, и без тебя всё давно сломано. Не знаю как там с Боксом дела обстоят, нету приставки. Но узнать как делаются читы всё равно было познавательно.

А где их кстати брать? Все что я находил на чит-тему в ps3 играх - так это различные донглы, которые необходимо заказывать из-за бугра. Прямо скажем, не лучший вариант, если решил например сократит время, которое собрался тратить на выбивание нудной платины в духе - убей 1.000.000 врагов и т.п.

Ссылка на комментарий
Поделиться на другие сайты

А где их кстати брать?

Сохранения на PS3 зашифрованы, чтобы их редактировать нужен опять таки донгл.

Единственный известный мне сайт с читами это http://www.codemasters-project.net/vb/forumdisplay.php?152-Games-Hacked.

Ссылка на комментарий
Поделиться на другие сайты

Мда, что-то не густо там читов. Что ж выходит вообще нет больше возможности поломать значения нормально? А то на DEX переходить не хочется, ровно как и откатываться на 3.55.

Ссылка на комментарий
Поделиться на другие сайты

Ну не знаю, я все интересующие игры там находил. GTA5, RDR, The last of us, Infamous. Во что не соберусь поиграть пока для всех игр читы находились)

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Сегодня разбирался с читами на х360. Удивило сколько там бесплатного и удобного софта в открытом доступе для редактирования сохранений, профиля, анлока ачивок и т.п.. На пс3 просто невероятно глухо с этой темой. Но, выше писали, что сломать сейв при помощи артмани нельзя, мол зашифровано. Так вот. Пока разбирался с х360, случайно наткнулся на такую вот инструкцию.

http://www.se7ensins.com/forums/threads/ps3-save-editing-tutorial.840868/

Как считаете, поможет?

Ссылка на комментарий
Поделиться на другие сайты

Особо не читал. Но суть в том, что если подобрать ключ шифрования от сохранения (или как он там правильно обзывается), то сэйв можно расшифровать. Насколько реально такой ключик подобрать не знаю, не пробовал. Но видимо всё-таки реально, в инете иногда выкладывают такие ключики, да и донгл Save Editor с собственной базой игр ведь как-то создали, наверняка также подбирали брутфорсом. Будете пробовать, напишите об успехах)

Ссылка на комментарий
Поделиться на другие сайты

Сэйвы в ГТА5 мало того что зашифрованы стандартной утилитой приставки, но ещё и сама игра шифрует сэйвы по алгоритму AES 256-битным ключом (ключик этот в принципе известен) и проверяет сэйв по каким-то контрольным суммам :) Так что ничего не получится, только если заюзать готовый редактор сэйвов для игры.

Ссылка на комментарий
Поделиться на другие сайты

Сегодня разбирался с читами на х360. Удивило сколько там бесплатного и удобного софта в открытом доступе для редактирования сохранений, профиля, анлока ачивок и т.п..

Если Xbox 360 freeboot, то редакторы сейвов не актуальны, уже полно полноценных трейнеров (даже на русском), а так же видео по их созданию.

Сэйвы в ГТА5 мало того что зашифрованы стандартной утилитой приставки, но ещё и сама игра шифрует сэйвы по алгоритму AES 256-битным ключом (ключик этот в принципе известен) и проверяет сэйв по каким-то контрольным суммам :) Так что ничего не получится, только если заюзать готовый редактор сэйвов для игры.

Почему же не получится? Если есть сейв-редактор, значит как-то можно найти значения в севах игры (например с помощью Нех-редактора).
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.