Портируем старые плагины, такие, как Music.prx, под прошивку 6.60
Портируем старый плагин Music.prx под прошивку 6.60/6.61
В общем пришла идея телепортации старинного отличного плагина Music.prx под прошивку 6.60.
Изначально этот плагин был изготовлен для консоли "neogeoCD 0.91" разработчиками Yoyofr & ZeLurker. Затем AhMan портировал его под PSP, во времена прошивок 3.02 ОЕ и совершенствовал его до прошивки 3.52 M33-2, добавляя кодеки и функционал.
Позже за работу взялся Cpasjuste и выпустил релиз, якобы адаптировав плагин под прошивку 3.90. С тех пор эта версия так и летает по всем просторам интернета и хорошо зарекомендовала себя в работе даже на новых прошивках.
Собственно суть проблемы такова, что на прошивке 6.60 плагин всё же неплохо работает, однако присутствуют свои костыли - это игнорирование настроек в файле конфигурации music_conf.txt, не работающие некоторые функции, по сочетаниям кнопок.
В чём состоит проблема?
Я просмотрел код плагина, он поставляется с исходниками. Несмотря на заявление Cpasjuste о портировании плагина под прошивку 3.90, я прекрасно вижу функции NID-ов от прошивок 3.7x. То есть, в прошивке 3.90 все NID-ы функций поменялись и меняются эти NID-ы постоянно от прошивки к прошивке.
Что такое NID-ы?
Это названия функций, которые вызываются именно по названию и выполняют присущие им действия. Но начиная где-то с прошивок 3.7x, Sony перестала напрямую вызывать функции в файлах своими именами, а стала скрывать их, хешируя названия в 4-байтный код, то есть к названию модуля прикрепляет закодированный номер функции. Вот как это выглядет на небольшом примере, после вывода дизассемблером PRXTool v1.1
Первая 4-х байтная единица, например 0x01562BA3 - это и есть захешированный номер NID функции.
Следом в скобках указывается позиция, где она записывается.
И через тире уже нам дизассемблер даёт подсказку о самом настоящем названии функции в нехешированном виде. На самом деле этих названий вы не увидите в файле. Это разработчики PRXTool уже внесли в программу названия основных известных функций, которые не меняются.
Но на самом деле, есть ещё множество подфункций, которые SONY умышленно изменяет при выпуске очередного релиза прошивки. Вот так их опознаёт PRXTool:
То есть, дизассемблер определяет по коду программы область подфункций, принадлежащей основному модулю sceAudio_driver и, не зная настоящего названия функции, просто подставляет его цифровой хеш к названию основного модуля - sceAudio_driver_0B74AAA2
Что за 4-х байтный хеш функции?
Как я уже упоминал ранее - это хеш полного названия функции. Хотя я и раньше оперировал с хешированными НИДами и умудрялся отыскивать нужные, но не представлял откуда берётся этот хеш. Этот секрет недавно мне поведал frostegater в соседней теме, где он выложил свою консольную утилитку по превращению названия функции в её захешированный вид. Затем Yoti облегчил этот процесс, нарисовав GUI интерфейс для быстрого ввода-вывода информации . Вы можете сами потестить программку: N1D G3N3R@T0R.exe
На данном примере, на скриншоте, я взял первую строчку из 1-го блока кода выше, где указаны нерандомизированные НИДы, чтобы наглядно увидеть вывод хеша из названия функции:
0x01562BA3 [0x00001354] - sceAudioOutput2Reserve
Как видно, название функции sceAudioOutput2Reserve превращается в 4-байтный код 0x01562BA3.
А заменив это название в захешированный вид, его можно использовать как-то так: sceAudio_01562BA3.
Хешь извлекается следующим образом... Из названия функции генерируется чек-сумма SHA-1 (160 bit).
В данном случае SHA-1 равна - A32B56014147A25FDE15A7AF4D596DADA06BE3AB
Затем берутся первые 4 байта и инверсируются побайтно. Получаем 01562BA3.
С чего начинать?
Начинать следует с дизассемблирования этих функций самого плагина music.prx и вот что он нам выдаёт (я почистил лишние куски кода, которые нам абсолютно не нужны и оставил только названия функций, которые изменяются от прошивки к прошивке):
Вот это все изменяющиеся функции, используемые плагином для своей работы.
А теперь посмотрим на SilverSpring's PSP PRX Libraries Documentation Project. Эту тему я специально подготовил, т.к. его сайт постоянно находится в ауте. И он много времени отдал этому проекту, вычисляя NID-ы: имена функций на каждой прошивке.
Итак, открываем libdoc от прошивки 3.7х и смотрим файлы, соответствующие модулям в плагине music.prx, видим следующие цифры:
Сравнив показания плагина music.prx выше и функций прошивок 3.7х здесь, мы видим, что идёт 100% совпадение!!!
Скажу больше, в прошивке 3.90 нет этих цифр впомине. То есть, там НИДы функций полностью изменены. Поэтому заявление разработчика, что он адаптировал плагин под прошивку 3.90 - явная ложь.
Итог: нам теперь явно ясно, что для портирования плагина под прошивку 6.60, необходимо искать соответствующие НИДы функций в этих файлах:
Название файла Название модуля
kd/audio.prx sceAudio_Driverkd/display.prx sceDisplay_Servicekd/power.prx scePower_Servicekd/ctrl.prx sceController_Service
Проще говоря, НИДы плагина прошивки 3.7х необходимо сопоставить НИДам тех же функций прошивки 6.60.
Заменить их в исходниках и заново скомпилировать новый адаптированный плагин под 6.60.
Как правило, у каждого модуля существует определённый набор функций и их количество и порядок в файле редко изменяется. Поэтому, думаю, не составит труда сопоставить НИДы этих прошивок, либо ещё промежуточных и вывести параллели между прошивками.
Далее можно выстроить параллели каждого типа НИДа в каждой прошивке и составить таблицу.
Процесс исследования плагина music.prx
Для начала, необходимо вычислить все функции рандомных NID-ов, используемых плагином. Скачиваем дизассемблер PRXTool и закидываем туда наш подопытный файл music.prx.
Запускаем батник "16. ImpExp & Alias Print.bat" и получаем на выходе все Импорты и Экспорты функций, используемых плагином в текстовом файле "16_Import_Export.txt".
Удаляем все лишние строки со статическими функциями, т.е. у которых нет в названии функции суффикса с 4-значным НИДом.
Далее, вычисляем по рандомным НИДам версию прошивки, от которой эти НИДы были использованы. Ну тут ясное дело, что НИДы функций принадлежат прошивке 3.71.
Поэтому берём файлы прошивок 3.71, в которых используются эти функции и дизасмим их. Так как я больше разбираюсь в HTML, то я выбрал батник дизасма "24. DISASM2HTML.bat" и сохранил результаты в папке под названием прошивки "371". Затем произвёл то же самое действие с аналогичными файлами от других прошивок, чтобы проследить сдвиги функций от прошивки к прошивке.
Таким образом эти HTML файлы от разных прошивок я просто сравнил в браузере. Разница в НИДах и сходство кода видна невооруженным глазом. На этом примере я произвёл поиск в дизассемблированном файле audio.prx.html по НИДу sceAudio_driver_138A70F1 в прошивке 3.71. Затем, посмотрев на окружение найденного, произвёл поиск по соседнему значимому слову sceAudioOutput2Release в других прошивках, что явно вывело на аналогичный код и выдало изменившиеся НИДы, как на тарелочке с голубой каёмочкой.
Хорошая тема, поддержку этого плагина кстати добавили в тн-в на вите
может можно его модифицировать что-нибудь прикрутить типа персонализированных плейлистов для каждой отдельной игры пс1 и всякое такое?
поддержку этого плагина кстати добавили в тн-в на вите
Оу, не знал этого. Тогда что нам мучиться, TN по-видимому всю работу уже произвёл. Даёшь плагин TN-V в студию.
Ну собсно тему можно переименовать, как общую для всех плагинов, так как то, что я описал, касается всех плагинов и программ, использующих изменяемые НИДы функций.
Ну плейлисты вроде как поддерживаются, судя по коду в исходниках. Да и модификацию можно произвести, имея исходники. Насчёт персонализации для каждой игры ты уже переборьщил ))
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Насчёт персонализации для каждой игры ты уже переборьщил ))
ну всмысле чтобы плагин определял айдишник игры как это делает взломщик
и заготовленные заранее мп3 файлы играл для этого айдишника (а то осты пс1 приходится на компе хранить и заливать на виту под каждую игру вручную)
в текущей версии которую я качал отсюда такой функции вроде нет: http://wololo.net/talk/viewtopic.php?f=56&t=17071
там в списке мьюзик.прх - фиг занет кто эту версию под 6.60 делал и когда и как
там в списке мьюзик.прх - фиг занет кто эту версию под 6.60 делал и когда и как
Скачал, проверил, сравнил = совпадение 100%.
Это и есть он, плагин для прошивки 3.71.
Ты попробуй в конфиге ms0:/seplugins/music_conf.txt сменить директорию проигрывания музыки, например на DIR = ms0:/MUSIC/ или ещё что-нибудь поменять - оно не работает, всегда музыка подхватывается только из конфига по-умолчанию, встроенного внутри плагина music.prx, там прописан путь ms0:/PSP/Music/
По поводу поддержки плейлистов, я вижу в коде плагина строчки:
ea3.EA3.ID3.id3.TIT2 // это поддержка тегов, встроенных внутри музыкальных композиций
pl_cur:%08X // это наведение курсора на плейлист
Plylst Status:%08X // это информация о плейлисте
PLYLST_MEM..Playlist_Thread // и такие строчки есть
Ещё проверь, действительно ли работают эти функции, а то я сомневаюсь:
VOLUP //увеличение громкости
VOLDOWN // уменьшение громкости
START_STOP // остановка и воспроизведение
PREVIOUS // предыдущий трек
NEXT // следующий трек
MODE_TOGGLE // переключение режима воспроизведения
CPU_NEXT // увеличение скорости процессора
CPU_PREV // уменьшение скорости процессора
RELOAD // перезагрузить музыку
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Вообщем тут такое дело...
Я сейчас живу в чужом городе, в чужой квартире, без PSP, без телевизора и радио.
Нужны декриптованные файлы PRX от разных прошивок, желательно полный набор: 3.71, 3.80, 3.95, 5.00, 6.20, 6.35, 6.60.
Это основной ряд прошивок, в которых происходили значительные изменения.
Иначе проследить передвижение NID-ов будет проблематично.
Для этого нужно:
не вышло извлечь из 6.35 практически ничего (точнее вышло все кроме prx подулей), пробовал два раза
Ага, видел твои пустые папки 6.35
Попробуй мой дампер. Правда я его только что сделал на коленке, по бырому скопипастил все ключи из нашей таблицы и закомпилил. Проверять код было некогда, возможно не туда вставил и не то. Распространению не подлежит!
Сообщение от vash
П.С.: а для гошки декриптованные прошивки нужны?
Ну на данный момент может и не нужны.
Однако неплохо было бы пробелы в базе заполнить. А то ведь в нужный момент никогда не найдёшь.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 04.04.2014 в 21:13.
vash, помню Нейроновский дампер тоже не всё извлекал, а Проксимовский отрабатывал, поэтому я в инструкции поменял их местами, хотя там раньше стоял от Нейрона. Получается один там косячит, другой здесь.
А мой дампер над головой в посту что? Там забиты все мыслимые и немыслимые ключи от всех прошивок и даже от Виты )))
Правда я на скорую руку скачал дампер Проксимы, запилил туда все наши ключи и скомпилировал. Не знаю, заработает ли вообще.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, не спеши. Я твоим дампером не смог сдампить 6.35, за то смог им сдампить 6.60 от Гошки, а тем не смог (пустые и неполные папки). Так что, косяки в обоих версиях дамперов.
Последний раз редактировалось ErikPshat; 20.03.2014 в 15:22.
vash, во какая засада ))) а я уже поменял местами в инструкции. Ну пусть будет, всё равно лежат во вложении, потом надо будет с ними отдельно разбираться.
А тем временем я скомпилил дампер с исходников Нейрона с нашим пакетом ключей. Если не трудно, можешь проверить на 6.35 и на Гошке, а вдруг всё подхватит...
Кстати, оказывается там, во вложении у дамперов, лежит же моя давняя сборка, не помню какая, когда и зачем, под названием PSARDUMPER_PSPxMOD.7z, а я сразу не заметил, но помню собирал тщательно и с любовью . Можешь ещё её потестить, если есть время. Тоже интересно узнать о костылях.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 03.04.2014 в 20:14.
ErikPshat, из вложения 6.35 сдампила, 6.60 от гошки - нет. PSARDUMPER_PSPxMOD 6.35 не сдампила, 6.60 от гошки - да.
Раньше, та что ты переделал ( https://www.pspx.ru/forum/showpost.ph...1&postcount=11 ), работала наоборот.
ErikPshat, из вложения 6.35 сдампила, 6.60 от гошки - нет.
PSARDUMPER_PSPxMOD 6.35 не сдампила, 6.60 от гошки - да.
Ну понятно. Теперь ясен пень, что:
Дампер Нейрона дампит 6.35, а для Гошки не хватает кода.
Дампер Прксима дампит Гошку, но спотыкается на 6.35.
Вроде бы так. Соответственно я все свои сборки попутал и использовал исходники и того и другого )))
Главное, что баг установлен, осталось дело за малым, исследовать коды обоих и найти недостающее звено.
Сообщение от SILENT-Pavel
Рассортированные декриптованные (PSARDumper на Vita tn-v 8) PRX из папок kd и module от 3.71, 3.80, 3.95, 5.00, 6.20, 6.35, 6.60 ofws.
Проанализировал через PRXTool файлы audio.prx от всех выложенных прошивок. НИДы у всех прошивок одинаковые, как на 3.71 .
Этого быть не может. Ты по видимому распихал по всем папкам одну и ту же прошивку 3.71. Короче что-то дофига понапутал.
У COOLERbyPSP и vash я скачивал 3.90, 6.35 и 6.60, так там явно все НИДы меняются в каждой нововй прошивке. И исследовал готовые libdoc.xml 3.7х-5.00 с сайта SilverSpring, там аналогичная история, у каждой новой прошивки рандомизированные ниды сменяются в обязательном порядке.
Сообщение от Yoti
1 Для эмулятора, может?
2 Через ноль пишется, через ноль!
3 HUD для 6.35 в своё время собирался добавлением "sceNids_driver_635.o" к строке OBJS в makefile и созданием файла "sceNids_driver_635.S" вида
1. Ну читал редми в исходниках на английском, про эмулятор не понял наверное.
2. Ох, ё.п.р.с.т., опять ноль пропустил, как фрост )))
3. Ну насчёт S я как бы в курсе. Именно так и собираюсь через стубы внедрядь НИДы. Ну так многие и поступают.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
А, да, если кто собирается тоже исследовать НИДы, и не понял, каким образом их дебажить, то через PRXTool нужно пользоваться следующими батниками:
12. PRXstubs.bat - выдаёт компактный чистый список НИД-ов
Плюс в помощь:
14. Depends.bat - чтобы узнать, какому файлу принадлежит модуль функции.
16. ImpExp & Alias Print.bat - выдаёт хорошую расширенную информацию по НИД-ам и их смещениям.
P.S. Файлы от других прошивок ещё требуются...
План действий таков:
После декрипта файлов PSARDumer-ом, в корне создаётся папка F0.
Переименовываете папку под номер прошивки с ясным пояснением, например "371_PRX_Decrypted"
Внутри папки оставляете только папки, содержащие файлы PRX - это следующие папки:
kd - содержит системные файлы PRX
kd/resource - содержит файлы PRX, нормальный дампер их должен тоже декриптовать с заголовком ELF в хедере.
vsh/module - содержит ресурсные файлы PRX
vsh/etc - содержит файлы версии прошивки version.txt и index_0X.dat - это тоже файлы PRX, тот же version.txt, только в зашифрованном виде, нормальный дампер их должен тоже декриптовать и на выходе в текстовом редакторе должны увидеть то же содержимое, как в version.txt.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 20.03.2014 в 15:21.