Портируем старые плагины, такие, как 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 в других прошивках, что явно вывело на аналогичный код и выдало изменившиеся НИДы, как на тарелочке с голубой каёмочкой.
Проанализировал через PRXTool файлы audio.prx от всех выложенных прошивок. НИДы у всех прошивок одинаковые, как на 3.71 .
Этого быть не может. Ты по видимому распихал по всем папкам одну и ту же прошивку 3.71. Короче что-то дофига понапутал.
У них же разный размер у папок по прошивкам, если это была одна - то размер был бы одинаковый, каждый раз после декриптации удалял все остатки файлов от другой прошивки и делал с нуля новую. возможно вита с тн-в для этого не предназначена или фтп клиент виты затупил, нужна реальная псп наверное. прошивки качал из базы пспх.ру
кроме 6.35 все делал по инструкции, проверял несколько раз внимательно
реальная псп щас далеко от меня к сожалению
Последний раз редактировалось SILENT-Pavel; 20.03.2014 в 14:44.
SILENT-Pavel, поставь Araxis Merge и сравни папки разных прошивок. Получишь результат. В проге есть возможность сравнения не по одному файлу, а сразу по 2-3 папки. Увидишь, какие файлы содержат различия, а какие идентичны. Мне долго качать эту прогу, весит аж 40 Мб. Хотя щас скачаю за часок.
Скорее всего декриптовалось всё нормально, просто когда ты всё раскладывал по папкам, наверняка копирнул в буфер прошивку 3.71 и таким образом её файлы раскидал по разным прошивкам. Поэтому размер папок разный, но обновлённые файлы от 3.71. А может это у меня что-то глюкнуло, т.к. название файла одно было audio.prx, я прогонял через PRXTool и каждый раз закидывал файл от другой прошивки. В результате все тесты оказались 100% идентичными при сравнении.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Другие консоли: Все PSP, все PSV, SCPH-1002, SCPH-102, SCPH-77008, CECH-4208C, SCPH-1000R
Регистрация: 19.03.2008
Адрес: Россия
Сообщений: 5,742
Вы сказали Спасибо: 819
Поблагодарили 3,844 раз(а) в 2,016 сообщениях
Сила репутации: 1
Репутация: 3844 
(репутация неоспорима)
Про какие именно nid'ы хоть речь? Они могут быть изменяемые (обычно это те, что используются внутри ядра) и неизменяемые (после изменения которых отвалились бы старые игры, так что преимущественно юзермоды); могут быть быть прямые (которые sha1 от функции) и непрямые (которые "солёные" и резолвятся прошивкой в прямые).
У них же разный размер у папок по прошивкам, если это была одна - то размер был бы одинаковый, каждый раз после декриптации удалял все остатки файлов от другой прошивки и делал с нуля новую.
Ну так ты сравнивал свои папки? Я кстати не поленился и скачал посвежее версию. Ну и сравнил сразу 3 папки. Для сравнения выбрал 2 крайние и одну посередине: 3.71-5.00-6.60
Ну и вот отчёт твоей проделанной работы
Там персиковым цветом выделены несвязанные файлы, т.е. которые есть в одной папке, но отсутствуют в другой.
А бирюзовым цветом выделены вставленные файлы, т.е. которых не было в других папках, но были добавлены в новых.
Собсно программа сверяет файлы не по размеру, а по внутреннему содержимому побайтно и в столбике "Различия" показывает количество различающихся блоков. Ну и как видно, ни один файл не имеет ни одного отличия
Так что с тебя щтрафной: декриптовать всё по новой и по правилам, написанным в той теме в шапке.
Сообщение от Yoti
Про какие именно nid'ы хоть речь? Они могут быть изменяемые
Да, в шапке я именно про это упоминал, поэтому не выводил в список неизменяемые ниды. Но это нужно ещё проверять и отсекать солёные. Хотя фрост уверял, что можно использовать и так и эдак, т.е. под своим прямым названием, либо с хешем в суффиксе. Делать-то мы будем под одну прошивку 6.60, под все другие нам не надо.
Ну если что накосячим, надеюсь ты направишь в нужное русло
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Другие консоли: Все PSP, все PSV, SCPH-1002, SCPH-102, SCPH-77008, CECH-4208C, SCPH-1000R
Регистрация: 19.03.2008
Адрес: Россия
Сообщений: 5,742
Вы сказали Спасибо: 819
Поблагодарили 3,844 раз(а) в 2,016 сообщениях
Сила репутации: 1
Репутация: 3844 
(репутация неоспорима)
Сообщение от ErikPshat
Хотя фрост уверял, что можно использовать и так и эдак, т.е. под своим прямым названием, либо с хешем в суффиксе. Делать-то мы будем под одну прошивку 6.60, под все другие нам не надо.
Ну да, можно. Я много читал про nid'ы, но это было на английском и я уже не помню где. Возможно, на lan.st (вечная память).
сделаем пробник по новой с чистого листа. может и правда спешил и что-то перебил горячими клавишами. Старое вложение удалил.
взял 3.71, 5.00 и 6.35
взял три дампера под 6.60 из сборника "PSARDumper's Pack 2.60-6.60"
а именно:
PSARDumper_660
PSARDumper_660_neur0n
PSARDumper_660_proxima
папку F0 целиком заливаю вообще ничего не сортируя самостоятельно из неё
все пожато LZMA и для каждой прошивки 3 версии папки F0 от разных дамперов (подписаны)
если все внутри будет правильно, доделаю остальные прошивки и залью в базу вложением,
либо может кто поможет побыстрее с реальной псп
Другие консоли: Все PSP, все PSV, SCPH-1002, SCPH-102, SCPH-77008, CECH-4208C, SCPH-1000R
Регистрация: 19.03.2008
Адрес: Россия
Сообщений: 5,742
Вы сказали Спасибо: 819
Поблагодарили 3,844 раз(а) в 2,016 сообщениях
Сила репутации: 1
Репутация: 3844 
(репутация неоспорима)
Вот вам архивчик, который я использую для первичного реверса модулей. Кинуть в папку bin/elf/prx, запустить батник. Есть моменты, которые я всё хочу доработать, но они не такие критичные.
SILENT-Pavel, эх-эх, опять косяки, косяки да пяточки Ты бы хоть сам бы проверил, я же тебе уже и прогу подогнал.
Позже допишу, что почём.
Короче сравнил сначала в пределах одной прошивки, как отрабатывают дамперы.
Ну то есть сравнивал так:
!3.71- !3.71-neuron !3.71-proxima === все 3 папки оказались идентичными. Вроде всё как надо.
Потом сравнил следующие прошивки:
!5.00- !5.00-neuron !5.00-proxima === прошивки Unknown и neuron полностью совпадают, за исключением того, что у нейрона извлёкся ещё один лишний секретный файл: vsh\module\npsignup_plugin.prx. Видимо 2 других дампера не знают про него ничего. Нужно бы посмотреть на заголовок его в недекриптованном виде. Просьба извлечь его без декриптовки.
А вот с proxima у них огромные различия. Откуда Проксима достал эти файлы - непонятно. Ну не могут они так декриптоваться из одного и того же EBOOT.PBP 5.00, чтобы на выходе у Проксимовского декриптора получились другие файлы.
Короче, сравнил я файлы !5.00-proxima и 3.71-proxima - они одинаковы Получается вместо 5.00 прошивки, дампер Проксимы декриптовал ещё раз прошивку 3.71.
Потом сравнил следующие прошивки:
!6.35- !6.35-neuron !6.35-proxima === только дампер Нейрона извлёк все файлы PRX. Unknown и proxima их не смогли вытащить, папки kd и module пустые. И так же, прошивки Unknown и neuron полностью совпадают, в тех оставшихся файлах RCO, которые в папке resource.
А вот с proxima у RCO опять же отличия. Проксимовский дампер туда положил файлы от прошивки 5.00
Потом стал сравнивать разные прошивки одного дампера !3.71- !5.00- !6.35- === различия есть, но их очень мало. Короче дальше не буду рассказывать, потому что ещё дальше полнейший бред. Да что говорить, если даже IPL у прошивок 3.71, 5.00 и 6.35 одинаковый )))
В общем такое ощущение, что PS VITA имеет крутой кэш и по видимому кэширует предыдущие действия. Если в следующий раз попадаются файлы с теми же именами, она их достаёт из кэша, чтобы не тратить лишнее время на декриптовку того же по названию файла, который недавно декриптовали Вот такое складывается впечатление.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Значит, нужно декриптовкой заниматься на ПСП и дампером от Нейрона? Могу сейчас заняться этим. Выложу в теме [БАЗА] Декриптованные RCO и PRX от всех прошивок без RCO-файлов.
П.С.: ErikPshat, просьба, уточни, от каких прошивок нужны на данное время эти файлы, смысла делать ото всех нет.
[БАЗА] Декриптованные RCO и PRX от всех прошивок без RCO-файлов.
vash, лучше делай сразу по инструкции в той теме, которую я написал там в шапке, чтобы потом лишний раз не переделывать работу.
Например папки "codepage", "data", "dic", "font" совершенно не нужны во всех архивах, т.к. они во всех прошивках одинаковы и никакой полезной нагрузки не несут.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Значит, нужно декриптовкой заниматься на ПСП и дампером от Нейрона?
Не факт. Просто дампер от Проксимы повёл себя так из-за кэша Виты. Скорее всего точняк Вита подсовывала файлы от предыдущих действий, поэтому в папке оказывались файлы именно от предыдущих декриптовок. В папке 5.00 оказывались файлы от 3.71, а в папке 6.35 оказывались файлы от 5.00. Соответственно, если при декриптовке 6.35 не получилось дамперу извлечь файлы PRX, то и Вита из кэша ничего не доставала.
Думаю было бы то же самое с дампером Нейрона, если бы его запускали в последнюю очередь. То есть, опять бы складывались файлы из кэша Виты от предыдущих декриптовок.
Единственное отличие дампера Нейрона, что у него заложен механизм декриптовки 6.35, а другие его не учли. Я даже предполагаю где это надо копать. Дампер Unknown повёл себя так на прошивке 6.35, потому что сделан был на осове дампера Проксимы, по видимому SILENT-Pavel, использовал одну из моих версий, ведь там одна версия была основана на Проксиме, а другая на Нейроне. Но моя версия в теме ПСАРдампера, помнится, должна была извлекать и декриптовать файлы rebootex в корне и файлы *.img + ещё какие-то файлы, потому что я там добавлял код и ключи.
И ещё у меня есть мысля, что на Вите должна быть функция в настройках "Отключения КЭШа" ???
Сообщение от Yoti
Не во всех, но в последних.
Ну там какой-то файл переехал из одной папки etc в папку codepage вроде и ещё может какие изменения. Лень просто щас копаться и уточнять эти несущественные вещи.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, работает на вите.
Главное отличие визуальное от не портированного - больше информации при нажатии SELECT + квадрат
апд: походу дебаг стоит единичка в конфиге. он эту инфу и показывает
апд2: работает функция "IN_GAME_MUTE = SELECT|HOME" с эмуляцией хоум на Л + Р
на не портированном плагине эта функция не работает но показывает что типа включается и выключается
апд3: на обоих версиях плагина не получается сменить частоту цпу
Последний раз редактировалось SILENT-Pavel; 30.03.2014 в 16:18.
походу дебаг стоит единичка в конфиге. он эту инфу и показывает
Так значит он стал настройки из конфига подхватывать? Говорили, что пофигу, что написано было в конфиге. Даже если сменить путь до музыки с ms0:/PSP/Music/ на ms0:/Music/, то он всё равно проигрывал только из папки по умолчанию ms0:/PSP/Music/
Сообщение от SILENT-Pavel
апд2: работает функция "IN_GAME_MUTE = SELECT|HOME" с эмуляцией хоум на Л + Р
на не портированном плагине эта функция не работает но показывает что типа включается и выключается
+ = Отключение звука в игре.
Ну просто замечательно! Слышал про такой баг, когда в играх не отключался звук музыки.
Сообщение от SILENT-Pavel
апд3: на обоих версиях плагина не получается сменить частоту цпу
ОК, буду разбираться...
Кстати, на Вите возможно изменить частоту эмулятора PSP? И эти настройки правильно в конфиге стоят?
ENABLE_VSH_CLOCK = 1 #set to 0 to disable the VSH from changing the cpu's speed, normally this is 1
#the vsh normally changes the clock speed when playing music with the screen off (to 133mHz cpu/44mHz bus)
#when stoping the browser
#up to 333mHz when playing certain video files (possibly, I haven't been able to confirm this)
#and back to 222mHz when the above things are stopped
#this also allows overclocking in the vsh browser
CPU_SPEED = 222 # SELECT: in 3.40OE (and possbily other fws) setting the clock above 222 (bus > 111) causes the XMB (VSH) to crash
# This seems fixed in 3.52-M33 2, if you have problems, you might want to update
# 1-333, cpu speed to start with
BUS_SPEED = 111 # SELECT: if you have problems, try changing this to 222/111 , some things don't like you changing the cpu speed
# 1-167, must be less than half the cpu speed
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 31.03.2014 в 02:57.
1. да
2. да
3. да
4. да
5. да
6. да
7. нет
8. нет
9. ?
10. да
11. да
12. да
старый оригинальный плагин с вололо:
1. да
2. да
3. да
4. да
5. да
6. да
7. нет
8. нет
9. ?
10. да
11. нет
12. да
---
- наверное в обоих случаях перезапуск плагина работает, но визуально ничего не происходит.
Сообщение от ErikPshat
Кстати, на Вите возможно изменить частоту эмулятора PSP?
внутри xmb tn-v изменять можно
кстати насчет кэша псп ты спрашивал выше - нет такой настройки
так что все мои тесты считать адекватными только для другой виты, а не для псп сцены в целом
например потому, что виты тн-в может включать старые плагины иначе чем псп 2000 например, на псп мб не работает то что поддерживается тн-в для старых плагинов
ну тут такое дело, что мьюзик в вите читается из памяти виты РЕЛИНКОМ из псп/мьюзик вроде
другие правила, изменять эти настройки не стоит и только усложнит весь процесс, т.к. музыку удобно скидывать в память виты и быстрее нужен чувак с реальной псп опять же. но дебаг энейблер опция в txt идущем с плагином работает вкл/выкл, т.е. файл читается плагином, но толку то
всмысле персонализированных плейлистов для айди игры вроде же не появилось от порта на 6.60
оффтоп:
а вот насчет картинок типа скринов с игр в плагине. эти картинки дублируются в памяти виты независимо от памяти псп. интересная система и удобнее чем на обычной псп. точнее почти как на ГО версии. можно остановить игру и в памяти виты просматривать скрины
Последний раз редактировалось SILENT-Pavel; 01.04.2014 в 18:44.
SILENT-Pavel, я имею в виду, что на PSP музыку можно ложить в папки ms0:/PSP/MUSIC/ или ms0:/MUSIC/
Но плагин, по идее, должен брать музыку исключительно только из той папки, которая прописана в конфиге, у которой нет комментирующего знака # спереди. Это 12 и 13 строчки в конфиге, идущим в комплекте с плагином music_conf.txt:
DIR = ms0:/MUSIC/ #must end with a slash
#DIR = ms0:/PSP/MUSIC/
Вот я и прошу проверить этот факт.
Сообщение от SILENT-Pavel
но толку то в смысле персонализированных плейлистов для айди игры вроде же не появилось от порта на 6.60
А есть пример с исходниками, где такая функция присутствует?
Вообще странно... столько НИДов (14 штук) обновил в плагине, а так мало изменений )))
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Опана... Себе на заметку...
NID функции LoadCoreForKernel_CF8A41B1 присутствует на прошивках 1.00 - 3.7х, а в следующих прошивках изменился.
Нужно ловить и править.