PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   [Вопрос] Портирование FuSa_SD под 6.60 (https://www.pspx.ru/forum/showthread.php?t=104832)

GreeDi 20.06.2014 15:00

[Вопрос] Портирование FuSa_SD под 6.60
 
ErikPshat, прочитал тему и загорелся наконец-то желанием попробовать переписать плагин FuSa_SD под 6.60. Сам с программирование под PSP не знаком, но имею опыт "офисного" программирования на VBA И C#. Но как я понимаю принцип портирования сводится в общем случае к следующему:
-декриптовка prx на самой PSP
-дисассембл через prxtools
-правка кода (обновление команд старой прошивки новыми)
-сборка нового prx
Или я что-то пропустил?
Еще интересует вопрос, есть ли критичные особенности в написании кода плагина при ориентации на PSPgo?

Yoti 30.06.2014 22:51

GreeDi,
после дизасма ты получишь не исходный код, а псевдо-код. Который нельзя скомпилировать и который будет отдалённо похож на оригинальный. Так что плагин ты будешь писать практически с ноля.

GreeDi 01.07.2014 09:51

Yoti,
Очень жаль((( А я уж было понадеялся, что чудеса случаются. Придется разбираться самому, что да как работает)

LaKosta 29.07.2014 01:42

Цитата:

Сообщение от GreeDi (Сообщение 1087622)
ErikPshat, прочитал тему и загорелся наконец-то желанием попробовать переписать плагин FuSa_SD под 6.60.

У этого плагина вроде есть исходники. Его можно адаптировать под 6.60 таким способом: https://www.pspx.ru/forum/showthread.php?t=104559

Нужно попросить исходники у автора http://foosa.do.am/load/1-1-0-29

GreeDi 29.07.2014 09:34

Цитата:

Сообщение от LaKosta (Сообщение 1088245)
У этого плагина вроде есть исходники. Его можно адаптировать под 6.60 таким способом: https://www.pspx.ru/forum/showthread.php?t=104559

Нужно попросить исходники у автора http://foosa.do.am/load/1-1-0-29

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

LaKosta 30.07.2014 00:15

Цитата:

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

Ну тогда есть другой способ аналогичный. Вместо исходников использовать PRX Tool. Он тебе, как на тарелочке, выдаст все используемые программой ниды. Затем останется хекс-редактором заменить их на ниды от 6.60.

Исходный код самому писать нет нужды, достаточно подать питание в верхнюю конечность.

GreeDi 30.07.2014 15:41

Цитата:

Сообщение от LaKosta (Сообщение 1088254)
Ну тогда есть другой способ аналогичный. Вместо исходников использовать PRX Tool. Он тебе, как на тарелочке, выдаст все используемые программой ниды. Затем останется хекс-редактором заменить их на ниды от 6.60.

Чтож, решил всё-таки попытаться. Исходя из описания плагина на сайте, он адаптирован для 5.00.
В итоге:
1. Декриптовал FuSa.prx на своей консоли.
2. Выдернул ниды с помощью PRXTools
получил код
Module information

Name: FuSa_SD
Attrib: 1000
Version: 1.50
GP: 0000B640

Exports:
Export 0, Name syslib, Functions 4, Variables 0, flags 80000000
Functions:
0xD632ACDB [0x000001E0] - module_start
0xCEE8593C [0x000001C0] - module_stop
0x2F064FA6 [0x000001A0] - module_reboot_before
0xADF12745 [0x00000180] - syslib_ADF12745

Imports:
Import 0, Name SystemCtrlForKernel, Functions 1, Variables 0, flags 00090000
Functions:
0x159AF5CC [0x000026E8] - SystemCtrlForKernel_159AF5CC
Import 1, Name scePower_driver, Functions 1, Variables 0, flags 00010000
Functions:
0x737486F2 [0x000026F0] - scePower_driver_737486F2
Import 2, Name sceDisplay_driver, Functions 2, Variables 0, flags 00010000
Functions:
0xDEA197D4 [0x000026F8] - sceDisplayGetMode
0x5B5AEFAD [0x00002700] - sceDisplay_driver_5B5AEFAD
Import 3, Name sceCtrl_driver, Functions 1, Variables 0, flags 00010000
Functions:
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550
Import 4, Name LoadCoreForKernel, Functions 1, Variables 0, flags 00010000
Functions:
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6
Import 5, Name UtilsForKernel, Functions 1, Variables 0, flags 00090000
Functions:
0x79D1C3FA [0x00002718] - sceKernelDcacheWritebackAll
Import 6, Name InterruptManagerForKernel, Functions 2, Variables 0, flags 00010000
Functions:
0x092968F4 [0x00002720] - sceKernelCpuSuspendIntr
0x5F10D406 [0x00002728] - sceKernelCpuResumeIntr
Import 7, Name ThreadManForKernel, Functions 15, Variables 0, flags 00010000
Functions:
0x9ACE131E [0x00002730] - sceKernelSleepThread
0xD59EAD2F [0x00002738] - sceKernelWakeupThread
0x9944F31F [0x00002740] - sceKernelSuspendThread
0x75156E8F [0x00002748] - sceKernelResumeThread
0x278C0DF5 [0x00002750] - sceKernelWaitThreadEnd
0xCEADEB47 [0x00002758] - sceKernelDelayThread
0x55C20A00 [0x00002760] - sceKernelCreateEventFlag
0x1FB15A32 [0x00002768] - sceKernelSetEventFlag
0x402FCF22 [0x00002770] - sceKernelWaitEventFlag
0x446D8DE6 [0x00002778] - sceKernelCreateThread
0xF475845D [0x00002780] - sceKernelStartThread
0x809CE29B [0x00002788] - sceKernelExitDeleteThread
0x71BC9871 [0x00002790] - sceKernelChangeThreadPriority
0x293B45B8 [0x00002798] - sceKernelGetThreadId
0x94416130 [0x000027A0] - sceKernelGetThreadmanIdList
Import 8, Name SysclibForKernel, Functions 3, Variables 0, flags 00010000
Functions:
0xAB7592FF [0x000027A8] - memcpy
0x10F3BB61 [0x000027B0] - memset
0x7661E728 [0x000027B8] - sprintf
Import 9, Name SysMemForKernel, Functions 4, Variables 0, flags 00010011
Functions:
0x237DBD4F [0x000027C0] - SysMemForKernel_237DBD4F
0xB6D61D02 [0x000027C8] - SysMemForKernel_B6D61D02
0x9D9A5BA1 [0x000027D0] - SysMemForKernel_9D9A5BA1
0x3FC9AE6A [0x000027D8] - SysMemForKernel_3FC9AE6A
Done

3. Как по инструкции "Удаляем все лишние строки со статическими функциями, т.е. у которых нет в названии функции суффикса с 4-значным НИДом". Итого остались:
0xADF12745 [0x00000180] - syslib_ADF12745
0x159AF5CC [0x000026E8] - SystemCtrlForKernel_159AF5CC
0x737486F2 [0x000026F0] - scePower_driver_737486F2
0x5B5AEFAD [0x00002700] - sceDisplay_driver_5B5AEFAD
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6
0x237DBD4F [0x000027C0] - SysMemForKernel_237DBD4F
0xB6D61D02 [0x000027C8] - SysMemForKernel_B6D61D02
0x9D9A5BA1 [0x000027D0] - SysMemForKernel_9D9A5BA1
0x3FC9AE6A [0x000027D8] - SysMemForKernel_3FC9AE6A
4. Начал сопоставлять ниды с libdoc'ами 5.00 и обнаружил, что начиная 5.00 по 6.60 все до единого совпадают. Быть может я не правильно дизасил эти прошивки? Скачивал их с этого сайта и подсовывал батнику "24. DISASM2HTML", который выдавал файл "24_DISASM_XDRSMW". В нем и смотрел.
Предполагаю, что не сделал описанное в этой теме и дизас у меня вышел - непонятно что...
Направьте на путь истинный, плиз!

LaKosta 30.07.2014 16:25

GreeDi, ты всё сделал правильно, с 1-го по 3-ий пункт включительно. Видимо с подачей питания проблем нет ;)

Но вот в 4-ом пункте мне не совсем верится, что ниды от 5.00 по 6.60 все сходятся.
Либдоки последние есть на 5.00. Я так понял, что ты их правильно скачал из этой темы: https://www.pspx.ru/forum/showthread.php?t=104558 (последняя вкладка "PRX Libraries Documentation"
  1. Определяешь, каким файлам прошивки соотносятся эти ниды.
  2. Дербанишь эти же файлы от 6.60 и сопоставляешь.
Сейчас сам проверить не могу, других дел много. Возможно завтра или позже...

GreeDi 31.07.2014 16:05

Цитата:

Сообщение от LaKosta (Сообщение 1088262)
GreeDi, ты всё сделал правильно, с 1-го по 3-ий пункт включительно. Видимо с подачей питания проблем нет ;)

Но вот в 4-ом пункте мне не совсем верится, что ниды от 5.00 по 6.60 все сходятся.
Либдоки последние есть на 5.00. Я так понял, что ты их правильно скачал из этой темы: https://www.pspx.ru/forum/showthread.php?t=104558 (последняя вкладка "PRX Libraries Documentation"

Сейчас сам проверить не могу, других дел много. Возможно завтра или позже...

Да, эти либдоки скачал, но видимо я что-то до этого нет так сделал. Сейчас проверил 5.00 и 4.05, и что-то нет совпадений((( Модули сами по названию совпадают (например scePower_driver и sceDisplay_driver), но хеши-постфиксы другие. И некоторые модуле вообще не получилось найти (например, SystemCtrlForKerne). Сдается, что не для 5.00 плагин был написан. А либдоки для прошивок выше 5.00 существуют, или их ручками собирать придётся?

GreeDi добавил 31.07.2014 в 16:05
Перелапатил уже все либдоки и нашел всего одно полное совпадение в прошивке 3.52 по модулю sceDisplay_driver_5B5AEFAD. Выглядело так:
код 3.52
<FUNCTION>
<NID>0x5B5AEFAD</NID>
<NAME>sceDisplay_driver_5B5AEFAD</NAME>
</FUNCTION>

Остальные так и не нашлись. Совпадают только хеши иногда, например хеш от scePower_driver_737486F2 можно найти в 5.00, но название функции там другое:
код 5.00
<FUNCTION>
<NID>0x737486F2</NID>
<NAME>scePowerSetClockFrequency</NAME>
</FUNCTION>

Я немного в замешательстве. Чтобы понять из какой прошивки нид - нужно найти полностью совпадающую функцию или достаточно чтобы 4-битный хеш совпадал?

Yoti 31.07.2014 16:08

Цитата:

Сообщение от GreeDi (Сообщение 1088246)
а контактной информации он там не оставил никакой

На самом деле, найти информацию легко. Но автор ставит условием для передачи исходников на публику согласие полной команды разработчиков. И искать их тебе придётся самому =)

GreeDi 31.07.2014 16:14

Цитата:

Сообщение от Yoti (Сообщение 1088271)
На самом деле, найти информацию легко. Но автор ставит условием для передачи исходников на публику согласие полной команды разработчиков. И искать их тебе придётся самому =)

Думаю вариант с заменой нидов более реален) Хотя всё не так просто в любом случае, но усилия того стоят)

LaKosta 01.08.2014 00:49

GreeDi, нужно, чтобы точно совпадало название функции с хешем и искомое. Особо не опирайся на либдоки от 5.00, возможно в базе не все функции забиты. Ты сам должен отдизасмить соответствующие файлы прошивки 5.00 на полный комплект нмдов. Затем искать в них соответствия.
Возможно ниды использовались совсем даже не от 5.00, поэтому нужно лопатить другие прошивки, до достижения цели.

Декриптованные PRX от всех прошивок лежат здесь: https://www.pspx.ru/forum/showthread.php?t=64180
FUSA SD вроде предназначался только для Слим моделей.

GreeDi 01.08.2014 18:45

LaKosta, спасибо! Буду лопатить) А то что фуса для слимок предназначался может стать проблемой при запуске на PSP go?
Я вроде слышал, что планировался автором ещё FUSA_HD, но он видимо дальше бета-теста не ушел. Или есть какая инфа по этому вопросу?

GreeDi добавил 01.08.2014 в 18:45
Перелапатил все прошивки с 5.00 до 6.60 методом дизаса декриптованных prx'ов из прошивок. Ни в одной не нашел sceDisplay_driver_5B5AEFAD (все функции нет времени проверять). Смотрел как в 25_DISASM_ALL, так и отдельно в prx'ах display.prx. Похожие есть, но совпадения только этого уровня "sceDisplay_driver_5_____".

LaKosta 03.08.2014 10:11

GreeDi, начинай проверять с 3.71, 3.90, 4.01.

GreeDi 04.08.2014 16:40

LaKosta, с 3.71 по 4.01 пока мимо(((

LaKosta 06.08.2014 05:29

GreeDi, думаю ты что-то не так или не то искал в 5-ой прошивке, воспользуйся этим для поиска нужного в папке со всеми либдоками в подпапках: http://rsload.net/soft/cleaner-disk/...ce-studio.html

ErikPshat 09.08.2014 05:29

Вложений: 5
Цитата:

Сообщение от LaKosta (Сообщение 1088262)
Либдоки последние есть на 5.00. Я так понял, что ты их правильно скачал из этой темы: https://www.pspx.ru/forum/showthread.php?t=104558 (последняя вкладка "PRX Libraries Documentation"

Да, забыл добавить, что по ссылке из цитаты лежит архив pspsdk_doc.7z... (я исправил там множество ошибок синтаксиса HTML и XML_Viewer, а так же прикрутил его к PSPSDK)

GreeDi,
  1. Так вот, содержимое этого архива необходимо разархивировать в папку C:\pspsdk\doc (соглашаясь на слияние папки и файлов)
  2. Естесственно, чтобы этот путь существовал на диске С, до этого должен был быть установлен "Minimalist PSPSDK for Windows" (ссылка по теме)
  3. Просмотр либдоков производится запускающим файлом "C:\pspsdk\doc\pspsdk.html" (последняя вкладка "PRX Libraries Documentation") через браузер Опера 12.17 (эта версия последняя на С++ и поддерживает просмотр XML-содержимого файлов доков.
    Новые версии, на технологии Вебкит, не поддерживают просмотр и отображение XML, т.е. все xml-файлы отображаются в браузере пустой страницей)
  4. Таким образом, ты сможешь просматривать НИДы функций в XML файлах прошивок, например 5.00, и будешь видеть названия функций и нидов в удобочитаемом виде, а так же, сможешь производить поиск прямо в браузере по CTRL+F.
  5. Так же, рекомендую воспользоваться ссылкой из предыдущего поста на "Replace Studio Pro", чтобы за пару минут отыскать наличие НИДа в папке либдоков со всеми прошивками, т.е. произвести поиск глобально в папке, включая подпапки с кучей файлов.



Цитата:

Сообщение от GreeDi (Сообщение 1088259)
3. Как по инструкции "Удаляем все лишние строки со статическими функциями, т.е. у которых нет в названии функции суффикса с 4-значным НИДом". Итого остались:
0xADF12745 [0x00000180] - syslib_ADF12745
0x159AF5CC [0x000026E8] - SystemCtrlForKernel_159AF5CC
0x737486F2 [0x000026F0] - scePower_driver_737486F2
0x5B5AEFAD [0x00002700] - sceDisplay_driver_5B5AEFAD
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6
0x237DBD4F [0x000027C0] - SysMemForKernel_237DBD4F
0xB6D61D02 [0x000027C8] - SysMemForKernel_B6D61D02
0x9D9A5BA1 [0x000027D0] - SysMemForKernel_9D9A5BA1
0x3FC9AE6A [0x000027D8] - SysMemForKernel_3FC9AE6A


http://foosa.do.am/.s/t/971/13.gif FuSa SD v1.0.50b :: NO MORE SLOW MOTION MOVIE :)
[ Download from this server (107.6Kb) ]
Код:

0xADF12745 [0x00000180] - syslib_ADF12745              === C:/pspsdk/doc/pspsdk/silverspring.lan.st/syslib.html  = module_reboot_phase          ===
0x159AF5CC [0x000026E8] - SystemCtrlForKernel_159AF5CC === ( custom )  kd/systemctrl.prx = (сказал N1D G3N3R@T0R) = sctrlHENFindFunction          ===
0x737486F2 [0x000026F0] - scePower_driver_737486F2    === (1.00-5.00) kd/power.prx      = scePower              = scePowerSetClockFrequency    ===
0x5B5AEFAD [0x00002700] - sceDisplay_driver_5B5AEFAD  === (1.00-3.5x) kd/display.prx    = sceDisplay_Service    = sceDisplay_driver_5B5AEFAD    ===
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550      === (1.00-5.00) kd/ctrl.prx      = sceController_Service  = sceCtrlPeekBufferPositive    ===
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6  === (1.00-3.7x) kd/loadcore.prx  = LoadCoreForKernel      = sceKernelIcacheClearAll      ===
0x237DBD4F [0x000027C0] - SysMemForKernel_237DBD4F    === (1.00-5.00) kd/sysmem.prx    = sceSystemMemoryManager = sceKernelAllocPartitionMemory ===
0xB6D61D02 [0x000027C8] - SysMemForKernel_B6D61D02    === (1.00-5.00) kd/sysmem.prx    = sceSystemMemoryManager = sceKernelFreePartitionMemory  ===
0x9D9A5BA1 [0x000027D0] - SysMemForKernel_9D9A5BA1    === (1.00-5.00) kd/sysmem.prx    = sceSystemMemoryManager = sceKernelGetBlockHeadAddr    ===
0x3FC9AE6A [0x000027D8] - SysMemForKernel_3FC9AE6A    === (1.00-5.00) kd/sysmem.prx    = sceSystemMemoryManager = sceKernelDevkitVersion        ===


Пример поиска НИДов:

Вложение 10137


ErikPshat 10.08.2014 15:03

Портирование НИДов:

Код:

0xADF12745 [0x00000180] - syslib_ADF12745              === не изменяемая системная библиотека.
0x159AF5CC [0x000026E8] - SystemCtrlForKernel_159AF5CC === функция кастомной прошивки, в 6.60 должен быть проброс нидов.
0x737486F2 [0x000026F0] - scePower_driver_737486F2    => в 6.60 не изменился (0xEBD177D6 ???)
0x5B5AEFAD [0x00002700] - sceDisplay_driver_5B5AEFAD  => в 6.60 sceDisplay_driver_F338AAE0
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550      => в 6.60 не изменился (0x2BA616AF ???)
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6  => кликабельно sceKernelIcacheClearAll not exported any more
0x237DBD4F [0x000027C0] - SysMemForKernel_237DBD4F    => в 6.60 SysMemForKernel_7158CE7E
0xB6D61D02 [0x000027C8] - SysMemForKernel_B6D61D02    => в 6.60 SysMemForKernel_C1A26C6F
0x9D9A5BA1 [0x000027D0] - SysMemForKernel_9D9A5BA1    => в 6.60 SysMemForKernel_F12A62F7
0x3FC9AE6A [0x000027D8] - SysMemForKernel_3FC9AE6A    => в 6.60 SysMemForKernel_C886B169


COOLERbyPSP 10.08.2014 16:04

Ежели кто соберёт под 6.60 - потестю на 40" =)
И компонентный и композитный кабели у меня есть, второй только где-то в завалах, наверное.

ErikPshat 11.08.2014 14:15

Вложений: 1
Цитата:

Сообщение от COOLERbyPSP (Сообщение 1088428)
Ежели кто соберёт под 6.60 - потестю на 40" =)

Ну конечно проверь...
В архиве 3 файла: из сообщения выше "Портирования нидов" есть 2 пункта под вопросом и один пункт о прекращении экспорта функции LoadCoreForKernel_D8779AC6. Вот эти 3 вопросительных функции в коде:
Код:

0x737486F2 [0x000026F0] - scePower_driver_737486F2    => в 6.60 не изменился (0xEBD177D6 ???)
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550      => в 6.60 не изменился (0x2BA616AF ???)
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6  => sceKernelIcacheClearAll not exported any more


Поэтому я портировал 3 вида плагина:
  1. FuSa_SD_660a.prx - не включает изменений функций под вопросом.
  2. FuSa_SD_660b.prx - включает изменения под вопросом
  3. FuSa_SD_660c.prx - дополнительно к предыдущему изменению -> изменение функции LoadCoreForKernel_D8779AC6 на нехешированную функцию sceKernelIcacheClearAll


Текущее время: 00:20. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.