PDA

Просмотр полной версии : Дизассемблеры С/С++


ErikPshat
12.01.2010, 07:16
Чаще всего дизассемблер используют для анализа программы (или ее части), исходный текст которой неизвестен — с целью модификации, копирования или взлома.
Реже — для поиска ошибок (багов) в программах и компиляторах, а также для анализа оптимизации создаваемого компилятором машинного кода.

Дизассе́мблер — транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.

Пример интерактивного — IDA. Он позволяет изменять правила дизассемблирования и является весьма удобным инструментом для исследования программ. Такие дизассемблеры генерируют готовый листинг, который можно затем править в текстовом редакторе.

Основная трудность при работе дизассемблера — отличить данные от машинного кода, поэтому на первых проходах автоматически или интерактивно собирается информация о границах процедур и функций, а на последнем проходе формируется итоговый листинг. Интерактивность позволяет улучшить этот процесс, так как просматривая дамп дизассемблируемой области памяти, программист может сразу выделить строковые константы, дать содержательные имена известным точкам входа, прокомментировать разобранные им фрагменты программы.

Нас интересуют дизассемблеры, позволяющие декомпилировать код файлов для платформы PSP. А выбор таких не так уж и велик. Как известно, PSP понимает исполняемые файлы формата ELF (Executable and Linkable Format (http://en.wikipedia.org/wiki/Executable_and_Linkable_Format) (PRX)), написанные на языке С++.

Я пока знаю 4 таких дизассемблера, умеющих работать с ELF-форматом:

IDA PRO 5.5 (http://rutracker.org/forum/viewtopic.php?t=2537609) - Interactive DissAssembler, кто ж её не знает, лучший интерактивный дизассемблер. Более подронее о ней вы можете узнать из следующей статьи (http://lurkmore.ru/Reverse_Engineering#.D0.94.D0.B8.D0.B7.D0.B0.D1.81.D1.81.D0.B5.D0.BC.D0.B1.D0.BB .D0.B5.D1.80.D1.8B). Перед установкой IDA, желательно сначала поставить Python 2.5.4 (http://www.python.org/download/releases/2.5.4/) для расширения функционала.
На всякий пожарный, старая проверенная версия IDA Pro 5.2 (http://rutracker.org/forum/viewtopic.php?t=524500) и более новая IDA Pro 6.1 (http://rutracker.org/forum/viewtopic.php?t=3625386) или такая IDA Pro 6.1 (http://rutracker.org/forum/viewtopic.php?t=3651872) -

Разархивировать папку "ida61" (Hex-Rays.IDA.Pro.Advanced.v6.1.Windows.incl.Hex-Rays.x86.Decompiler.v1.5.READ.NFO-RDW) в корень диска С.
Из папки "_RDW-ANTIPIRATE" скопировать файлы в корень папки "С:\ida61\", если у вас остались нужные проекты от пиратской версии 5.5.
Советую ставить последнюю скомпилированную версию питона Windows x86 MSI Installer (2.6.6) (sig) (http://www.python.org/download/releases/2.6.6/)
Затем разархивировать пакет питона для IDA idapython-1.5.2.3_ida6.1_py2.6_win32.zip (http://code.google.com/p/idapython/downloads/list) (IDAPython 1.5.2.3 for Windows, IDA Pro 6.1 and Python 2.6).

Скопировать все папки "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 (https://github.com/anita999/ps3spu) (источник (http://psx-scene.com/forums/f149/update-open-source-spu-module-ida-now-working-78609/))

http://s001.radikal.ru/i194/1001/59/5bd7aa45ae01.png

http://i056.radikal.ru/1001/69/6cd388151f58.png

http://s001.radikal.ru/i196/1001/0c/da56bd555956.png

http://s005.radikal.ru/i210/1001/41/1443b2e97ef6.png

http://s41.radikal.ru/i092/1001/20/9ae4bcd29bed.png JPCSP (https://www.pspx.ru/forum/showpost.php?p=853103#13) - Эмулятор PSP для PC + дебаггер. Тоже очень не плохо выводит ресурсы.

http://s002.radikal.ru/i197/1001/5f/8f4ac294061e.png

http://s53.radikal.ru/i142/1001/74/69f76df4260f.png PSPDecompiler by hlide (http://repo.or.cz/w/pspdecompiler.git) - отличный декомпилятор. Выдаёт вполне читабельный почти исходный сырой код в *.c и *.h на С++. Так-же использует библиотеку нидов в XML, которую можно взять у SilverSpring (http://silverspring.lan.st/) под названием psplibdoc.xml (libdoc.xml). Я её положил в архив вместе со следующей программой PRXTool_1.1, т.к. одна программа дополняет другую.

Запускается она из батника №17 и на выходе получаем два файла: .c и .h, а так-же получаем одновременно полное дизассемблирование из PRXTool во всевозможные форматы.

Пример декомпиляции файла прошивки - galaxy.prx.

http://s52.radikal.ru/i137/1001/ae/f01daf2116a8.pngPRXTool
PRXTool 1.1 by TyRaNiD (http://ps2dev.org/psp/Tools/PRXTool_1.1_(WIN32)) - вот это следует особо отметить. Этот дизассемблер писался и предназначался именно для PSP. PRXTool предназначен для целого ряда функций, он может выдавать на выходе файл IDC для использования в IDA Pro. И конечно легко дизассемблирует любые ELF-PRX, выводя дизассемблированный код в красивом печатном виде.
В любом случае он является хорошим дополнением к libdoc, что и обеспечивает XML файл, используемый для получения имён функций.

19192Так как в оригинальном релизе присутствует только сам prxtool.exe, который является консольной утилитой и не каждый понимает, какие нужно вводить команды, то во вложении (https://www.pspx.ru/forum/attachment.php?attachmentid=9852) я выложил готовую к употреблению версию с вложенным уже libdoc.xml (http://silverspring.lan.st/) и подготовленными батниками с прописанными командами. Вам остаётся только закинуть декриптованный файл *.prx в папку с программой и запустить необходимый батник.

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

Можно декомпилировать даже всю прошивку, положив папки "KD" и "module" с декриптованными PRX-ами в папку с программой и вывести результат в формат HTML. Все переходы функций между файлами будут работать в виде ссылок.


Более подробную инструкцию по расширенному использованию PRXTool с описанием дополнительных команд вывода и работой с IDA PRO, можно почерпнуть здесь (http://sceners.org/blog/?itemid=34&catid=4).
Вывод всей папки с декриптованными файлами в дизассемблированный код HTML - здесь (http://forums.ps2dev.org/viewtopic.php?t=7182).

stillllll
12.01.2010, 20:56
Название темы рулит =)

И как бы самый настоящий "дизассемблер для C", ты как раз таки забыл -> http://forums.ps2dev.org/viewtopic.php?t=11985

ErikPshat
13.01.2010, 11:41
stillllll, спасибо. Да, как раз, когда я писал эту статью, я видел этот дизассемблер. Но что-то немного не понял.

Похоже это порт на PRXTool 1.1 by TyRaNiD. Да и он пишет, что есть куча багов, типа не обращайте внимания.
Я скачал последнюю версию отсюда: http://repo.or.cz/w/pspdecompiler.git и пытался скомпилировать программу, но что-то у меня лезут ошибки.

В редми пишется, что необходима "Requirements: libexpat1-dev".
Ну я скачал её отсюда: http://sourceforge.net/projects/expat/ и установил. Вытащил все либы и подсунул. Но толку от этого никакого.

Если ты в курсе как этим пользоваться, то мог бы создать тему или здесть запостить и хоть как-то расписать, чтобы более-менее понятно было, как этим пользоваться...

mc707
13.01.2010, 12:24
Качать libexpat1-dev нужно с официальных репозиториев cygwin'а. Я собирал cygwin сам, все библиотеки по максимуму, кроме графических.

У меня собрался без проблем.
http://dump.ru/file/4127079

В файле dissassamble.bat нужно "FILE.PRX" заменить на нужное имя файла, либо вручную параметры запуска дизассемблера написать.
На выходе получаем два файла: .c и .h
Обидно, что ни один из EBOOT.BIN мною испробованных он не взял, а вот мелкие PRX на ура дербанит, причем код довольно удобочитаемый получается.

ErikPshat
13.01.2010, 13:01
mc707, о, спасибо. Я вообще cygwin-ом не пользуюсь. У меня просто Minimalist PSPSDK for Windows (http://sourceforge.net/projects/minpspw/) и он пока меня не подводил. Всё компилит удачно на Win7. Но похоже cygwin всё-же необходим, т.к. линуксовые некоторые команды, типа "./bootstrap" нужно вероятно в среде цигвин выполнять или в консоли Линукса.

А чем не устраивает PRXTool? Он вроде намного мощьней.

В файле dissassamble.bat нужно "FILE.PRX" заменить на нужное имя файла, либо вручную параметры запуска дизассемблера написать.Мне кажеться проще забить в батник *.prx и не париться с переименованием.

На выходе получаем два файла: .c и .h
То есть, имеешь ввиду, что получаем готовые исходники?

P.S. Кстати, что-то я совсем забыл добавить в шапке во вложение PRXTool 1.1 by TyRaNiD, а то кто-то не поймёт как этим пользоваться.
Щас хочу нарисовать сразу все команды - это получиться 20 с лишним батников на все случаи жизни.

mc707
13.01.2010, 14:08
А чем не устраивает PRXTool? Он вроде намного мощьней.

PRXTool дизассемблит в MIPS Asm. А Pspdisassembler декомпилит в С++ (естесственно в "некомпиляберный" код, но структура сишная, что удобнее и понятнее в разы).

PRXTool дербанит файл целиком, сохраняет все секции, импорты/экспорты, текстовые переменные, данные и т.п. Естественно что он намного мощней.
Но если хочется получить структуру кода, последовательность выполнения внутренних функций, анализировать сложные и длинные функции, то тут prxtool практически безполезен.

Мне кажеться проще забить в батник *.prx и не париться с переименованием.
Можно и так :) Я забыл что батники маску понимают.

ErikPshat
15.01.2010, 15:44
Залил PRXTool v1.1.

Проверьте, всё ли правильно?
Разложил для удобства на батники по списку функций в том порядке, как здесь (http://sceners.org/blog/?itemid=34&catid=4), чтобы соблюсти спецификацию. Ту статью в общем взял за базу.

В архиве лежат два скрытых файла - сам prxtool.exe и библиотека нидов libdoc.xml. Так что не потеряйте их, а то их не видно. Специально спрятал, чобы не мешались в общей папке.

Закиньте в разархивированную папку декриптованный PRX и потестите. Правильно ли я все команды вписал?

Самая интересная функция в пункте 17 с полным дизасмом. Особенно интересна функция дизасма в HTML. То есть, там перекрёстные ссылки (прыжки со смещения на смещение) идут как настоящие ссылки HTML и нажимая на них, перемещаешься на ту позицию, куда она ведёт.

А ещё мне вообще понравилась тоже функция дизасма в HTML, но уже кучи файлов, например прошивки. И при выводе в HTML, все файлы, взаимодействующие между собой, так-же перепрыгиваются от файла к файлу, если смещение указывает на другой файл прошивки или программы.

Чтобы исследовать прошивку и связи между файлами, то нужно в папку с PRXTool кинуть две папки с декриптованными файлами PRX прошивки - это папка "KD" и папка "module". Вот эти папки нужно и закинуть.
После дизасма 17-ым пунктом, появиться к каждому файлу прошивки свой файл HTML. Так вот, ссылки из одного файла, работают к другому. Просто в браузере можно перемещаться в пределах одного окна по взаимосвязанным смещениям от файла к файлу, перемещаться в браузере кнопкой "Назад" и "Вперёд". В общем всё работает.

Нулевой пункт 00 - удаляет весь мусор, все созданные текстовики и html-ы.

Добавил в шапку PSPDecompiler.

mc707, посмотри, там TiRaNiD что-то обновлял, какие-то файлы добавлял Rev: 2492 (http://svn.ps2dev.org/listing.php?repname=psp&path=%2Ftrunk%2Fprxtool%2F&opt=dir&sc=1) в свою PRXTool.
Может нужно обновиться? Я ещё не знаю, как с SVN качать. В линуксе легко. Там уже это заложено, подставил адрес и поехало.

mc707
18.01.2010, 09:03
Посмотрел, отличий минимум. Различия имеются только в файле ProcessPrx.C. В комментариях написано, что теперь помогает дизасмить те файлы, у которых поврежден заголовок.

А насчет скачивания с svn, по крайней мере в cygwin, - аналогично линуксу. Из домашнего каталога пишешь "svn checkout svn://svn.ps2dev.org/psp/trunk/prxtool" и все.

ErikPshat
18.01.2010, 09:16
mc707, спасибо. С SVN разобрался. Воспользовался прогой под виндус - TortoiseSVN. Ничё, мне понравилось. Правда помучился, пока разобрался. Как только адреса не подставлял в эту черепаху, а скачивать с SVN ни за что не хотел.

Спасло то, что я когда скачал исходники TiRaNiD-а, то заметил, что его папка приобрела другой вид, с зелёной галочкой. Нажал правой кнопкой и выбрал обновить. Так он тут-же сам подключился и скачал обновления автоматом. После этого стало всё качаться. Я даже с SVN скачал все исходники для PSP, включая branches, tags, trunk и vendor. Всё это 800 с лишним мегабайт =))).

SunTexnik
28.01.2010, 11:39
воо...спасибочки за тему,будет что поковырять вечерком
начну пожалуй с исходников программ на пс2,ибо они уже в elf все и на мой взгляд платформа не использует весь свой потенциал *.*

а вот и первый запуск



сопсна вот что я получил в процессе диассембла маленькой программки в elf формате.отобразились из всего кода копейки т.т
http://imageban.ru/out/2010/01/28/b5bc5be35c19bd3f455db12c9df563f1.jpg

остальное как видно,пошло в раздел ошибок

ErikPshat
28.01.2010, 13:37
SunTexnik, а ты при запуске это выбирал (выделено синим):

http://s001.radikal.ru/i194/1001/59/5bd7aa45ae01.pngС чего ты взял, что это ошибки. Там лучше открывай окно "Name Window", буква "N" в меню. По нему лучше ориентироваться и пользуйся правой кнопкой на функциях. Можно в текстовом формате выводить (text), можно прыгать по смещениям (jump) и т.д.

SunTexnik
28.01.2010, 14:21
ммм...открывал
http://i056.radikal.ru/1001/69/6cd388151f58.png
так как все программы пс2 в формате elf a не psx

ErikPshat
28.01.2010, 14:31
SunTexnik, в принципе да, PSX вероятно нужно выбирать для PS1.
Ну так PRX на PSP тоже ведь все в ELF-формате.

Там при запуске нужно ещё вид процессора выбирать. Какой там процессор на PS2?

SunTexnik
28.01.2010, 14:35
сейчас посмотрим...
Процессор: 128-разрядный микропроцессор «Emotion Engine» на тактовой частоте 294 МГц, 10,5 млн транзисторов
http://ru.wikipedia.org/wiki/Emotion_Engine

ErikPshat
28.01.2010, 22:52
Значит MIPS R5900

http://s001.radikal.ru/i195/1001/aa/32453ffc3ca3.png

Cheppus
30.12.2010, 03:40
Пытаюсь с помощью PRXTool дизассемблировать файл music_player.prx. Но можно сказать что ничего не распознаётся. Распознаётся не как эльф, а как бинарный файл. Выбираю UNIX потом ELF, выбираю нужный проц, но сверху только binary. Пробовал разными версиями ida. Что за шляпа?

ErikPshat
30.12.2010, 03:48
Cheppus, а ты music_player.prx перед дизасмом декриптовал? Посмотри его в хексе.

Если декриптован, то в первых 4-ёх байтах должно быть написано .ELF
Если написано ~PSP, значит файл запакован и закриптован.

Cheppus
30.12.2010, 04:07
Блин, не знал что надо декриптовать)

vladgalay
12.01.2011, 20:54
Извините за глупый вопрос, но можно ли скомпилировать ASM код, полученный через PRXTool, и если можно, то как?
Заранее благодарен!

Yoti
13.01.2011, 00:15
vladgalay,
ты бы почитал про asm то... Хотя бы тут (http://ru.wikipedia.org/wiki/Ассемблер) и тут (http://ru.wikipedia.org/wiki/Язык_ассемблера).

ErikPshat
23.10.2012, 02:48
Установка IDA PRO 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.
Советую ставить последнюю скомпилированную версию питона Windows x86 MSI Installer (2.6.6) (sig) (http://www.python.org/download/releases/2.6.6/)
Затем разархивировать пакет питона для IDA idapython-1.5.2.3_ida6.1_py2.6_win32.zip (http://code.google.com/p/idapython/downloads/list) (IDAPython 1.5.2.3 for Windows, IDA Pro 6.1 and Python 2.6).

Скопировать все папки "docs", "examples", "python" и "plugins" в папку "C:\ida61\", соглашаясь на замену.
Скопировать файл "python.cfg" в папку "C:\ida61\cfg\"

Далее остальные папки плагинов из этой раздачи в папку с программой "C:\ida61\", если надо.
При первом запуске IDA PRO сама должна подхватить и сконфигурировать Питона и плагины.



Для PS3 понадобится библиотека процессора Cell ps3spu.w32 - process module for IDA (https://github.com/anita999/ps3spu) (добавил ссылку в шапку)


Скачиваете архив (https://github.com/anita999/ps3spu/downloads) с репозитория.
В архиве будут исходники(они вам не нужны) и 2 папки "cfg" "procs" с уже скомпилированным модулем ps3spu.w32 и конфигом ps3spu.cfg.
Нужно скопировать эти 2 папки в корневую папку IDA, например C:\ida61\
При открытии декриптованного файла прошивки PS3 в IDA PRO, будет выдан запрос на выбор процессора.
Выберите из раскрывающегося списка "PS3 CellBE SPE: ps3spu" и нажмите рядом кнопку Set.
Вверху выберите "Binary file", внизу добавьте галочку на "Manual load", как на картинках ниже.
После открытия файла исследуйте код дизассемблированием байтов кнопкой "С" на клавиатуре.
Код будет математически просчитан процессорными функциями PS3.


7883 7884

ErikPshat
26.06.2013, 22:38
На выходе не появляются сишник и хедер, что за фигня?
Проверьте, действительно ли файл имеет расширение *.prx?
Действительно ли он декриптован, т.е. начинается с ELF?

Yoti
27.06.2013, 00:59
nan0_mal,
тогда пример в студию.

ErikPshat
27.06.2013, 15:52
nan0_mal, ну так где тот файл, который:
Этим требованиям соответствует


Мы бы с Yoti хоть посмотрели бы, что за такой вредный файл, который не даёт себя декомпилировать.

ErikPshat
27.06.2013, 16:23
Файлы декриптуются кирком процессора, поэтому проще натравить файл на кирк, подставить скрамблер, тег и ключ, чтобы получить результат.
Хотя на компьютере это тоже вполне возможно, но т.к. некоторые области кирка пока не раскрыты, то функционал у таких PC декрипторов будет ограниченным.

Потому что PRXDecrypter 2.7 не декриптует модули прошивкиДа вроде он почти все модули декриптует, за исключением некоторых, к которым ключи не были добавлены.
Так же, прекрасно справляется с декриптовкой модулей прошивки - PSARDumper (http://www.pspx.ru/forum/showthread.php?t=82925).
Недостающие ключи для PRXDecrypter и PSARDumper можешь взять здесь (http://www.pspx.ru/forum/showthread.php?t=85431).
Просто смотришь номер Тега в позиции 0xD0 недекриптуемого файла и добавляешь к нему ключ или проще вставить сразу всю пачку ключей.

LaKosta
30.06.2013, 14:07
На выходе не появляются сишник и хедер, что за фигня?Этим требованиям соответствуетМинут через 20 кину-ща не у компа.
Мне тоже интересно было посмотреть.
20 минут прошло - устал ждять :(

Yoti
10.11.2013, 21:43
Надо в сырцы вставить и скомпилить
Именно. Или можешь в бинарнике хексом подменить какой-нибудь, но это лишний гемор.

ErikPshat
17.05.2014, 06:03
Вот она, попалась рыбка :)

Ломанул Fontographer 5.2.3 Build 4868. Могу продать за пол-цены https://www.cleverbridge.com/313/uurl-kg64b86yj9
Пришлось потратить ночь, а всё из-за того, что какой-то крекер, по видимому ..::CyberGod::.. расплодил по сети ужасно ломанную версию 5.2.2.4766, которая на всех сайтах мира зафиналена :D и там он умудрился в 1000 местах проставить свои брейкпоинты, ему не понравились буквы PA перед каждой фразой через каждые 100 байт :xDD: и ещё какой-то крекер расплодил совсем кривую 5.2.3.4868, таким образом шрифты отображаются какими-то кляксами с зеброй и удивительно, как вообще такая программа запускалась.

Хотя на самом деле перепрыгнуть через проверку регистрации требовалось всего в одном месте - 2 байта :xD: - это почти битхак называется

10073

10074

10079

10076

10078