Чаще всего дизассемблер используют для анализа программы (или ее части), исходный текст которой неизвестен — с целью модификации, копирования или взлома.
Реже — для поиска ошибок (багов) в программах и компиляторах, а также для анализа оптимизации создаваемого компилятором машинного кода.
Дизассе́мблер — транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.
Пример интерактивного — IDA. Он позволяет изменять правила дизассемблирования и является весьма удобным инструментом для исследования программ. Такие дизассемблеры генерируют готовый листинг, который можно затем править в текстовом редакторе.
Основная трудность при работе дизассемблера — отличить данные от машинного кода, поэтому на первых проходах автоматически или интерактивно собирается информация о границах процедур и функций, а на последнем проходе формируется итоговый листинг. Интерактивность позволяет улучшить этот процесс, так как просматривая дамп дизассемблируемой области памяти, программист может сразу выделить строковые константы, дать содержательные имена известным точкам входа, прокомментировать разобранные им фрагменты программы.
Нас интересуют дизассемблеры, позволяющие декомпилировать код файлов для платформы PSP. А выбор таких не так уж и велик. Как известно, PSP понимает исполняемые файлы формата ELF (Executable and Linkable Format (PRX)), написанные на языке С++.
Я пока знаю 4 таких дизассемблера, умеющих работать с ELF-форматом:
IDA PRO 5.5 - Interactive DissAssembler, кто ж её не знает, лучший интерактивный дизассемблер. Более подронее о ней вы можете узнать из следующей статьи. Перед установкой IDA, желательно сначала поставить Python 2.5.4 для расширения функционала.
На всякий пожарный, старая проверенная версия IDA Pro 5.2 и более новая IDA Pro 6.1 или такая IDA Pro 6.1 -
Порядок установки IDA v6.1
Разархивировать папку "ida61" (Hex-Rays.IDA.Pro.Advanced.v6.1.Windows.incl.Hex-Rays.x86.Decompiler.v1.5.READ.NFO-RDW) в корень диска С.
Из папки "_RDW-ANTIPIRATE" скопировать файлы в корень папки "С:\ida61\", если у вас остались нужные проекты от пиратской версии 5.5.
Скопировать все папки "docs", "examples", "python" и "plugins" в папку "C:\ida61\", соглашаясь на замену.
Скопировать файл "python.cfg" в папку "C:\ida61\cfg\"
Далее остальные папки плагинов из этой раздачи в папку с программой "C:\ida61\", если надо.
При первом запуске IDA PRO сама должна подхватить и сконфигурировать Питона и плагины.
Работать с программой просто. Открываете в программе декриптованный PRX-файл. Программа начнёт задавать кучу вопросов, соглашайтесь на все, где нужно проставляете галочки (только не там, где Disable). Когда спросит выбрать формат файла, выбираете ELF и процессор mipsl, для PS3 понадобится библиотека процессора Cell ps3spu.w32 - process module for IDA (источник)
Скриншоты
JPCSP - Эмулятор PSP для PC + дебаггер. Тоже очень не плохо выводит ресурсы.
Скриншоты
PSPDecompiler by hlide - отличный декомпилятор. Выдаёт вполне читабельный почти исходный сырой код в *.c и *.h на С++. Так-же использует библиотеку нидов в XML, которую можно взять у SilverSpring под названием psplibdoc.xml (libdoc.xml). Я её положил в архив вместе со следующей программой PRXTool_1.1, т.к. одна программа дополняет другую.
Запускается она из батника №17 и на выходе получаем два файла: .c и .h, а так-же получаем одновременно полное дизассемблирование из PRXTool во всевозможные форматы.
Скриншот
Пример декомпиляции файла прошивки - galaxy.prx.
PRXTool 1.1 by TyRaNiD - вот это следует особо отметить. Этот дизассемблер писался и предназначался именно для PSP. PRXTool предназначен для целого ряда функций, он может выдавать на выходе файл IDC для использования в IDA Pro. И конечно легко дизассемблирует любые ELF-PRX, выводя дизассемблированный код в красивом печатном виде.
В любом случае он является хорошим дополнением к libdoc, что и обеспечивает XML файл, используемый для получения имён функций.
Полный список поддерживаемых команд вывода и дополнительные опции
Так как в оригинальном релизе присутствует только сам prxtool.exe, который является консольной утилитой и не каждый понимает, какие нужно вводить команды, то во вложении я выложил готовую к употреблению версию с вложенным уже libdoc.xml и подготовленными батниками с прописанными командами. Вам остаётся только закинуть декриптованный файл *.prx в папку с программой и запустить необходимый батник.
Есть возможность декомпилировать пакетно, сразу всю программу со связанными между собою файлами (необходимо конечно их все предварительно вытащить). Связанные ссылки будут работать в HTML.
Можно декомпилировать даже всю прошивку, положив папки "KD" и "module" с декриптованными PRX-ами в папку с программой и вывести результат в формат HTML. Все переходы функций между файлами будут работать в виде ссылок.
Более подробную инструкцию по расширенному использованию PRXTool с описанием дополнительных команд вывода и работой с IDA PRO, можно почерпнуть здесь.
Вывод всей папки с декриптованными файлами в дизассемблированный код HTML - здесь.
Последний раз редактировалось ErikPshat; 11.11.2024 в 11:50.