Вход

Просмотр полной версии : Запуск PSP Homebrew на PS3


Страницы : [1] 2

BlackDaemon
25.03.2013, 22:16
Mercyful, прошу прощения за оффтоп, но не могли бы Вы поинтересоваться у tpu, возможно ли реализовать следующую теорию:

1. Из eboot.pbp извлекается iso-образ, в нём делается небольшая правка - подменяется ~25кбайт данных (заменяются только данные, структура образа никоим образом не затрагивается)
2. На основе такой правки в eboot.pbp заменяется конкретный участок с этими данными. (без полной пересборки eboot.pbp; без нарушения структуры оригинала)

Заранее спасибо. :)

Mercyful
26.03.2013, 19:00
BlackDaemon,
Заканчивай уже с "вы" и "уважаемым" ;) Я разве что гуглом чуть лучше пользуюсь.

Что касается твоего вопроса, то очень сомневаюсь, что сие возможно. При условии, что я правильно тебя понял. Имхо, проще своего рода loader использовать, который прямо в памяти процесса будет ресурсы/данные на нужные тебе подменять. Такое уже проворачивали с локализацией Hatsune Miku Project Diva и с чем-то ещё.

BlackDaemon
26.03.2013, 20:03
Mercyful, ок, заканчиваю. :D

Жаль, конечно, что это маловероятно. Задача этой теории была пробить защиту в эмуляторе PSP на PS3, т.к. к эксплойтам в PSP играх у него похоже иммунитет (http://wololo.net/talk/viewtopic.php?f=56&t=28275&start=660#p245875) - попробовал сегодня на свежем релизе к Apache Overkill, получил примерно такой же лог.

Вообщем, игрался я с чем было - две Minis "A Space Shooter For 2 Bucks!" и "Hysteria Project", PSP с оф. прошивкой 6.60. В обоих сидит модуль libpsmfplayer.prx, я попросил разработчика Jpcsp сделать простенький загрузчик, который вызывает sceKernelLoadExec с путём disc0:/PSP_GAME/SYSDIR/UPDATE/EBOOT.BIN. Hex редактором заменил модуль и добавил сэмпл куба в UPDATE/EBOOT.BIN. Образ через fake_np подписал и запустил на оф. прошивке 6.60 - куб завёлся. :)

Больше всего удивило то, что модуль в декриптованом виде запустился - до этого пробовал подменять psmf/libfont - с ними подобное не проходило.

Собственно, сэмпл (http://rghost.ru/private/44793711/132ec9b1627abf39f811f28bf0560a97).

ErikPshat
26.03.2013, 20:29
сделать простенький загрузчик, который вызывает sceKernelLoadExec с путём disc0:/PSP_GAME/SYSDIR/UPDATE/EBOOT.BINНе понял, ты хочешь вызывать установку официальной прошивки?

Hex редактором заменил модуль и добавил сэмпл куба в UPDATE/EBOOT.BINАналогично, каким образом обновление прошивки влияет на запуск игры?
По моему эту папку UPDATE можно вообще удалить без всяких последствий.

BlackDaemon
26.03.2013, 20:45
ErikPshat, загрузчик писался для целей тестирования, не более. :) Первые трудности, с которыми я столкнулся при запуске на оф. прошивке - у функций sceKernelLoadModule/sceKernelLoadExec висит ограничение на местоположение файла, т.е. c ms0:/ на оф. прошивке ими запустить ничего нельзя, пришлось придумывать как приспособиться под disc0:/ - учитывая, что в PSN релизах папка update всегда "пустует" (забита нулями). :D

Mercyful
26.03.2013, 20:47
Что-то я тоже в ступор впал. многабукаф!

ErikPshat
26.03.2013, 20:47
BlackDaemon, а, понел. Ты решил лоадер в несколько байт (~25кбайт) подпихнуть вместо обновления :)

BlackDaemon
26.03.2013, 21:04
ErikPshat, чуть-чуть не так, посмотрите сэмпл. :) Схема запуска такая:

1. SYSDIR/EBOOT.BIN вызывает через sceKernelLoadModule+sceKernelStartModule USRDIR/Module/psmfplayer.prx
2. он и заменяется самопальным лоадером (3-й пункт необязательный, но 25 кбайт на всё-про-всё маловато, потому в данном случае я подменил его лоадером)
3. который в свою очередь загружает содержимое (которое также подверглось замене на сэмпл куба) из SYSDIR/UPDATE/EBOOT.BIN

ErikPshat
26.03.2013, 21:16
:scratch_one-s_head:

Mercyful
26.03.2013, 21:22
BlackDaemon,
Я с прометеем подобное делал, чтобы игру с мультизагрузчиком (YsI&II Cronicles) на 5.00 запустить )) связка была жестокая...

Ты лучше скажи, к чему это всё, потому как конечная цель непонятна. Понятно лишь одно: ты где-то подменяешь путь загрузки, где-то её цель, дабы запустить нечто размером 25кб. Но подменить в EBOOT.PBP сорано не получицо, ибо контент там зашифрован, а инлайн патчингом на PSP не припомню, чтобы кто-то занимался. Да и инлайном одним не обойдётся, ибо тебе не пару десятков байт впихнуть туда нужно.

BlackDaemon
26.03.2013, 21:43
Mercyful, конечная цель - надурить эмулятор PSP на PS3 и запустить через него хомбрю. :) Видимо, придётся ждать когда окончательно разберутся с MINIS.EDAT и ISO.BIN.EDAT (по крайней мере декриптовать их уже можно (http://www.pspx.ru/forum/showpost.php?p=1067569&postcount=5132)).

BlackDaemon
30.03.2013, 19:43
Гмм...я тут вспомнил про кое-что - в эмуляторе (по адресу dev_flash:/pspemu/flash0/usermodule) лежит три модуля в декриптованом виде - libfont.prx, libheap.prx и libpsmfplayer.prx. На попытки подменить модули чем попало при запуске чёрный экран или чёрный экран + exception, т.е. реакция на подмену есть. :D Ссылка (http://rghost.ru/44901541) на эти модули, может есть какой-нибудь шанс заэксплойтить эмулятор через них?

gid15 (разработчик Jpcsp) отписался, что модули аналогичные тем, которые на PSP и Kernel вызовов не используют. :crazy: Похоже, эта затея бессмысленна.

BlackDaemon
04.04.2013, 12:12
Добрался (http://www.pspx.ru/forum/showpost.php?p=1068561&postcount=5156) я таки до запуска PSP игр. :) fake_np работает, но моя теория к сожалению не прокатила - судя по всему в эмуляторе присутствует "особый" вид защиты - все ELF/PRX должны быть подписаны, таким образом все старые игры, в которых модули и/или внешние исполняемые файлы в декриптованом виде неработают. :(

ErikPshat
04.04.2013, 18:41
все ELF/PRX должны быть подписаны, таким образом все старые игры, в которых модули и/или внешние исполняемые файлы в декриптованом виде неработают.Ну так попробуй подписать их, может запустятся.

BlackDaemon
04.04.2013, 18:50
ErikPshat, так дело в том, что пробовал уже :crazy:

seboot я на декриптованом eboot.bin от Killzone пробовал - при запуске сразу чёрный экран. :(

ErikPshat
04.04.2013, 21:22
ErikPshat, так дело в том, что пробовал уже :crazy:Только непонятно, как пробовал.
А PRX-ы тоже зашифровал?

все ELF/PRX должны быть подписаны


Ну если так, тогда дело не в шифровке.

ErikPshat
04.04.2013, 21:48
А PRX-ы тоже зашифровал?Или тебе написать инструкцию по шифровке PRX-модулей?

Собственно БАЗА (http://www.pspx.ru/forum/showthread.php?t=103063) уже зачата :)

BlackDaemon
05.04.2013, 11:54
Что-то подписывание у меня хромает. Значит, беру Cube Sample, подписываю через seboot (тег 0xd91609f0), заменяю в образе sysdir\eboot.bin и через fake_np делаю eboot.pbp. На виртуальной 6.60 PRO-C запускается без проблем, но как только сбрасываю на оф. 6.60 - после запуска вылетает с ошибкой 0x80020148 (Bookr на оф. прошивке вылетает также).:crazy:

Yoti
05.04.2013, 20:21
Cube Sample
Там разве не static elf был?

BlackDaemon
05.04.2013, 20:51
Yoti, прошу прощения, но на данный вопрос я ответить затрудняюсь - у меня набор знаний пользователя, так сказать. :D Ради интереса пробовал ещё вытащить из PRO-C апдейтера data.psp и засунуть в образ - вылезает та же ошибка.:crazy: Также пробовал подписывать HelloWorld - при запуске чёрный экран и PSP намертво зависает.:dash:

В общем, меня интересует любое хомбрю, которое способно запуститься на оф. прошивке из disc0:/psp_game/sysdir/eboot.bin с помощью fake_np. Заранее спасибо.thank you

ErikPshat
06.04.2013, 01:34
Также пробовал подписывать HelloWorld - при запуске чёрный экран и PSP намертво зависает.Так ты подписываешь только сам образ. А внутри него сам модуль ELF HelloWorld ведь ты не подписал в офф ~PSP.

Хомки подписанные любые идут на официальной прошивке. Любые - это те, которые не используют кернел.
Которые используют кернел, я вот не понимаю пока, почему они не идут, даже подписанные.

BlackDaemon
06.04.2013, 02:06
ErikPshat, "Это несерьёзно!" (http://www.youtube.com/watch?v=up8mWIbr6Po) (с) :D Вот (http://rghost.ru/45075522), посмотрите сами. :)

ErikPshat
06.04.2013, 08:33
BlackDaemon, да, вижу подписаны :) но что-то с ними не так.

Там разве не static elf был?У кубика похоже статический, т.к. видно по ELF-файлу, что структура другая, там в начале нету секций релокации, а только одни нули. Такие статичные Эльфы действительно просто так после подписи не запустятся.

Чтобы этого избежать, то нужно при компиляции добавить в Makefile строчку: BUILD_PRX = 1
И возможно понадобится это: PSP_FW_VERSION = 371 (иначе оно при компиляции показывает FW = 150), хотя думаю это не важно.


Что интересно, кубик с тегами D916xxF0, зашифрованными через Seboot не хочет запускаться даже на кастоме (точно не помню, но на официале точно не запускается)
А вот зашифрованный под Astonia_Story (меньше хедера не нашёл) отлично идёт на официалке.

Короче, Seboot имеет в себе 12 встроенных тегов, под которые умеет подписывать. И мне кажется, что он вообще не рабочий, т.е. не правильно подписывает, либо с этими тегами на официалке хомки не работают.
Прилагаю скрипт в архиве во вложении [кодировка "Кириллица DOS (cp866)"]

8948

Ну и сам подписанный кубик: Скачать (http://yadi.sk/d/zphuLuGP3w7NU)

ErikPshat
06.04.2013, 12:27
Короче, Seboot имеет в себе 12 встроенных тегов, под которые умеет подписывать. И мне кажется, что он вообще не рабочий, т.е. не правильно подписывает, либо с этими тегами на официалке хомки не работают.Короче, провёл ещё эксперимент, скачал Минис отсюда [PSP] Tiny Hawk [ENG] [MINIS] (2012) (http://nnm-club.ru/forum/viewtopic.php?t=450861)
Там как раз идёт тег 0xD9160BF0. Взял от него заголовок и подписал им Кубик через PRXEncrypter.
Запустился на официальной прошивке после прогона через FakeNP: СКАЧАТЬ (http://yadi.sk/d/Ab69TtnG3xrdK)

Так что дело не совсем в этом теге, хотя без FakeNP просто так он не запустился, как в предыдущем посте.
Скорее всего Seboot не правильно подписывает файлы.

P.S. Оставлю ссылку на Minis (http://nnm-club.ru/forum/tracker.php?f=383&nm=Minis), чтобы потом не забыть, думаю можно надыбать ещё хороших хедеров.

BlackDaemon
06.04.2013, 12:32
ErikPshat, что-то здесь идёт не так. :D Вытащил из вашего подписанного куба data.psp и засунул его в образ как eboot.bin, запускаю образ на кастоме - ошибка 0x80020148. Решил провести "обратный" эксперимент - достал из образа с Killzone: Liberation eboot.bin, переименовал его в data.psp, засунул в eboot.pbp и запустил на кастоме. Догадайтесь, что случилось дальше? :D

Edit: что-то я запоздал с постом. Пойду проверять новый куб. :)

ErikPshat
06.04.2013, 13:06
BlackDaemon, тут я думаю дело в тегах. Нельзя один вид тега использовать как другой вид.

1. Например куб я подписал тегом Astonia_Story: 0xADF305F0 /* scrambler 0x60, Demo Game keys DATA.PSP */
То есть, этим тегом подписывают демки DATA.PSP, которые исключительно идут в EBOOT.PBP, поэтому в этом виде запускается без плясок с бубном. Этим тегом подписаны все установщики кастомных прошивок и FastRecovery. А если этот тег положить в образ ISO и пусть даже подписать через FakeNP, то он не запустится.

2. Второй куб был подписан тегом от игры Tiny Hawk Minis: 0xD9160BF0 /* scrambler 0x5D, Game EBOOT.BIN keys */
То есть, этим тегом подписывают игры в EBOOT.BIN, которые идут в образах дисков ISO (UMD). Но хотя Минисы идут в EBOOT.PBP изначально, однако они по сути и есть образы дисков UMD, подписанные способом NP. Поэтому с этим тегом будет работать только через FakeNP.

И потом, для каждого вида тегов существуют разные виды PARAM.SFO

А подпись SEBOOT по ходу совсем не работает.

BlackDaemon
06.04.2013, 13:11
ErikPshat, УРА, работает!!!:yahoo:Огромное спасибо за помощь.:thank_you:При возможности, сделайте пожалуйста утилитку, которая этим тегом подписывает хомбрюшки. Заранее спасибо.thank you

StY_GuE-za0

ErikPshat
06.04.2013, 14:35
При возможности, сделайте пожалуйста утилитку, которая этим тегом подписывает хомбрюшки.А какая именно у тебя завелась?

Из архива cube.zip => Cube Sample (только не та, которая не подписана- "Cube Sample CFW (not signed)")
Из архива Cube_Sample_FakeNP.zip

Думаю обе должны работать.

Тебе нужен "PrxEncrypter for Windows" с исходниками. Собственно уже в готовом экзешнике есть 3 готовых заголовка (от Astonia_Story2 300kb, и ушё парочка побольше). Так что можно шифровать PRX-ы с этими заголовками.
Но если понадобится зашифровать файлы прошивки с другими тегами или под особый размер заголовка, то в исходном файле main.c просто меняешь Header и Kirk на свои, компилишь новый PrxEncrypter через тот же PSPSDK и шифруешь файлы со своими заголовками.

Пока тебе не могу дать сборку, т.к. она приватная. Если Yoti разрешит, тогда выложу в паблик.
Но если хорошенько у Гугля попросить, то можно и так (http://bbtgp.net/downloads/) найти ;)

BlackDaemon
06.04.2013, 14:52
ErikPshat, завелась из Cube_Sample_FakeNP.zip, правда, чтобы запустить на PS3 пришлось доставать eboot.bin, засовывать его в другой образ и пересобирать через fake_np (из-за чего так - не знаю :D ).

ErikPshat
07.04.2013, 04:53
BlackDaemon, а мне кубик понравился, красиво смотрится на PSP :)

BlackDaemon
07.04.2013, 11:19
ErikPshat, перепробовал несколько вариаций PrxEncrypter - из этой темы (залоговок tifpsp), другой - из вложений в теме (http://www.pspx.ru/forum/showthread.php?t=90599) по подписыванию, третий (http://wololo.net/talk/viewtopic.php?f=2&t=8129) с wololo, четвёртый (с заголовком от Astonia_Story мне собрал разработчик Jpcsp). Во всех случаях происходит одно и тоже - подписываю ваш декриптованый куб из "Cube Sample CFW (not signed)" и заменяю eboot.bin в образе - при запуске на кастоме вылезает проклятая 0x80020148. :dash: Во втором случае (по гайду) пробовал использовать в качестве "доноров" eboot'ы от Brainpipe, Fieldrunners и ваш рабочий закриптованый куб. :crazy:

ErikPshat
07.04.2013, 14:06
BlackDaemon, эмм, если подписываешь от Astonia_Story (вроде правильно называется Astonishia_Story_2), то прогонять через NP не надо. Просто собираешь подписанный prx (DATA.PSP) в EBOOT.PBP с помощью PBP Unpacker.
Таким образом собираются все установщики кастомных прошивок, Fast Recovery и т.п. Они обязаны запускаться на официальных прошивках.

Если подписываешь тегом от игры UMD (EBOOT.BIN), тогда нужно собрать в образ NP.ISO и прогонять через FakeNP.

Короче, вот мой PRXEncrypter (http://www.pspx.ru/forum/attachment.php?attachmentid=8958), пробуй им. Я скомпилировал 2 вида экзешника под 2 хедера, с помощью которых делал 2 предыдущих кубика.

Для хедера минис TinyHawk подписываемый файл должен быть не более ~266149 байт
Для хедера AstonishiaStory2 подписываемый файл должен быть не более ~368176 байт




Положи в папку декриптованный (not Signed) кубик под названием DATA.prx
Запусти батник SIGN.BAT, получишь 2 файла DATA.PSP и EBOOT.BIN с разными подписанными хедерами.
Сравни по MD5 с моими файлами - должны 100% сойтись.

Yoti
07.04.2013, 14:14
Если Yoti разрешит, тогда выложу в паблик.
Да кидай, фиг с ним. Я даже не помню, насколько оно хорошо работает...

BlackDaemon
07.04.2013, 14:15
ErikPshat, огромное спасибо, eboot.bin'ы совпали побайтово. :) Сейчас буду пробовать другие хомбрю запускать. :D

ErikPshat
07.04.2013, 14:47
Я даже не помню, насколько оно хорошо работает...Да вот этот классический работает безотказно. А вот другие сборки, например от supercow и модификация выдают какую-то хрень.
Кстати, тот kirk.buff тоже надо бы выложить. Опять же классика работает безупречно.

BlackDaemon
07.04.2013, 16:21
Такс, результаты первых тестов.

прошли fake_np:
- ProShell - запускается на оф. прошивке, но на PS3 текст не выводится (сначала подумал, что не работает, а вот оно что!)
- 2dstudio.prx - запускается на оф. прошивке, на пс3 текста нет
http://i45.tinypic.com/a4y0c5.png

дошли до этапа с fake_np:
- lines.pbp - работает под кастомом, на оф. прошивке 0x80020148
- logic.pbp - см. выше
- skinning.pbp - см. выше

после подписывания ELF неработают:
PSPong 0.1.pbp - подписал и засунул в образ, при запуске на кастоме чёрный экран, приставка зависает.
basic.pbp (из SDK 2.0) - ведёт себя аналогично
dragon.pbp (из SDK 2.0) - ведёт себя аналогично

riku.kh3
07.04.2013, 16:26
ErikPshat, как kirkHeader сгенерировать? Хочу тоже потестить, но 250KB лимит... :(

BlackDaemon
07.04.2013, 16:43
ErikPshat, с вашего разрешения - могу ли я перезалить PrxEncrypter для англоязычных "коллег", так сказать? Авторство, разумеется, укажу. :D

ErikPshat
07.04.2013, 17:01
BlackDaemon, ну ты реально что-то не так делаешь, либо PARAM.SFO не такие подсовываешь. И чую все перечисленные хомки какие-то старые. Там идёт скорее сырой ELF статический. Как компилировать я писал выше.
У меня любые хомки подписанные идут без всяких бубнов на PSP. Но не идут те, у которых прилагаются сторонние модули PRX, особенно с кернел-правами. Сторонние ресурсы идут без проблем.
Может там на PS3 с эмулятором PSP не совсем проработано.


ErikPshat, как kirkHeader сгенерировать?Ну вроде Yoti дал добро, так что щас найду. Правда наверняка без инструкции вы просто так не поймёте, что с этим делать :)

Для этого есть модифицированный prxDecrypter. Во время декриптовки любого декриптуемого файла, процессор, опознав тег и публичный ключ, генерирует приватный Kirk-Header, для декриптовки файла. В этот момент декриптор дампит этот кирк и сохраняет на карту.
Потом, имея хейдер оригинального файла 0х150 (336 байт) и кирк 0х110 (272 байта), можно этим же кирком и хедером подписать любой другой файл.
Размер подписываемого файла зависит от размера, указанного в хедере шифрованного файла-донора по адресу 0х2C минус размер самого хедера и минус 0х10 (16 байт).

Ну блин, тут надо целую диссертацию писать.

BlackDaemon
07.04.2013, 17:37
Гмм, вытащите, пожалуйста, подпись из Brainpipe, там размер eboot.bin 10 мб, т.е. хватит на всё-про-всё. :D

riku.kh3
07.04.2013, 17:40
ErikPshat, инструкция добро, все доступно и понятно. :) Самой только PRXDecrypter MOD нигде нету, единственное место где была - pspcfw.de, помер((

ErikPshat
07.04.2013, 17:43
могу ли я перезалить PrxEncrypter для англоязычных "коллег", так сказать? Авторство, разумеется, укажу.Ну вот, начинается, не успел выложить в паблик свою версию, как её сразу хотят раскидать по всему миру :D
Да можешь отдать, только не надо говорить, что это мой энкриптер, там из названия папки убери мой ник, я папку просто так обозвал чтобы не спутать с другими сборками. Потом так и выложил, влом было переименовывать.

Вообще это не мой энкриптер. Скажу по секрету - это обычный энкриптер классический, который прилагается с исходниками прошивки PRO: http://code.google.com/p/procfw/source/browse/contrib/PrxEncrypter
Я только вырезал из него лишних 2 хедера, которые мне мешали и которые без моего ведома пытались вставить свой заголовок. Ну и я просто вручную заменяю на нужные мне хедеры и кирки в main.c

Как скачать исходники и как компилировать энкриптер, написано в этой инструкции: http://www.pspx.ru/forum/showthread.php?t=90993
Экзешник энкриптера так же компилируется с помощью PSPSDK, как и обычные хомки для PSP :girl_crazy:

riku.kh3
07.04.2013, 18:08
Гмм, вытащите, пожалуйста, подпись из Brainpipe, там размер eboot.bin 10 мб, т.е. хватит на всё-про-всё. :D
Хмм.. у Brainpipe заголовок почему-то другой - D9160AF0. У TinyHawk и AnryBirds я еще проверил - D9160BF0. :scratch_one-s_head:

ErikPshat
07.04.2013, 19:18
у Brainpipe заголовок почему-то другой - D9160AF0Теги идут по группам. И работают по принадлежности к группе и у одной группы свой порядковый скрамблер-код. Вот этот 3-ий байт в группе меняется только от прошивки к прошивке. В остальном одна группа выполняет свойственные ей привилегии, независимо от 3-его байта.
Например D9160AF0 знает прошивка 5.50 и выше, а тег D9160ВF0 знает прошивка 5.55 и выше, но прошивка 5.50 уже не знает о нём, поэтому с последним тегом подписанная игра не запустится на 5.50 и ниже.


Самой только PRXDecrypter MOD нигде нету, единственное место где была - pspcfw.de, помер((
Ага, отыскал я модификацию от Yoti, смотри вложение. Этот мод вообще появился, когда ломали голову, как сделать Permanent Patch на 6.20, чтобы подписать vshmain.prx. Кирк-то и так можно было отловить дамперами памяти, но тут автоматизировали этот процесс.


FAQ



Короче, как обычно, кидаете в корневую папку "enc" один зашифрованный файл, например: прошивки, модуля vshmain.prx, psmfplayer.prx, libfont.prx, libheap.prx, EBOOT.BIN или DATA.PSP игры, или чего-то там ещё.


Запускаете декриптор и декриптуете файл. На экране увидите сообщения, сдампился ли kirk.buff...


PrxDecrypter декриптит те же самые теги, что и стандартный v2.6b. Но там Yoti добавил ещё новых тегов с ключами для новых прошивок и что-то ещё подхимичил, известное только ему )))
Для декриптовки не обязательно кидать целиком файл, а достаточно бросить только заголовок 0х150 и кирк всё-равно клюнет на него, поэтому не просто так я создал эту тему с заголовками: http://www.pspx.ru/forum/showthread.php?t=103063


Сдампленный кирк будет лежать в папке "enc" рядом с уже декриптованным файлом.


Открываете kirk.buff в HexWorkshop v6.7 (http://rutracker.org/forum/viewtopic.php?t=4335678), нажимаете "File => Export" и выбираете формат "C Source (*.c, *.cpp)", сохраняете где-то поблизости с исходниками PRXEncrypter, как kirk.c


Так же в HexWorkshop открываете шифрованный файл, с которого был снят этот кирк, выделяете ровно 0х150 (336 байт) и так же делаете экспорт в "C Source (*.c, *.cpp)", сохраняете например как DATA.c


Открываете оба *.с файла в текстовом редакторе и открываете main.c в папке с исходниками PRXEncrypter.


В main.c букваьно в начале видите этот самый PSP-хейдер шифрованного файла 0х150 [336] байт, разложенного побайтно, типа так:
unsigned char pspHeader_small[336] =
{
0x7E, 0x50, 0x53, 0x50, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x74, 0x69, 0x6E, 0x79, 0x68, 0x61,
0x77, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x15, 0x11, 0x04, 0x00, 0x70, 0x12, 0x04, 0x00,
0x44, 0x90, 0x00, 0x00, 0xA4, 0xC1, 0x02, 0x00, 0xB1, 0x2A, 0x02, 0x00, 0x10, 0x00, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x1E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x9C, 0x1E, 0x03, 0x00, 0x75, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x06, 0x09, 0x00, 0x00, 0x00,
0xCB, 0xCC, 0xCA, 0x75, 0xF2, 0xFB, 0xFA, 0x76, 0xD7, 0x8A, 0x68, 0xF6, 0xBC, 0x19, 0x63, 0xF9,
0xA1, 0x87, 0xF5, 0x50, 0x40, 0xB8, 0x5D, 0xDF, 0x25, 0x09, 0xB9, 0x58, 0x9B, 0x51, 0xD9, 0x95,
0x6F, 0x45, 0xC8, 0x5A, 0x97, 0x64, 0xB7, 0x3F, 0xE6, 0x15, 0x90, 0xCE, 0xFC, 0x56, 0x91, 0x60,
0x15, 0x11, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xB5, 0x16, 0x26, 0xE8, 0xFC, 0x33, 0xED, 0x7F, 0xC3, 0x30, 0xE3, 0x3F, 0xBC, 0x01, 0xC3, 0xE0,
0xF0, 0x0B, 0x16, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0xE0, 0x0B, 0x5A,
0x41, 0x6B, 0x51, 0x20, 0x2F, 0xE9, 0x0D, 0x9C, 0x1A, 0xC9, 0x33, 0x71, 0x93, 0x4D, 0xE2, 0xFB,
0x05, 0xCD, 0x75, 0xC0, 0xDC, 0x78, 0x22, 0x45, 0xA5, 0x01, 0x6E, 0xFD, 0xDA, 0x23, 0x6D, 0x62,
};




Переходите к открытому вашему хедеру DATA.c. Выделяете только код без фигурных скобок и копируете его в main.c вместо того кода.


Следом ниже видите ещё один код покороче - это kirk-header [272] байта, выглядит типа так:
unsigned char kirkHeader_small[272] =
{
0xBE, 0xD3, 0x21, 0xB1, 0x7C, 0x76, 0xD6, 0x59, 0xEE, 0x99, 0xF6, 0xD1, 0x73, 0x26, 0x34, 0xBE,
0x5C, 0x06, 0x0B, 0x42, 0xE4, 0x82, 0x14, 0x52, 0xBA, 0x3D, 0x47, 0xA7, 0xFC, 0xA2, 0x14, 0x39,
0x72, 0x66, 0x08, 0x91, 0xA5, 0x9D, 0xBB, 0x97, 0x0E, 0xB2, 0x1D, 0x48, 0x4A, 0x2E, 0xC2, 0xD0,
0x9A, 0x12, 0xB8, 0xEC, 0xE2, 0xCA, 0xB3, 0xE3, 0x6C, 0xAC, 0xEC, 0x70, 0xB6, 0xAD, 0xB5, 0x9F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x11, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7E, 0x50, 0x53, 0x50, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x74, 0x69, 0x6E, 0x79, 0x68, 0x61,
0x77, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x15, 0x11, 0x04, 0x00, 0x70, 0x12, 0x04, 0x00,
0x44, 0x90, 0x00, 0x00, 0xA4, 0xC1, 0x02, 0x00, 0xB1, 0x2A, 0x02, 0x00, 0x10, 0x00, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x1E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x9C, 0x1E, 0x03, 0x00, 0x75, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x06, 0x09, 0x00, 0x00, 0x00,
};




Переходите к вашему kirk.c. Так же выделяете код и меняете в main.c


Сохраняетесь и компилите новый PRXEncrypter.exe. Там в папке уже есть батник для компиляции zMAKE.BAT и батник для очистки остатков предыдущей компиляции zCLEAN.BAT.
Всегда после компиляции делайте очистку перед следующей компиляции.
Подписываете им необходимые файлы, подходящие по размеру, проставленному в позиции 0х2C хедера донора.


Скачать:
prxDecrypter_Buff.7z (http://yadi.sk/d/mv1zmOX_3xrl8)
prxDecrypter_Buff_12mb.7z (http://yadi.sk/d/v1_PjrYV3xrmy)

ErikPshat
07.04.2013, 20:01
Гмм, вытащите, пожалуйста, подпись из Brainpipe, там размер eboot.bin 10 мб, т.е. хватит на всё-про-всё. :DКуда столько? :)
Ну надеюсь ты и сам справишься с этой инструкцией. Там всё легко и просто, только CTRL+C и CTRL+V.

Yoti
07.04.2013, 20:11
компилишь новый PrxEncrypter через тот же PSPSDK
Так pspsdk это и есть патченый mingw с необходимым файлом, в общем-то.

Самой только PRXDecrypter MOD нигде нету
Я так понял, и не было нигде - пришлось напрягать знакомых прогеров и самому делать ХД

BlackDaemon
07.04.2013, 20:25
Куда столько? :)
Ну надеюсь ты и сам справишься с этой инструкцией. Там всё легко и просто, только CTRL+C и CTRL+V.
Наполовину справился - достал заголовок и кирк, отредактировал main.c и попытался собрать:
gcc -Wall -Os -c -o crypto.o crypto.c
process_begin: CreateProcess((null), gcc -Wall -Os -c -o crypto.o crypto.c, ...)
failed.
make (e=2): The system cannot find the file specified.
C:\pspsdk\bin\make: *** [crypto.o] Error 2
Press any key to continue . . .

Ставил Minimalist PSPSDK for Windows (http://www.pspx.ru/forum/showthread.php?t=90993). Я чего-то не докачал, или нужен другой сдк, чтобы собрать PrxEncrypter? :crazy:

ErikPshat
07.04.2013, 20:27
Yoti, давай ищё...

Хе-хе, хотел сдампить кирк с Brainpipe 9,99 МБ (10*481*216 байт), но декриптер тут же вешался с сообщением "estimating output size".
Ну собсно та же история, как тогда была с EDecrypt от mc707, тогда тоже голову ломали, что тег известный и есть ключ, но не декриптовался никак :)
Увеличил буфер с 10 до 12 Мб и всё пошло. Залил ещё одну сборку в FAQ (http://www.pspx.ru/forum/showpost.php?p=1068993&postcount=44).

riku.kh3
07.04.2013, 20:29
BlackDaemon, в уже скомпилированный вручную в хексе можешь вставить:

455C-466B = kirk.buff
466C-47BB = заголовок

ErikPshat
07.04.2013, 20:45
Я чего-то не докачал, или нужен другой сдк, чтобы собрать PrxEncrypter?Эмм, помнится у меня на голой системе PrxEncrypter компилился, вроде.
Но так же припоминаю, что что-то у меня тоже было не так вот с этим:
crypto.o crypto.c
Для crypto алгоритма вроде что-то ещё нужно. У меня просто щас стоит и Пёрл и Джава и Питон и всё на свете.

Если есть лишние 10-20 Гб и хороший трафик, то не поленись и поставь полную сборку Cygwin.

Запускаешь маленький веб-инсталлер http://cygwin.com/setup.exe
Там выбираешь "Install from internet"
Путь оставляешь по дефолту C:\cygwin
Далее предложат выбрать сервер, который поближе к России. Выбирай немецкий сервер .de и лучше http, чем ftp.
В большом открывшемся окне нажимай на чёрный значёк круглешка обновления и выбери "All default"
Далее будет качаться долго и упорно, часа 2-3-4-5 :) смотря какая скорость.
Если скорость будет меньше положенной, чем пропускная способность твоего канала, то отключись и подключись к другому серверу, пока не получишь хорошую скорость.

После этого у тебя по идее должно компилиться всё подряд, даже прошивка PRO ;)

riku.kh3
07.04.2013, 20:48
Вообщем под PS3 конвертил Disgaea Infinite (ULJS00286), после лого minis приставка вешалась на малевиче.. Сама игра под 6.20 и грузится через OPNSSMP.BIN. Декриптнул EBOOT, переподписал методом выше заголовком от Angry Birds minis, пересобрал образ без ненужного теперь OPNSSMP.BIN и после этого она пошла на PS3, мдя))

ErikPshat
07.04.2013, 23:29
455C-466B = kirk.buff
466C-47BB = заголовокАга, можно и не конвертить, а менять в уже готовом PRXEncrypter хексом :D

Причём верно для обоих энкриптеров PrxEncrypter_AstonishiaStory2.exe и PrxEncrypter_TinyHawk.exe


BlackDaemon, кстати, вот здесь хорошая инструкция по установке Windows Cygwin PSPSDK: http://code.google.com/p/procfw/wiki/CompilingOnWin

Собственно почти тоже самое, что уже выполняли, но там всё по порядку и красиво.

ErikPshat
08.04.2013, 18:21
[Гайд] Запускаем хомбрю на PS3 через эмулятор PSP (minis)
Честно говоря, такое название темы с такой инструкцией меня несколько смутило, потому что те, кто имеет представление о Homebrew для PSP, особенно кто имеет представление о компиляции программ для PSP, то просто покрутили бы пальцем у виска. Вот если бы ты назвал тему несколько по другому, тогда бы всё встало на свои места. Нужно переименовать тему так:
[Гайд] Запускаем старые хомбрю, написанные под ядро 1.00/1.50 на PS3 через эмулятор PSP (minis)


Я понял почему у меня все подписанные хомки, минисы, образы ISO на официальной прошивке работают, а у тебя постоянно что-то не так: выползают ошибки, чёрные экраны и отсутствие текста. Видимо мы друг друга не совсем понимаем. И мне вообще показались странными и загадочными твои вопросы в теме.

Сейчас объясню почему...
Я так понял, что у тебя нет PSP, но зато есть PS3 :) и ты просто заменяешь PSP эмулятором JPCSP (http://www.jpcsp.org/)
А в этом эмуляторе лежат Homebrew, написаны уж очень давно, ещё под ядро 1.00/1.50, которые писались 6-7-8 лет назад. Такие Homebrew могут вообще не запускаться даже на PSP с CFW. Дело в том, что:

Я провожу свои эксперименты на Homebrew 3.xx (3.03 - 6.60) - именно с тех пор Sony изменила способ компиляции программ, и способ их упаковки в EBOOT.PBP и запуска, а так же, внесла изменения в модули прошивки. Поэтому, теперь все "новые" программы Homebrew на прошивках 3.xx/4.xx/5.xx/6.xx работают по принципу, сформулированному для ядра 3.хх.
А ты проводишь эксперименты на Homebrew 1.00/1.50 - поэтому у тебя не так запускается и не так подписывается. Например Homebrew под ядро 1.50 вообще состояли из двух папок и в каждой папке находился свой EBOOT.PBP, один из которых являлся обычным PRX в чистом виде, а второй содержал только PARAM.SFO и ресурсы.

Взять к примеру вот это твоё сообщение:
Такс, результаты первых тестов.

прошли fake_np:
- ProShell - запускается на оф. прошивке, но на PS3 текст не выводится (сначала подумал, что не работает, а вот оно что!)
- 2dstudio.prx - запускается на оф. прошивке, на пс3 текста нет
http://i45.tinypic.com/a4y0c5.pngдошли до этапа с fake_np:
- lines.pbp - работает под кастомом, на оф. прошивке 0x80020148
- logic.pbp - см. выше
- skinning.pbp - см. выше

после подписывания ELF неработают:
PSPong 0.1.pbp - подписал и засунул в образ, при запуске на кастоме чёрный экран, приставка зависает.
basic.pbp (из SDK 2.0) - ведёт себя аналогично
dragon.pbp (из SDK 2.0) - ведёт себя аналогичноВсе эти Homebrew написаны были очень давно под ядро 1.00/1.50 и используют функции тех старых прошивок, которые могут не работать на новых прошивках 3.xx-6.xx. Поначалу я не понял, откуда ты взял эти программы, т.к. я не пользуюсь JPCSP, потому что у меня есть живые PSP-1004 и PSP-3004 :)
Когда мы тестировали "Cube", я смотрел твою попытку подписать его и у тебя он не работал, вот твоя работа: http://www.pspx.ru/forum/showpost.php?p=1068833&postcount=22
Я посмотрел на PRX (ELF) и там прекрасно видна принадлежность к сырому виду ELF прошивок 1.xx. У таких ELF в самом начале отсутствуют смещения на секции, там один нули:
8966Это происходит потому, что при компиляции был создан только сырой ELF.
А при компиляции для прошивок 3.xx и выше, происходит так же создание сырого ELF, но потом из него происходит пересоздание в готовый PRX. У него в начале файла уже нету нулей и там всё забито смещениями на адреса секций.
Посмотри разницу:
8967Поэтому я сразу так и подумал, что ты не правильно откомпилировал исходники (хотя теперь понимаю, что ты брал готовые программы из JPCSP), поэтому я тебе написал, что нужно сделать:
У кубика похоже статический, т.к. видно по ELF-файлу, что структура другая, там в начале нету секций релокации, а только одни нули. Такие статичные Эльфы действительно просто так после подписи не запустятся.

Чтобы этого избежать, то нужно при компиляции добавить в Makefile строчку: BUILD_PRX = 1
И возможно понадобится это: PSP_FW_VERSION = 371 (иначе оно при компиляции показывает FW = 150), хотя думаю это не важно.

И я тебе скомпилировал по нормальному, подписал и он заработал у тебя.
Исходный код Cube лежит в PSPSDK по пути C:\pspsdk\psp\sdk\samples\gu\cube
Поэтому видимо ты воспринял это так, что нужно производить такое действие со всеми Homebrew, наверное.
На самом деле уже давным-давно, с 2007-го года, такие программы перестали писать и все перешли на ядро 3.xx, поэтому сейчас основная масса Homebrew уже и так скомпилирована с использованием BUILD_PRX = 1 и в программах используются новые названия функций.

Кто имеет давно PSP, конечно про такие нюансы все знают, поэтому об этом никто и не пишет в инструкциях, все и так понимают, что для запуска старых программ необходимо иметь Kernel_Addon_1.5 или плагин LEDA.
Сейчас конечно остались с тех времён много старых программ и хороших эмуляторов, про которые все давно забыли. И если есть исходный код, то их можно перекомпилировать под 3.xx и вероятно ещё придётся исправлять старые функции на их новые аналоги.


Сорри, что так много написал не по теме. Просто старался объяснить ситуацию, чтобы было наиболее понятно.
А название темы исправь или инструкцию переделай, и на PS3Hax.net тоже исправь название темы, а то засмеют ведь :)

Да и людей вводишь в заблуждение. А ведь некоторые так и подумают, что для подписи Homebrew обязательно нужно найти исходники, скомпилировать заново с BUILD_PRX = 1 и только после этого подписывать.

Кстати, почему бы тебе не производить эксперименты с нормальными Homebrew, которые сотнями лежат в инете и у нас в разделах:
Тут: http://www.pspx.ru/forum/forumdisplay.php?f=295
И тут: http://www.pspx.ru/forum/forumdisplay.php?f=69

BlackDaemon
08.04.2013, 19:05
Ой-ёй...многабукав.:crazy: Но попробую по-порядку на всё ответить. :D

1. Название темы - первое, что пришло в голову. Если оно вам кажется невменяемым - измените на своё усмотрение, я не против. ;)
2. По поводу наличия консолей - в наличии PSP, PS3 и Vita. Первым делом я проверял на PSP, т.к. нужно было убедиться, что приложение может работать под OFW 6.60.
3. По поводу хомбрю - да, вначале я взял что было - сэпмлы из папки в комплекте с Jpcsp, а они там как оказалось древнющие. Вчера дошли руки (додумался таки проверить, нет ли там исходников сэпмлов :D ) собрать несколько сэмплов из комплекта с PSPSDK- они замечательно работает (кроме текста, увы - судя по всему эмулятор дебаг текст не держит). И да, если взять PSP отдельно, так можно воспользоваться загрузчиком с sceKernelLoadExec - старьё - PSPong, PSPuzzle таким способом работает. На PS3 в эмуляторе использование этой функции (в том числе sceKernelLoadModule+sceKernelStartModule) судя по всему ограничено или заблокировано вовсе.

В продолжение темы на PS3Hax.net - я в общем выложил только то, что работает - PSPSDK + описание как правильно собрать сэмплы в комплекте с ним. А то, что таким образом запустится очень ограниченное кол-во хомбрю - так это очевидно. Для пс3 сцены в любом случае это уже плюс (учитывая, насколько жёстко эмулятор защищён и ограничен), по крайней мере появилась возможность исследовать, на что способен эмулятор (даже таким образом).

Прошу прощения, если пропустил что-либо - текста много, немного на соображалку давит. :D

И да, в свою защиту могу ещё добавить, что хомбрю переводится как самопал. :) Самопал есть самопал, неважно в каком он виде.:lol:

ErikPshat
08.04.2013, 19:46
Если оно вам кажется невменяемым - измените на своё усмотрение, я не против.Ну это твоя тема - ты и изменяй.
А тебе не кажется странным?
Там с 1-го по 5-ый пункт относится только к Homebrew 1.xx.
В большинстве случаев, начинать с 1-го пункта абсолютно лишено смысла.
Поэтому более вменяемым было бы переименовать тему, либо 1-4 пункты сделать только как примечание, типа:

Если вы хотите подписать Homebrew 1.xx и у вас есть исходный код, тогда выполните первоначально эти 4 пункта...

Отличить Homebrew 1.xx от Homebrew 3.xx(6.xx) вы можете по этим двум скриншотам: Скрин1 и Скрин2

Если у вас обычная Homebrew 3.xx, тогда сразу переходите к пункту №5.

BlackDaemon
08.04.2013, 20:27
ErikPshat, вроде бы подправил. :) Спасибо за пример и скриншоты. ;)

ErikPshat
09.04.2013, 13:47
BlackDaemon, можешь проверить мою модификацию SEBOOT? Больше всего интересует шифрование с тегами 0 и 26...

Изменения видно на скриншотах :D (original and mod)

http://img33.**************/img33/9941/signeboot.png http://img28.**************/img28/6641/signebootmodbyerikpshat.png

BlackDaemon
09.04.2013, 14:18
ErikPshat,

tag0 - работает на PSP с OFW и PS3.
tag26 - неработает на PSP с OFW (вылетает со "старой, знакомой" ошибкой), на PS3 при запуске в логе дебаггера говорится об unhandled exception.

На всякий случай оставляю закриптованый куб с последним тегом - надеюсь, что подписал правильно. :D
http://rghost.ru/45157914

Edit: сейчас перезакачаю.:crazy:
Edit2: сравнил закриптованые файлы на выходе - побайтово одинаковые, т.е. tag26 неработает.
Edit3: ради интереса сравнил закриптованые файлы с tag0 и tag26 - а изменений, то совсем немного. :D
http://i54.fastpic.ru/thumb/2013/0409/6c/610edf7258c50c73bfa21f1bece0ad6c.jpeg (http://fastpic.ru/view/54/2013/0409/610edf7258c50c73bfa21f1bece0ad6c.png.html)

ErikPshat
09.04.2013, 14:38
Отлично, тег 0 - это самый первый ключ, использовавшийся в прошивках 2.xx, соответственно он до сих пор поддерживается, иначе те старые официальные игры не смогли бы работать.


tag26 - неработает на PSP с OFWСтранно, это последний ключ на прошивке 6.60 и в прошивке он присутствует.

В общем убрал этот тег 0xd91690f0, последняя ревизия во вложении...
Можешь отдать своим коллегам ;)

SEBOOT_MOD (full range of tags) (http://yadi.sk/d/gxSX8b4o3xs5J)

riku.kh3
09.04.2013, 16:37
http://img856.**************/img856/6180/prx.png

Хмм а почему в PRX'ах которые в играх ~SCE@ заголовок 64 байта присутствует? Что это такое вообще и как сгенерировать? :scratch_one-s_head:

ErikPshat
09.04.2013, 17:24
riku.kh3, по моему заголовок SCE на запуск модулей не влияет. Его можно удалить совсем и декриптовать.
В декриптованном файле этот код заголовка присутствует, который в позиции 0x10-0x28, так что, если что, его можно заново восстановить.

BlackDaemon, а это, я так понял DEMO-игры от PSP на PS3 всё-таки не поддерживаются?

BlackDaemon
09.04.2013, 17:37
ErikPshat, проверять надо. :) А учитывая то, что у эмулятора и так с совместимостью неважно это будет не очень просто. :D

Yoti
09.04.2013, 21:55
Можешь отдать своим коллегам
http://wololo.net/2013/04/09/psp-games-and-homebrews-running-on-the-ps3-through-a-hack/

Хмм а почему в PRX'ах которые в играх ~SCE@ заголовок 64 байта присутствует? Что это такое вообще и как сгенерировать?
А чёрт его знает, откуда он и зачем. Сгенерировать легко: psp-packer (с ключом "-s") его умеет делать)

ErikPshat
10.04.2013, 06:36
BlackDaemon, я не понял, что они химичат? Сделали fakebig_np с заголовком от Syphon Filter™ Dark Mirror [UCES00310].
Это же совсем не демоверсия, а платная игра с UMD-диска. И даже подписав её заголовком другие игры, они не пойдут на официальной прошивке, т.к. нужно её купить, вернее активировать покупку.

Ведь tpu давно, ещё год назад мог поступить таким образом, однако же смысл был запускать игры не на CFW, а на официальных прошивках. Поэтому так долго искали Demo-версию с наиболее большим размером. А самая большая найденная игра DEMO оказалась Final Fantasy Type-0: Summer http://www.pspdemocenter.com/page.php?id=3917
Размер декриптованного образа записывается в EBOOT.PBP по адресу 0x28 (0x46535000 = 1179865088 байт). Поэтому можно подписать другую игру с заголовком от этой игры не более такого размера.

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

Мы ведь голову ломаем именно для того, чтобы игры и Homebrew работали именно на официальной прошивке. А на CFW они и так давным давно идут без всяких манипуляций. Так же и на PS3 с CFW можно было давно запускать не подписанный код. Помню я сам компилировал Showtime с плагинами в PKG и без всякой подписи устанавливал на PS3, когда у меня была PS3 3.55 Kmeaw и Waninkoko v2.

Вообщем я не понимаю, зачем они подписывают игры большим заголовком от платной игры. Только, чтобы запускать их на CFW?
А как же тогда пользователи с OFW?

BlackDaemon
10.04.2013, 10:15
ErikPshat, отставить панику! :D Для запуска любой PSP игры из PSN (неважно, что она платная) на PS3 достаточно сгенерировать правильные MINIS/ISO.BIN EDAT'ы. И запихнуть их в pkg как бесплатные. Всё. :) А взяли они Syphon Filter, чтобы большие образы запихнуть в PBP можно было (я для этих целей использую PBP от Dante's Inferno).

Мы ведь голову ломаем именно для того, чтобы игры и Homebrew работали именно на официальной прошивке. Голову мы ломаем потому, что - несмотря на то, что PS3 запускает игры по другой схеме, внутри "эмуляторной песочницы" окружение OFW. Впрочем, оно ещё хуже (в плане драконовских ограничений).
А на CFW они и так давным давно идут без всяких манипуляций. Так же и на PS3 с CFW можно было давно запускать не подписанный код. Это касается только родных PS3 приложений. В эмуляторе PSP свои правила, так сказать. :D
Только, чтобы запускать их на CFW?
А как же тогда пользователи с OFW?Да данный момент только так, самопальные pkg пакеты на CEX (Retail) OFW не установить. Разве, что...есть у меня одна теория на этот счёт, надо проверять. Edit: не работает. Edit 2: но чисто теоретически работать может, нужно только научиться делать правильные pkg пакеты. Ещё когда Kakaroto работал над своим HEN'ом для OFW 4.xx, то он говорил что устанавливать pkg может, но запустить нет (из-за подписи SELF). В Minis SELF'ы отсутствуют. В общем, провёл я такой эксперимент - на кастоме 3.55 поставил пакеты с самопальными Minis и обновился до гибрида на базе киоск-прошивки. На удивление, установленный самопал запустился, т.е. если умельцы смогут сварганить правильные pkg пакеты, то...будут PSP игры работать на таком гибриде из киоск+оф. прошивки тоже.:crazy:

http://i.videobam.com/nhenV.jpg (http://videobam.com/widget/nhenV)

З.Ы. бесплатных Minis в PSN я не видел. PSP ремастеры только в японии, причём на BluRay.

ErikPshat
10.04.2013, 20:52
BlackDaemon, а через дистанционное воспроизведение с PSP подписанные бесплатной подписью Минисы разве на PS3 OFW не пойдут?
Ведь наша экспериментальная Homebrew "Cube Sample" вроде запускается на PS3 OFW :scratch_one-s_head:

Вообще думаю сцена движется не в том направлении. Нужно подписывать игры бесплатными демками и запускать на официальной прошивке.
Потом на PS3 вроде давно механизм PKG известен, почему бы не работать над тем, чтобы сделать Fake_pkg.exe :D

riku.kh3
10.04.2013, 21:25
В PS3 для PKG используется ECDSA подпись, чтобы ее взломать нужны соответствующие приватные ключи, а этих ключей у нас никогда и небыло - в ps3 их нет и алгоритм fail0verflow не поможет. Без пропатченного spu_pkg_rvk_verifier вы никогда не сможете левые PKG устанавливать.

Впрочем если может через эмулятор BD привода научатся хомбрю запускать.. даже без кернел-прав доступ к hdd0 есть, элементарно если положить содержимое и перестроить базу данных приложение в xmb появится, может даже установщик какой-нибудь было бы реально замутить.

BlackDaemon
10.04.2013, 22:08
BlackDaemon, а через дистанционное воспроизведение с PSP подписанные бесплатной подписью Минисы разве на PS3 OFW не пойдут?
Можно, конечно, было взять PSP и через RemoteJoyLite вывести изображение на PC, а уже оттуда его записать... :D

Ведь наша экспериментальная Homebrew "Cube Sample" вроде запускается на PS3 OFW :scratch_one-s_head:
Я всё тестировал на кастом прошивке (кроме последней записи с ТВ, и то - в этом направлении надо ещё копать).

Вообще думаю сцена движется не в том направлении. Нужно подписывать игры бесплатными демками и запускать на официальной прошивке.
Потом на PS3 вроде давно механизм PKG известен, почему бы не работать над тем, чтобы сделать Fake_pkg.exe :D
Да вот, не всё так просто.:crazy:

riku.kh3, на всякий случай напомню и приведу цитату Kakaroto (http://www.ps3devwiki.com/wiki/KaKaRoTo_Kind_of_%C2%B4Jailbreak%C2%B4):
As you all know, I have had a 'half jailbreak' ready for a few months now, I can install what I want on the ps3, even with the latest firmware version, but I cannot run the apps (unless they are real demos of course)...

Из чего следует, что устанавливать самопальные пакеты он всё же как-то может.

ErikPshat
10.04.2013, 22:19
чтобы ее взломать нужны соответствующие приватные ключи, а этих ключей у нас никогда и небыло - в ps3 их нетНу как же нет. А чем же тогда официальные приложения запускаются на PS3? Конечно же в прошивке есть ключи и на их основе из кирка процессора генерится код декриптовки. Ну не с потолка же они берутся.

riku.kh3
10.04.2013, 22:24
riku.kh3, на всякий случай напомню и приведу цитату Kakaroto (http://www.ps3devwiki.com/wiki/KaKaRoTo_Kind_of_%C2%B4Jailbreak%C2%B4)
Одно дело через экплоит исхитриться установить PKG, и совершенно другое полностью валидный PKG научиться собирать. Все-таки немного разные вещи, тем более что в первом случае сони тут же лавочку прикроет.

ErikPshat
10.04.2013, 22:29
А кстати, из какой папки должна запускаться Homebrew на PS3? То есть вообще, официальные программы в какой папке должны быть?
Может сделать PKG чтобы он устанавливал хомку в нужное место, а потом её запускать прямо из PS3?

riku.kh3
10.04.2013, 22:40
Ну как же нет. А чем же тогда официальные приложения запускаются на PS3? Конечно же в прошивке есть ключи и на их основе из кирка процессора генерится код декриптовки. Ну не с потолка же они берутся.
Есть public-ключи для декриптовки и private-ключи которыми сони криптует все. В общих чертах, если кто историю не помнит, на ps3 сони допустила грубую ошибку в генерации этих самых приватных ключей и fail0verflow нашли алгоритм с помощью которого можно было математически высчитать приватные ключи (которых в самой пс3 никогда небыло). ECDSA подпись и все что связано с генерацией приватных ключей сони в следующей прошивке тут же пофиксила. Поэтому подписать что либо под 3.56+ будь то eboot или pkg невозможно.

riku.kh3 добавил 10.04.2013 в 22:40
А кстати, из какой папки должна запускаться Homebrew на PS3? То есть вообще, официальные программы в какой папке должны быть?
dev_hdd0/game/<код_игры>/
Но в отличие от PSP, здесь хомбрюшка сразу же в XMB не появится если просто скопировать папку.. она должна быть прописана в базе данных. То есть если в рекавери меню перезагрузить ps3, выбрать там перестроить базу данных, то только тогда она появится в XMB.

BlackDaemon
10.04.2013, 22:41
riku.kh3, в любом случае пища для размышлений уже есть. ;) В этом направлении почему особо-то не ковыряли - тогда пытались запустить PS3 хомбрю, а для этого ещё нужен валидный SELF. Здесь (всмысле, для Minis) он уже не нужен. :)

riku.kh3
10.04.2013, 22:46
BlackDaemon, edat'ы которые сейчас генерируются, откровенно говоря, выглядят как месиво.. Наверняка ps3 игнорит какие-то ошибки при проверке. Если оно и будет в текущем состоянии работать на OFW то думаю не долго))

ErikPshat
11.04.2013, 01:35
он говорил что устанавливать pkg может, но запустить нет (из-за подписи SELF)Ну так если есть возможность устанавливать PKG, то внутренности можно же подписать демонстрационной версией игры и они должны устанавливаться, а потом проигрываться.
Мне кажется так должно быть.
И касаемо PSP Homebrew и вообще игр, они ведь в песочнице PSP на PS3 устанавливаются без всяких SELF, а прямо в таком же формате, как PSP, то есть, в прямом виде => EBOOT.PBP.

А что у тебя за телевизор, как у моей пра-бабушки?

BlackDaemon
11.04.2013, 02:23
Ну так если есть возможность устанавливать PKG, то внутренности можно же подписать демонстрационной версией игры и они должны устанавливаться, а потом проигрываться.
Мне кажется так должно быть.
Как это сделал Kakaroto мне неизвестно. Это надо связываться с ним и выяснять.

И касаемо PSP Homebrew и вообще игр, они ведь в песочнице PSP на PS3 устанавливаются без всяких SELF, а прямо в таком же формате, как PSP, то есть, в прямом виде => EBOOT.PBP.

А что у тебя за телевизор, как у моей пра-бабушки?
Если опустить некоторые особенности, то получается так.

Ну-у...что есть - то есть.:crazy:

ErikPshat
11.04.2013, 04:00
BlackDaemon, ну вот смотри, когда мы с akela1979 одно время компоновали Showtime Mediacenter в PKG, программа ведь устанавливалась в ту папку, какую мы хотели и ярлык программы появлялся в XMB. Я имею в виду установку приложений на CFW. То есть, в PKG мы могли запихать всё, что угодно и произвести установку куда угодно.

Поэтому я о чём говорю. Можно ведь так же, как Cube Sample, подписать любую хомку, собрать в EBOOT.PBP, упаковать в установщик PKG и он этот подписанный EBOOT.PBP установит в любое место на dev_hdd в папку например ULES12345 и выведет ярлык в меню GAME.
Мне кажется, что установленная таким образом Homebrew должна работать на PS3, даже на официальной прошивке.

Правда PS3SDK у меня остался на стационарном компьютере, который сломался ))) а сейчас я сижу на нетбуке, поэтому сразу проверить сам не могу, нужно долго и нудно устанавливать SDK и много места на харде. Там компиляция в PKG производилась через SDK + дополнительный пакет PSl1ght.


Ну так что, на чём мы остановились?

Заметил, что в PrxEncrypter ты засунул заголовок от Breakquest размером 5'853'628 байт :D
Ну ты артист ваще. Я тут мучаюсь, ищу дефициты с как можно меньшим заголовком, а ты воткнул туда аж на 5 Мб. Или кто это сделал?
Ведь у хомок сам DATA.PSP или у игр EBOOT.BIN совсем маленький, изредка встречаются на 1,5 Мб.
А тут получается даже саленькие файлы будут шифроваться в 5 Мб.

Если нужно, то найди мне заголовки 0xD916xxF0 от разных игрушек с разными размерами, штук 5-10-20-30.
Я тебе соберу один PrxEncrypter со всеми заголовками сразу и при шифровании будет автоматически подставляться наименьший заголовок, достаточный для подписываемого файла. Вот в эту тему кидай хедеры по инструкции: http://www.pspx.ru/forum/showthread.php?t=103063

BlackDaemon
11.04.2013, 10:40
ErikPshat, куда устанавливаются pkg пакеты я в курсе. :) Проблема в том, что на такой "гибрид" любой самопальный пакет (на данный момент) не поставить, неважно что там внутри. Вчера ради интереса поставил оф. киоск 4.40, так всплыла ещё одна "гадость" - под неё pkg пакеты в своём формате требуются, т.е. даже оф. pkg из стора не установить - нужен гибрид на основе киоск+оф. прошивок.



Гмм...остановились мы вроде на том, что у разработчиков из PSP сцены появилась возможность с пом. хомбрю начать исследовать эмуль. Вопрос в том, кто этим заниматься будет?

BreakQuest? Нет, это точно не моя работа.:crazy: Моя с залоговком от Brainpipe - до 10'481'216 байт. :D Тем более, что польза от такого размера всё-таки есть - например, Pirates of Caribbean: Dead Man's Chest запустить удалось, игра использовала загрузчик для запуска SP или MP режима. Подписал prx от SP режима и заменил eboot.bin. Заработала на PS3. :) Правда, неиграбельно - из-за проблем с графикой. Beowulf тоже с загрузчиком, размер beowulf.prx - 8'719'172 байта. Но тут фэйл - ISO образ с подписанным prx вместо eboot.bin работает, а после прогона через fake_np зависает на первом загрузочном экране. Мистика...:ph34r:

Пока что острой необходимости я в этом не вижу, т.ч. на некоторое время можно этот вопрос отложить. ;)

riku.kh3
11.04.2013, 11:52
PRX модули в играх правильно подписать тегами от ебутов не получается(( блекскринит пс3 и все тут.. декриптованые тоже отвергает.. надо что-нить придумать((

BlackDaemon
11.04.2013, 12:04
riku.kh3, с переменным успехом работает для некоторых игр с загрузчиками - Killzone: Liberation таким образом запускается на PSP с OFW, на PS3 всёравно exception выбивает. =\

riku.kh3
11.04.2013, 12:25
BlackDaemon, я думаю надо на заведомо рабочих играх тестить.. декриптовать, подписать и проверять на ps3.. киллзон она и на кобре не идет

BlackDaemon
11.04.2013, 12:39
riku.kh3, я более, чем уверен, что корень проблемы заключается в ограничениях sceKernelLoadExec и sceKernelLoadModule/sceKernelStartModule. А это можно вылечить только вмешательством в код эмулятора, наверно.

riku.kh3
11.04.2013, 12:52
BlackDaemon, если так рассуждать то и вообще во всем этом крипто мамбоджамбо и пересборкой pbp нет смысла)) если можно вмешательством в код эмулятора его заставить сразу ISO запускать xDD

BlackDaemon
11.04.2013, 13:06
riku.kh3, ладно, распишу более подробно:

- все эксплойты в Minis для PS Vita не работают на PS3 - эмулятор падает с exception'ом.
- вызов функций sceKernelLoadModule+sceKernelStartModule с левым ELF из самопального загрузчика приводит к появлению сообщения об ошибке в логе TargetManager.
- на вызов функции sceKernelLoadExec с левым ELF из самопального загрузчика консоль никак не реагирует.
- все игры использующие внешний загрузчик [sceKernelLoadExec/sceKernelLoadModule+sceKernelStartModule] приводят к падению эмулятора с exception'ом. Одну я таки "вылечить" смог - Pirates of Caribbean: Dead Man's Chest.

riku.kh3
11.04.2013, 13:55
Одну я таки "вылечить" смог - Pirates of Caribbean: Dead Man's Chest.
Отсюда, пожалуйста, поподробнее... :)

BlackDaemon
11.04.2013, 14:02
riku.kh3, предыстория (http://www.pspx.ru/forum/showpost.php?p=1069281&postcount=78), так сказать. Конкретнее - в PSP_GAME\USRDIR\SYSDIR\ лежит SP_BOOT.BIN. Подписываешь его через PrxEncrypter и заменяешь eboot.bin.

riku.kh3
11.04.2013, 14:08
BlackDaemon, метал гир эсид пытаемся запустить (на кобре работает), там в папочке modules почти все prx'ы (коих 35 штук) декриптованые лежат. Думаю если правильно их подписать с нужным тегом то должна пойти.. но не получается пока((

BlackDaemon
11.04.2013, 14:43
riku.kh3, глянь, что творится в папке stage. :D

riku.kh3
11.04.2013, 15:39
BlackDaemon, мдя)) мимо моего беглого взляда это прошло)) надо пока на что-нить другое перейти попроще

BlackDaemon
11.04.2013, 16:56
riku.kh3, гмм, я тут на интересный момент наткнулся - Prince of Persia: Revelations зависал также на загрузочном экране, когда я его через fake_np со сжатием запускал на PSP. Решил без сжатия сделать - заработал на PSP.

SILENT-Pavel
11.04.2013, 17:29
Таким образом и на кобре юсб можно запускать хоумбрю перегранные в исо?

BlackDaemon
11.04.2013, 22:33
SILENT-Pavel, думаю, что вполне возможно. :) Но проверяй сначала что-то простенькое - сэмплы из сдк, например, т.к. совместимость неважная.

BlackDaemon добавил 11.04.2013 в 22:33
CompilerPerf работает через printf :)
http://i47.tinypic.com/ftg7ti.jpg
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspctrl.h>
#include <pspdisplay.h>
#include <pspgu.h>
#include <pspgum.h>
#include <psppower.h>

#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>

PSP_MODULE_INFO("Compiler Performance Test", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | PSP_THREAD_ATTR_VFPU);

int done = 0;
int cpuFreq = 222;
int startSystemTime;

float pspDurationMillis[] = { 0, 910, 1137, 1214, 1023, 1125, 1227, 962, 1007, 1066, 1364, 682, 682, 819, 819, 819, 819, 682, 1214, 1227,
866, 1072, 1360, 792, 770, 920, 163, 243, 227 };
char *testNames[] = { "", "Empty loop", "Simple loop", "read32", "read16", "read8", "write32", "write16", "write8",
"Function call no params", "Function call with params",
"FPU add.s", "FPU mul.s",
"VFPU vadd.s", "VFPU vadd.p", "VFPU vadd.t", "VFPU vadd.q", "VFPU vadd.q sequence",
"LWC1", "SWC1",
"memcpy (native)", "memset (native)", "strcpy (native)",
"memcpy (non-native)", "memset (non-native)", "strcpy (non-native)",
"syscall, fast, no params", "syscall, fast, one param",
"jalr"
};

#define KB(n) ((n) * 1024)
#define MB(n) (KB(n) * 1024)
#define GB(n) (MB(n) * 1024)
#define BUFFER_SIZE MB(10)
char __attribute__((aligned(16))) buffer[BUFFER_SIZE];
int dummy;
int sumDurationMillis;
float sumPspDurationMillis;

SceUID logFd;


void printResult(char *name, int durationMillis, float pspDurationMillis)
{
char s[1000];
printf("%-25s: %5d ms (%5.0f%%) @ %d MHz\n", name, durationMillis, pspDurationMillis / durationMillis * 100, scePowerGetCpuClockFrequencyInt());
sprintf(s, "%-25s: %5d ms (%5.0f%%) @ %d MHz\n", name, durationMillis, pspDurationMillis / durationMillis * 100, scePowerGetCpuClockFrequencyInt());
pspDebugScreenPrintf("%s", s);
sceIoWrite(logFd, s, strlen(s));
}


void startTest()
{
startSystemTime = sceKernelGetSystemTimeLow();
}


void endTest(int testNumber)
{
int endSystemTime = sceKernelGetSystemTimeLow();
int durationMicros = endSystemTime - startSystemTime;
int durationMillis = (durationMicros + 500) / 1000;
sumDurationMillis += durationMillis;
sumPspDurationMillis += pspDurationMillis[testNumber];

printResult(testNames[testNumber], durationMillis, pspDurationMillis[testNumber]);
}


void runTest1()
{
startTest();
int i;
int j;
for (j = 50; j > 0; j--)
{
for (i = 1000000; i > 0; i--)
{
}
}
endTest(1);
}


int runTest2()
{
startTest();
int i;
int j;
int sum = 0;
for (j = 50; j > 0; j--)
{
for (i = 1000000; i > 0; i--)
{
sum += i;
}
}
endTest(2);

return sum;
}


int runTest3()
{
startTest();
int i;
int j;
int sum = 0;
for (j = 0; j < 10; j++)
{
int *address = (int *) buffer;
for (i = BUFFER_SIZE / 4; i > 0; i--)
{
sum += *address++;
}
}
endTest(3);

return sum;
}


int runTest4()
{
startTest();
int i;
int j;
int sum = 0;
for (j = 0; j < 5; j++)
{
short *address = (short *) buffer;
for (i = BUFFER_SIZE / 2; i > 0; i--)
{
sum += *address++;
}
}
endTest(4);

return sum;
}


int runTest5()
{
startTest();
int i;
int j;
int sum = 0;
for (j = 0; j < 3; j++)
{
char *address = (char *) buffer;
for (i = BUFFER_SIZE; i > 0; i--)
{
sum += *address++;
}
}
endTest(5);

return sum;
}


void runTest6()
{
startTest();
int i;
int j;
for (j = 0; j < 10; j++)
{
int *address = (int *) buffer;
for (i = BUFFER_SIZE / 4; i > 0; i--)
{
*address++ = i;
}
}
endTest(6);
}


void runTest7()
{
startTest();
int i;
int j;
for (j = 0; j < 5; j++)
{
short *address = (short *) buffer;
for (i = BUFFER_SIZE / 2; i > 0; i--)
{
*address++ = (short) i;
}
}
endTest(7);
}


void runTest8()
{
startTest();
int i;
int j;
for (j = 0; j < 3; j++)
{
char *address = (char *) buffer;
for (i = BUFFER_SIZE; i > 0; i--)
{
*address++ = (char) i;
}
}
endTest(8);
}

void runTest9c()
{
dummy = 0;
}

void runTest9b()
{
runTest9c();
runTest9c();
runTest9c();
runTest9c();
runTest9c();
runTest9c();
runTest9c();
runTest9c();
runTest9c();
runTest9c();
}

void runTest9a()
{
runTest9b();
runTest9b();
runTest9b();
runTest9b();
runTest9b();
runTest9b();
runTest9b();
runTest9b();
runTest9b();
runTest9b();
}

void runTest9()
{
startTest();
int i;
int j;
for (j = 0; j < 30; j++)
{
for (i = 10000; i > 0; i--)
{
runTest9a();
}
}
endTest(9);
}


int runTest10a(int a, int b, int c, int d)
{
dummy = 0;
return a;
}

void runTest10()
{
startTest();
int i;
int j;
for (j = 0; j < 20; j++)
{
for (i = 1000000; i > 0; i--)
{
runTest10a(1, 2, 3, 4);
}
}
endTest(10);
}


float runTest11()
{
startTest();
int i;
int j;
float sum = 0;
for (j = 0; j < 30; j++)
{
for (i = 1000000; i > 0; i--)
{
sum += 1;
}
}
endTest(11);

return sum;
}


float runTest12()
{
startTest();
int i;
int j;
float sum = 1;
for (j = 0; j < 30; j++)
{
for (i = 1000000; i > 0; i--)
{
sum *= 0.999999f;
}
}
endTest(12);

return sum;
}


void runTest13()
{
startTest();
int i;
int j;
for (j = 0; j < 30; j++)
{
for (i = 1000000; i > 0; i--)
{
asm("vadd.s S000, S100, S200\n");
}
}
endTest(13);
}


void runTest14()
{
startTest();
int i;
int j;
for (j = 0; j < 30; j++)
{
for (i = 1000000; i > 0; i--)
{
asm("vadd.p C000.p, C100.p, C200.p\n");
}
}
endTest(14);
}


void runTest15()
{
startTest();
int i;
int j;
for (j = 0; j < 30; j++)
{
for (i = 1000000; i > 0; i--)
{
asm("vadd.t C000.t, C100.t, C200.t\n");
}
}
endTest(15);
}


void runTest16()
{
startTest();
int i;
int j;
for (j = 0; j < 30; j++)
{
for (i = 1000000; i > 0; i--)
{
asm("vadd.q C000, C100, C200\n");
}
}
endTest(16);
}


void runTest17()
{
startTest();
int i;
int j;
for (j = 0; j < 10; j++)
{
for (i = 1000000; i > 0; i--)
{
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
asm("vadd.q C000, C100, C200\n");
}
}
endTest(17);
}


float runTest18()
{
memset(buffer, 0, BUFFER_SIZE);
startTest();
int i;
int j;
float sum = 0;
for (j = 0; j < 10; j++)
{
float *address = (float *) buffer;
for (i = BUFFER_SIZE / 4; i > 0; i--)
{
sum += *address++;
}
}
endTest(18);

return sum;
}


void runTest19()
{
startTest();
int i;
int j;
for (j = 0; j < 10; j++)
{
float *address = (float *) buffer;
for (i = BUFFER_SIZE / 4; i > 0; i--)
{
*address++ = 1.f;
}
}
endTest(19);
}


void runTest20()
{
startTest();
int i;
int length = BUFFER_SIZE / 2;
for (i = 0; i < 10; i++)
{
memcpy(buffer, buffer + length, length);
}
endTest(20);
}


void runTest21()
{
startTest();
int i;
int length = BUFFER_SIZE;
for (i = 0; i < 10; i++)
{
memset(buffer, 0, length);
}
endTest(21);
}


void runTest22()
{
startTest();
int i;
int length = BUFFER_SIZE / 2 - 16;
char *s = buffer + BUFFER_SIZE / 2;
memset(s, 'a', length);
s[length] = '\0';

for (i = 0; i < 10; i++)
{
strcpy(buffer, s);
}
endTest(22);
}


int runTest23()
{
startTest();
int i;
int j;
int length = BUFFER_SIZE / 2;
int sum = 0;
for (i = 0; i < 3; i++)
{
for (j = length - 1; j >= 0; j--)
{
buffer[j] = buffer[j + length];
// Fake sum to avoid a native code sequence
sum += j;
}
}
endTest(23);

return sum;
}


int runTest24()
{
startTest();
int i;
int j;
int length = BUFFER_SIZE;
int sum = 0;
for (i = 0; i < 2; i++)
{
for (j = length - 1; j >= 0; j--)
{
buffer[j] = '\0';
// Fake sum to avoid a native code sequence
sum += j;
}
}
endTest(24);

return sum;
}


int runTest25()
{
startTest();
int i;
int j;
char c;
int length = BUFFER_SIZE / 2 - 16;
char *s = buffer + BUFFER_SIZE / 2;
memset(s, 'a', length);
s[length] = '\0';

int sum = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; 1; j++)
{
c = s[j];
buffer[j] = c;
if (c == 0)
{
break;
}
// Fake sum to avoid a native code sequence
sum += j;
}
}
endTest(25);

return sum;
}


int runTest26()
{
startTest();
int i;
int sum = 0;
for (i = 200000; i > 0; i--)
{
sum += sceKernelGetSystemTimeLow();
}
endTest(26);

return sum;
}


int runTest27()
{
startTest();
int i;
int sum = 0;
SceKernelSysClock time;
for (i = 200000; i > 0; i--)
{
sum += sceKernelGetSystemTime(&time);
}
endTest(27);

return sum;
}

void runTest28a()
{
}

void (*fn28)() = runTest28a;

void runTest28()
{
startTest();
int i;
for (i = 5000000; i > 0; i--)
{
(*fn28)();
}
endTest(28);
}


void runTest()
{
sumDurationMillis = 0;
sumPspDurationMillis = 0;
runTest1();
runTest2();
runTest3();
runTest4();
runTest5();
runTest6();
runTest7();
runTest8();
runTest9();
runTest10();
runTest11();
runTest12();
runTest13();
runTest14();
runTest15();
runTest16();
runTest17();
runTest18();
runTest19();
runTest20();
runTest21();
runTest22();
runTest23();
runTest24();
runTest25();
runTest26();
runTest27();
runTest28();

printResult("Overall performance index", sumDurationMillis, sumPspDurationMillis);
}


int main(int argc, char *argv[])
{
SceCtrlData pad;
int oldButtons = 0;
#define SECOND 1000000
#define REPEAT_START (1 * SECOND)
#define REPEAT_DELAY (SECOND / 5)
struct timeval repeatStart;
struct timeval repeatDelay;

repeatStart.tv_sec = 0;
repeatStart.tv_usec = 0;
repeatDelay.tv_sec = 0;
repeatDelay.tv_usec = 0;

logFd = sceIoOpen("compilerPerf.log", PSP_O_WRONLY | PSP_O_CREAT, 0777);

pspDebugScreenInit();
pspDebugScreenPrintf("Press Cross to start the Performance Test\n");
printf("Press Cross to start the Performance Test\n");
pspDebugScreenPrintf("Press Circle to change the CPU Clock\n");
printf("Press Circle to change the CPU Clock\n");

while(!done)
{
sceCtrlReadBufferPositive(&pad, 1);
int buttonDown = (oldButtons ^ pad.Buttons) & pad.Buttons;

if (pad.Buttons == oldButtons)
{
struct timeval now;
gettimeofday(&now, NULL);
if (repeatStart.tv_sec == 0)
{
repeatStart.tv_sec = now.tv_sec;
repeatStart.tv_usec = now.tv_usec;
repeatDelay.tv_sec = 0;
repeatDelay.tv_usec = 0;
}
else
{
long usec = (now.tv_sec - repeatStart.tv_sec) * SECOND;
usec += (now.tv_usec - repeatStart.tv_usec);
if (usec >= REPEAT_START)
{
if (repeatDelay.tv_sec != 0)
{
usec = (now.tv_sec - repeatDelay.tv_sec) * SECOND;
usec += (now.tv_usec - repeatDelay.tv_usec);
if (usec >= REPEAT_DELAY)
{
repeatDelay.tv_sec = 0;
}
}

if (repeatDelay.tv_sec == 0)
{
buttonDown = pad.Buttons;
repeatDelay.tv_sec = now.tv_sec;
repeatDelay.tv_usec = now.tv_usec;
}
}
}
}
else
{
repeatStart.tv_sec = 0;
}

if (buttonDown & PSP_CTRL_CROSS)
{
runTest();
}

if (buttonDown & PSP_CTRL_CIRCLE)
{
cpuFreq += 111;
if (cpuFreq > 333)
{
cpuFreq = 111;
}

int result = scePowerSetCpuClockFrequency(cpuFreq);
if (result == 0)
{
pspDebugScreenPrintf("CPU Clock set to %d MHz\n", cpuFreq);
printf("CPU Clock set to %d MHz\n", cpuFreq);
}
else
{
pspDebugScreenPrintf("Could not set CPU Clock set to %d MHz\n", cpuFreq);
printf("Could not set CPU Clock set to %d MHz\n", cpuFreq);
}
}

if (buttonDown & PSP_CTRL_TRIANGLE)
{
done = 1;
}

oldButtons = pad.Buttons;
}

sceGuTerm();

sceIoClose(logFd);

sceKernelExitGame();
return 0;
}

/* Exit callback */
int exit_callback(int arg1, int arg2, void *common)
{
done = 1;
return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp)
{
int cbid;

cbid = sceKernelCreateCallback("Exit Callback", exit_callback, (void*)0);
sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();

return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void)
{
int thid = 0;

thid = sceKernelCreateThread("CallbackThread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}

return thid;
}

ErikPshat
11.04.2013, 22:45
PRX модули в играх правильно подписать тегами от ебутов не получается(( блекскринит пс3 и все тут..Эмм, модули не надо подписывать тегами экзешников :)

Для модулей существуют свои теги - kernel or user.
Поэтому нужно найти аналогичный модуль большего размера, чем декриптованный ELF, сдампить с него заголовок и kirk.buff, подменить в PrxEncrypter и этим заголовком подписывать.
Например, думаю заголовки от psmfplayer.prx, libfont.prx, libheap.prx подойдут как раз.

P.S. У нас есть своя, полностью расписанная таблица тегов и ключей (ничего секретного), но выложить я её не могу, т.к. тема там не закончена, т.е. всё лежит в сыром виде.

riku.kh3
11.04.2013, 23:23
Эхх.. как BlackDaemon и писал там судя по всему вообще все запущено..(( ничего кроме главного ебута он запускать не хочет, никакие сторонние elf будь они подписаны или нет(( как только команда на загрузку поступает весь эмуль падает с экцепшеном. и мне кажется даже модули prx подписаные в играх не используются вообще.. он их не грузит, вместо них свои внутренние использует

BlackDaemon
11.04.2013, 23:25
riku.kh3, не-не, не совсем. :) Модули грузит, возьми Infected в качестве "подопытной крысы", причём часть модулей явно не грузит - при запуске проигрывается только первая заставка и сразу загрузочный экран с меню. А если затереть mpeg.prx - то запустится без заставок. ;) Если подменить mpeg.prx левым ELF - эмуль упадёт. :D

riku.kh3
11.04.2013, 23:26
Тут либо в сторону PSP ремастеров копать, может там менее все строго.. либо ковырять кобру смотреть что они там патчили.

BlackDaemon
11.04.2013, 23:31
riku.kh3, с PSP ремастером я чуть-чуть пробовал - сейчас тупик. Если в PARAM.SFO подменить MN (Minis) на PE (PSP Remaster), то при запуске чёрный экран, и в дебаг окне вылезает какая-то ошибка связанная с sceNp (MINIS2.EDAT пробовал делать сапопальный, к сожалению декриптованого оригинала на руках нет). Пробовал ещё другой способ - взял в качестве базового pbp от Monster Hunter Portable 3rd HD и перепаковал с ним игру как Minis - при запуске лезет немного ошибок и чёрный экран.

SILENT-Pavel
11.04.2013, 23:35
Эмуляция псп вообще всегда была таинственной штукой.
Кобра вообще имеет что-то общее с этим способом?
Если со временем научатся исправлять зашифрованные модули и все такое - совместимость может быть 100%? Ведь некоторые игры идут идеально как родные, а другие даже интро не показывают чем не конвертируй.
---
И что насчет слуха, что проскочил на иностранном форуме, будто на дексе эмулируется лучше?
---
В общем имеется кобра донгл и прошивка, если нужно что-нибудь протестировать, пишите.

Тут либо в сторону PSP ремастеров копать, может там менее все строго.. либо ковырять кобру смотреть что они там патчили.
Они там ничерт не улучшили начиная с 4ого обновления донгла. Видимо просто нашли уже готовые файлы серого эмулятора и запихнули туда без всяких пояснения и исправлений, игры работают ужасно, впрочем как и по этому способу. Но например игра Гост'н'Гоблинс сохраняется на бесплатном способе и виснет с коброй. А фф 2 юбилейная работает на кобре и сохраняет ,а на этом способе вообще не запускается и черный экран. Еще на кобре можно масштабировать игру на R2, на этом способе всегда рамки.
Логика ты где?
В общем, меня интересует любое хомбрю, которое способно запуститься на оф. прошивке из disc0:/psp_game/sysdir/eboot.bin с помощью fake_np. Заранее спасибо.thank you
Тут много подписанных хоумбрю любого типа с хорошим описанием. (http://endlessparadigm.com/forum/showthread.php?tid=25707)
судя по всему в эмуляторе присутствует "особый" вид защиты - все ELF/PRX должны быть подписаны, таким образом все старые игры, в которых модули и/или внешние исполняемые файлы в декриптованом виде неработают.
Но на кобре работают очень старые простые игры года так 2005.
---
p.s. если у кого-нибудь будет время, поможете с запуском GTA LCS через эмулятор на пс3? Мне пс2 версия всегда не нравилась. У нее черный экран на любых способов запуска включая кобру, вот список prx из образа:
AUDIOCODEC.RPX
MPEGBASE.PRX
SC_SASCORE.PRX
USBPSPCM.PRX
VIDEOCODEC.PRX
LIBATRAC3PLUS.PRX
MPEG.PRX
Имею работающий собственный RIP размером ~400 мегабайт, что убирает все проблемы с размерами при конвертации, нужно просто подписать PRX по инструкции на второй странице треда и появится шанс запуска? Или с ибутом такой старой игры что-то надо делать?
Еще интересный вопрос, раз уж заговорили про PRX, возможно ли запустить читдевайс при эмуляции на пс3 (если сама игра пойдет) вставив его внутрь образа, он же тоже PRX как бы... не? в тех. подробностях не силен
А вообще вот игра Infected [ULES-00337] - содержит не малый набор PRX и все-равно работает, с чего же?
И вот например игра Spinout [ULES-00693] - такая же простая как летающий на пс3 Cube [ULUS-10223], но всегда черный экран о_О

BlackDaemon
12.04.2013, 12:49
Гмм...HereticPSP полуживой - положил heretic.wad в sysdir рядом с eboot.bin - при запуске ругается, что не может найти этот wad:
W_InitFiles: no files foundНа кастом прошивке при запуске ISO ведёт себя аналогично. Исходные коды этого чуда у кого-нить есть? На Jpcsp и PPSSPP из образа запускается без проблем.:crazy:

BlackDaemon добавил 12.04.2013 в 12:19
SILENT-Pavel, GTA: LCS на данный момент трупик. VCS работает без вывода графики, т.е. по звукам слышно, что доходит до ingame. Насчёт обязательной подписи - это было моё первоначальное предположение, запуск Infected его опровергает. :D

BlackDaemon добавил 12.04.2013 в 12:29
Ахах, надурил таки. :D Хексом заменил в ELF heretic.wad -> boot.bin и заменил boot.bin на heretic.wad.:lol:

BlackDaemon добавил 12.04.2013 в 12:49
На PS3 завести не удалось, несмотря на то, что на PSP под OFW работает. :(

ErikPshat
12.04.2013, 15:11
Тут много подписанных хоумбрю любого типа с хорошим описанием. (http://endlessparadigm.com/forum/showthread.php?tid=25707)
Только подписаны они не тем заголовком и не тем ключом. Все ранее подписанные хоумбрю подписывались тегом от демоверсий игр из PSN формата исходного DATA.PSP.

Как мы уже выяснили, на PS3 пока запускаются только игры, подписанные способом FakeNP и у которых подписан экзешник EBOOT.BIN тегом от Retail UMD-дисков или Minis - это теги группы EBOOT.BIN 0xD916xxF0 (теги не для DATA.PSP!)