Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: октябрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Реверсинг программ/игр для XBOX360. Часть 1.

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Автор: sElectron <dc@mail.gu>

Реверсинг программ/игр для XBOX360. Часть 1.


Решив занятся этим экзотическим делом я был удивлен отсутствием какой-либо инфы в Русском нете -
и это учитывая то что имеется куча сайтов по аппаратному взлому xbox (а это дело не для начинающих).
Пройти через кошмар "Glitch Hack" только для того чтобы запускать на боксе пиратские диски- это как-то
несерьезно - давайте продолжим процесс и приручим этого зверя полностью.

ВНИМАНИЕ: ЗАПУСК МОДИФИЦИРОВАННЫХ XBOX ПРОГРАММ на заводском xbox невозможен !!!
(но мы все-же можем исследовать их на PC так что продолжаем)

(Раз вы читаете эту статью то скорее всего вы уже научились запускать неподписаные приложения
на xbox, если только собираетесь то для начала смотрите на http://hackfaq.net но потом все-же лучше
использовать зарубежные ресурсы иначе ваш xbox может отправится в утиль (увы нормальной статьи
по аппаратному взлому xbox в руском нете тоже пока нет)).

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

1. Минимальный набор софта :

XBOX Image Browser - для распаковки ISO образов xbox игр (free,google search).
X360 Game Hack - для распаковки/разлочки xex - исполняемых файлов xbox (free,google search).
Party Buffalo - утилита для работы с HDD/FLASH drive форматированных в xbox (free,google search).

IDA 6.1 - именно эта версия - ищите в интернете.
Python 2.7 (free) - скачайте с офф. сайта

2. Настройка IDA для работы с xex-исполняемыми файлами-контейнерами xbox

нужно:
XEX Plugins/Loaders/Idc/Cfg,IDA Python для IDA 6.1

скопируйте соотв. файлы из папок архива в соотв. папки установленного IDA 6.1
Установите Python 2.7
Запустите IDA - в окне вывода не должно быть Python-ошибок !

ссылка на софт и Book1 +xex (без IDA 6.1 и Python 2.7)
www.megaupload.com/?d=ES15MMK0
пасс: Rpi360p1SDxex

01. Немного теории

В xbox стоит проц POWER - это совсем не INTEL !!!. Скачиваем доки по PowerPC c сайта IBM:
link: http://www.ibm.com/developerworks/systems/library/es-archguide-v2.html
(нам нужен BOOK 1)

Главный исполняемый файл xbox для игры обычно default.xex - но на диске с игрой вы его не увидите.
Чтобы достать его с диска используем XBOX Image Browser - указываем ISO образ, выбираем Extract.

Он запакован/зашифрован и подписан RSA-сигнатурой - если вы пропатчите его то на обычном xbox вы
его уже не запустите. Для его распаковки используем X360 Game Hack (оставьте включенные по умолчанию
опции).

В папке X360 Game Hack находится базовая утилита для работы с xex файлами - xextool.exe
(X360 Game Hack это просто оболочка распаковки для нее).

для вывода расширенной инфы по xex выполните "xextool.exe -l default0.xex" - здесь в частности будут
сегменты.

02. НАЧИНАЕМ с простого - Halo CEA 2011 GodMode .

Легенда xbox Halo Combat Evolved в 2011 обновилась на новый движок - но естествено не для PC

Будем делать себе GodMode=1.

Извлекаем/распаковываем default.xex как написано выше.
Запускаем IDA, открываем default.xex - если все настроили правильно то сразу пойдет анализ
если пишет ошибки то возможно не совпадают версии XEX Plugins/Loaders/IDA Python и IDA -
плагины/лоадеры написаны под конкретную версию - ищите правильный IDA.

Ждем минут 20-50 и смотрим на невиданный ранее ассемблер PPC. Не беспокойтесь - здесь все как на
Windows - .text, .data, .rdata, вместо API - xbox DashBoard API функции,тоже имеют понятные имена.

Система комманд RISC, каждая команда имеет размер строго 4 байт и много чего может делать
в зависимости от доп. полей и значений операндов. Числа BigIndian (как пишется так и в памяти)
Проц 64bit но может работать и в 32bit режиме. Вместо регистров EAX/EBX... здесь 32 64bit-ных
регистра R0..R31. Стека нет адрес возрата сохраняется в регистре LR. Есть также команды/регистры
для операций с float-арифметикой. Читайте pdf доки от IBM выше.

С сигнатурами библиотеки Visual C++ (обычно проги на xbox пишется на нем) дело пока глухо так что
прийдется работать с ассемблером и DashBoard API-функциями.


Далее ищем в строках "God","GodMode","God Mode" :


.rdata:82009A28		0000000C	C	God Mode %s


очень напоминает на вывод значения God Mode.
Пройдемся по ссылкам на него и посмотрим что там делается.

	
.text:822FF96C loc_822FF96C:                           # CODE XREF: sub_822FF428+538
.text:822FF96C                 clrlwi    r11, r31, 24
.text:822FF970                 cmplwi    cr6, r11, 0
.text:822FF974                 beq       cr6, loc_822FFA84
.text:822FF978                 bl        sub_82CB8BC0
.text:822FF97C                 lis       r11, byte_834B39C0@h
.text:822FF980                 lbz       r10, byte_834B39C0@l(r11) # int
.text:822FF984                 cmplwi    cr6, r10, 0
.text:822FF988                 beq       cr6, loc_822FF998
.text:822FF98C                 lis       r11, ((aOn+0x10000)@h) # "on"
.text:822FF990                 addi      r5, r11, -0x65C8 # aOn
.text:822FF994                 b         loc_822FF9A0
.text:822FF998 # ---------------------------------------------------------------------------
.text:822FF998
.text:822FF998 loc_822FF998:                           # CODE XREF: sub_822FF428+560
.text:822FF998                 lis       r11, ((aOff+0x10000)@h) # "off"
.text:822FF99C                 addi      r5, r11, -0x65CC # aOff # int
.text:822FF9A0
.text:822FF9A0 loc_822FF9A0:                           # CODE XREF: sub_822FF428+56C
.text:822FF9A0                 lis       r11, ((aGodModeS+0x10000)@h) # "God mode %s"
.text:822FF9A4                 addi      r3, r1, 0x120+var_C4 # int
.text:822FF9A8                 addi      r4, r11, -0x65D8 # aGodModeS # int
.text:822FF9AC                 bl        sub_82423B98
.text:822FF9B0                 stw       r26, 0x120+var_90(r1)
.text:822FF9B4                 stw       r26, 0x120+var_8C(r1)

по адресу 822FF97C..984 в R10 загружается значение из ячейки 834B39C0 и потом сравнивается с 0:

lis r11, byte_834B39C0@h - загрузка в r11 адреса byte_834B39C0
lbz r10, byte_834B39C0@l(r11) - загрузка байта в r10 по адресу r11
cmplwi cr6, r10, 0 - сравнение r10 c 0
beq cr6, loc_822FF998 - переход если == 0

ну а дальше и так все ясно - выводится "God Mode on" или "off"

Выбираем меню Jump->Mark Position пишем PrintGodMode - теперь не прийдется снова искать это место.
Давайте переименуем byte_834B39C0 в GodModeValue и пройдемся по ссылкам на него.

Up   o sub_822BED90+30           lis       r11, GodModeValue@h                
Up   o sub_822BED90+34           addi      r11, r11, GodModeValue@l           
Up   w sub_822BED90+54           stb       r10, ((GodModeValue-0x39C0)@l)(r11)
Up   o sub_822E9610:loc_822E9DE0 lis       r11, GodModeValue@h                
Up   o sub_822E9610+7D4          addi      r10, r11, GodModeValue@l           
.
.
.
Down w .text:82CB8BF4            stb       r11, GodModeValue@l(r10)           
Down o sub_82D35928+104          lis       r11, GodModeValue@h                
Down o sub_82D35928+108          addi      r10, r11, GodModeValue@l           
Down o sub_82D35E10:loc_82D35EB4 lis       r11, GodModeValue@h                
Down o sub_82D35E10+A8           addi      r8, r11, GodModeValue@l            
Down o sub_82D39B00:loc_82D39BA4 lis       r11, GodModeValue@h                
Down o sub_82D39B00+A8           addi      r10, r11, GodModeValue@l           
Down o sub_82D54778+274          lis       r11, GodModeValue@h                
Down o sub_82D54778+278          addi      r10, r11, GodModeValue@l 

ого сколько их там - надо сузить варианты - проверим только где запись - инструкции типа :

stb r11, GodModeValue@l(r10) - сохранить байт r11 по адресу r10

(уже заботливо отмечены IDA префиксом "w") :

Up   w sub_822BED90+54           stb       r10, ((GodModeValue-0x39C0)@l)(r11)              
Down w sub_82C78D90+8            stb       r11, GodModeValue@l(r10)           
Down w sub_82CB8BC0+10           stb       r11, GodModeValue@l(r10)            
Down w .text:82CB8BF4            stb       r11, GodModeValue@l(r10) 

ну первая это явно не то а вот остальные 3 проверим, на второй :

.text:82C78D90 # =============== S U B R O U T I N E =======================================
.text:82C78D90
.text:82C78D90
.text:82C78D90 sub_82C78D90:                           # CODE XREF: sub_82C60AE8+C4
.text:82C78D90                 lis       r10, GodModeValue@h
.text:82C78D94                 li        r11, 0
.text:82C78D98                 stb       r11, GodModeValue@l(r10)
.text:82C78D9C                 blr
.text:82C78D9C # End of function sub_82C78D90

ну тут все явно.
Давайте переименуем sub_82C78D90 в SetGodMode0 и Jump->Mark Position пишем SetGodMode0
и пройдемся по ссылкам на него.

Up p sub_82C60AE8+C4 bl        SetGodMode0

sub_82C60AE8 очень похожа на функцию инициализации переменных игры.
похоже sub SetGodMode0 и есть то самое но нам надо чтобы в GodModeValue загружалось 1
не будем пока разбирать ОП-КОДЫ команд PPC - просто идем в окно HexView по адресу 82C78D94 :

82C78D94  39 60 00 00 99 6A 39 C0  4E 80 00 20 7D 88 02 A6 

первые 4 байта это li r11, 0 заменяем на 82C78D94 39 60 00 01 Сохраняем все в IDA.

03. ПАТЧИМ XEX файл.

Поскольку у нас не стандартный PE прийдется работать с ним вручную.

Для начала найдем смещение сегмента кода в xex-файле. Открываем окно "Programm Segmentation" в IDA
кликаем на .text, идем в окно HexView и копируем 16 байт:

	
822B0000  7D 88 02 A6 91 81 FF F8  94 21 FF A0 38 80 00 00

Запускаем Hex-редактор, открываем в нем наш default.xex и ищем 16 байт:

002B4000 7D 88 02 A6 91 81 FF F8  94 21 FF A0 38 80 00 00

разница между между VA и файлом: 822B0000 - 002B4000 = 81FFC000
Теперь находим смещение адреса li r11, 0 : 82C78D94 - 81FFC000 = C7CD94
меняем 0000 на 0001 и сохраняем.


Теперь главное не упасть в какую либо дыру каких в игре не мало - иначе при авто сохранении
можно застрять в ней навечно - в этом случае спасет оригинальный default.xex - можно будет
умереть по челевечески.

Если дойдут руки то в следующей 2-й части рассмотрим "FarCry Instincts Predator/Evolution" GodMode
и "HALO 3" disable map check. Мы научимся разбиратся с запутанными подпрограммами, операциями с
плавающей точкой и криптографическими XBOX API - но вы можете уже сейчас сами приступить к делу.




Обсуждение статьи: Реверсинг программ/игр для XBOX360. Часть 1. >>>


Материалы находятся на сайте http://e4unrusy7se5evw5.onion



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS