PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   Как пожать, упаковать и зашифровать исполняемый ELF-файл для PSP (https://www.pspx.ru/forum/showthread.php?t=110249)

Dedok179 24.05.2020 18:01

Как пожать, упаковать и зашифровать исполняемый ELF-файл для PSP
 
Привет. Я Dedok179, разработчик новых версий трейнеров для Sony консолей. Возникла такая проблема что для данной платформы из упаковщиков исполняемых файлов нашел только psp-packer, но файлы запакованные через него не желают запускаться ни на эмуляторе ни на консоли. Сжатие мне важно так как оригинальный исполняемый входит в состав чит-лоадера и заменяет оригинальный в образе, чтобы хватило места для замены. Может кто предложить чего по этому поводу?

Примеры работ для PS1/PS2




ErikPshat 24.05.2020 18:23

Dedok179, если игры не ISO, то исполняемый ELF пакуется как DATA.PSP в EBOOT.PBP как цифровоая версия игра с карты памяти. Для этого лучше подойдёт вот это: PrxEncrypter Mod v1.0.0.1
Он максимально сжимает файлы 7Zip-ом и такие игры работают на OFW.

Если EBOOT.BIN из ISO-образа, тогда SEBOOT, про него имеется ссылка в той же теме в описании. Но по-моему он не сжимает, не помню точно.

Dedok179 24.05.2020 18:34

Цитата:

Сообщение от ErikPshat (Сообщение 1214566)
EBOOT.BIN из ISO-образа

Мне нужно что-то что сможет запаковать так его, чтобы он сам распаковался в памяти (как UPX например). Так как сам метод загрузки подразумевает наличие бутабельного elf файла. PSP-Packer казалось бы идеальное решение для меня, если бы сжатые им файлы запустились.

ErikPshat 24.05.2020 18:59

Цитата:

Сообщение от ErikPshat (Сообщение 1214566)
Он максимально сжимает файлы 7Zip-ом и такие игры работают на OFW.


Dedok179 24.05.2020 19:49

Результат работы psp-packer


Мне нужно получить именно пожатый бутабельный elf, ибо схема загрузки такая - Загружается elf трейнера->выбираются нужные коды->в память записывается пожатый elf->цепляется чит-загрузчик->запускается пожатый elf с последующей его самораспаковкой.

ErikPshat 24.05.2020 21:06

Цитата:

Сообщение от Dedok179 (Сообщение 1214572)
Мне нужно получить именно пожатый бутабельный elf

Ну а я вам что предлагаю? По-ходу вы вообще не читаете что я вам пишу. Как будто бывает какой-то небутабельный ELF. Мы же говорим о загрузчике игры, а не о каких-то вспомогательных модулях.

ELF всегда работает таким образом - сначала он компилируется разработчиками как непожатый ELF, затем он сжимается в gz-архив или в zlib, либо в lzma, ну и ещё есть методы сжатия, потом к пожатому файлу прикрепляется заголовок ~PSP, записывается размер пожатого файдла, размер расжатого декриптованного файла и контрольные суммы блоков, называемые общим словом KIRK, ну и тело пожатого файла шифруется этим кирком.

Затем, когда вы запускаете этот ~PSP, он первым делом декриптуется, затем расжимается из архива и запускается чистый ELF. После этого он загружается в память и начинают работать читы и программа.
На PSP этот ELF в цифровых играх и программах называется DATA.PSP, который пакуется в EBOOT.PBP. В вашем случае для дебаг-тестов не обязательно его паковать, а просто взять пожатый и подписанный из папки ENCRYPT, в другой папке будет лежать упакованный EBOOT.PBP, но вам он не нужен. Вам просто нужно дать файлу правильное название, там программа сама даёт подсказку, какого вида надо файл подсунуть и какие можно дополнительные файлы подкинуть для упаковки.

Dedok179 24.05.2020 22:38

Цитата:

Сообщение от ErikPshat (Сообщение 1214575)
Мы же говорим о загрузчике игры

Возможно я немного не так прочитал сначала. Попробовал утилиту, да жмет (Хуже чем psp-packer но жмет). Но, эмуль наглухо выдает ошибку "не удалось загрузить игру: файл поврежден". На консоли еще не проверял. Или я где-то косячу, или хрен его знает. Обычно в случае как с PS2 я к загрузчику всегда прикомпилирую уже пожатый исполняемый файл игры, а не пережимаю сам загрузчик. Думал что тут будет уместен этот же метод, но видимо немного ошибся.

ErikPshat 25.05.2020 06:52

Цитата:

Сообщение от Dedok179 (Сообщение 1214577)
Попробовал утилиту, да жмет (Хуже чем psp-packer но жмет).

Dedok179, я так понимаю, вы используете psp-packer от 4.01 SDK от Dark_Alex :D Это же просто кастомная утилита для упаковки в фейковый ~PSP, где тело от 0x150 жмётся в GZ-архив и вставляется фейковый заголовок. Я так понимаю, вы сами не понимаете механизма сжатия, судя по вашим объяснениям :) вот почитайте про GZIP-сжатие: Декриптовка - Русификация - Запаковка. Там вас должна интересовать последняя секция III) Запаковка с новой криптовкой., да и начало тоже.

На самом деле никакой psp-packer вообще не нужен, я им и не пользовался никогда. Всё делается элементарно ручками. И да, psp-packer не может жать в GZIP лучше, чем моя утилита, т.к. она жмёт с помощью 7-Zip, который явно жмёт лучше. Ну бывают некоторые исключения.

В принципе, разница между psp-packer и PrxEncrypter Mod небольшая. Первый жмёт ELF в кастомный ~PSP, который работает только на кастомных прошивках, второй жмёт в официальный ~PSP, который работает на официальных прошивках. Ну а жмут они файл в одинаковые архивы, просто первый жмёт с помощью модуля GZIP, а второй с помощью 7-Zip.

По-идее и то и другое должны работать на PPSSPP в обычном режиме загрузки игры, как и любой другой официальной игры, но не в дебаг-режиме, ибо в этом режиме работают только голые ELF, если не ошибаюсь.

Dedok179 25.05.2020 08:27

Цитата:

Сообщение от ErikPshat (Сообщение 1214582)
Dedok179, я так понимаю, вы используете psp-packer от 4.01 SDK от Dark_Alex :D Это же просто кастомная утилита для упаковки в фейковый ~PSP, где тело от 0x150 жмётся в GZ-архив и вставляется фейковый заголовок. Я так понимаю, вы сами не понимаете механизма сжатия, судя по вашим объяснениям :) вот почитайте про GZIP-сжатие: Декриптовка - Русификация - Запаковка. Там вас должна интересовать последняя секция III) Запаковка с новой криптовкой., да и начало тоже.

На самом деле никакой psp-packer вообще не нужен, я им и не пользовался никогда. Всё делается элементарно ручками. И да, psp-packer не может жать в GZIP лучше, чем моя утилита, т.к. она жмёт с помощью 7-Zip, который явно жмёт лучше. Ну бывают некоторые исключения.

В принципе, разница между psp-packer и PrxEncrypter Mod небольшая. Первый жмёт ELF в кастомный ~PSP, который работает только на кастомных прошивках, второй жмёт в официальный ~PSP, который работает на официальных прошивках. Ну а жмут они файл в одинаковые архивы, просто первый жмёт с помощью модуля GZIP, а второй с помощью 7-Zip.

По-идее и то и другое должны работать на PPSSPP в обычном режиме загрузки игры, как и любой другой официальной игры, но не в дебаг-режиме, ибо в этом режиме работают только голые ELF, если не ошибаюсь.

Я бы и рад был для начала чтобы хоть что-то после сжатия работало. Мне не нужно понимать механизм, мне нужно чтобы оно сжалось и все, чтобы с этим можно было работать дальше. Не знаю поняли мы друг друга или нет. Конечный готовый трейнер заменяет в образе оригинальный исполняемый файл, но так как он содержит в себе и оригинальный файл и загрузчик, нужно сжать или итоговый файл или файл игры прикомпилируемый к загрузчику, чтобы все это добро нормально зашло в образ без надобности лопатить его.


ErikPshat 25.05.2020 09:08

Dedok179, я не пойму, что вы там мутите? Вы суёте образ игры для PSP через CDMage для PS1 образов? А потом образ PS1 пытаетесь запустить в PPSSPP для PSP?

А кто вас такому трюку научил? Может лучше собирать образ PSP через родную для неё программу UMDGen v4.00
?

Dedok179 25.05.2020 09:45

Цитата:

Сообщение от ErikPshat (Сообщение 1214591)
я не пойму, что вы там мутите?

Посмотрите видео в начале поста если не смотрели, пояснее будет зачем вообще нужно сжать файл.
Цитата:

Сообщение от ErikPshat (Сообщение 1214591)
Вы суёте образ игры для PSP через CDMage для PS1 образов?

Функция замены в нем не только с PS1 образами работает..PS..заменил (ох..пересобрал) через UMDGEN и проблема не делать никуда ни на сантиметр.
Цитата:

Сообщение от ErikPshat (Сообщение 1214591)
А потом образ PS1 пытаетесь запустить в PPSSPP для PSP?

А я его и не сохранял как PS1 образ. Только заменил блок байт и все, это там именно так работает (будет тоже самое если просто через hex изменить этот блок), а не как все привыкли через пересохранение полной структуры.


Цитата:

Сообщение от ErikPshat (Сообщение 1214591)
Может лучше собирать образ PSP через родную для неё программу UMDGen v4.00?

Собирать естественно через него
Цитата:

Сообщение от ErikPshat (Сообщение 1214591)
А кто вас такому трюку научил?

Оно со временем само приходит

ErikPshat 25.05.2020 10:19

Цитата:

Сообщение от Dedok179 (Сообщение 1214601)
А я его и не сохранял как PS1 образ. Только заменил блок байт и все, это там именно так работает (будет тоже самое если просто через hex изменить этот блок), а не как все привыкли через пересохранение полной структуры.

Спасибо, не знал, что он просто как хекс-редактор работает :) Но всё равно, для сборки ISO для PSP существуют специальные программы.

Dedok179, а вообще что я говорил про EBOOT.BIN? В этом энкрипторе собирают декриптованный EBOOT.BIN только для цифровых игр и программ для карты памяти, которые работают из EBOOT.PBP, а не для дисковых ISO-образов, там метод упаковки и шифрования другой, только через SEBOOT.

Dedok179 25.05.2020 10:40

Цитата:

Сообщение от ErikPshat (Сообщение 1214591)
там метод упаковки и шифрования другой, только через SEBOOT.

Ну тогда на этом все, ибо SEBOOT не предоставляет сжатия от слова совсем, что значит место никак не освободить. Спасибо вам за консультацию по этому вопросу.

ErikPshat 25.05.2020 11:34

Цитата:

Сообщение от Dedok179 (Сообщение 1214614)
Ну тогда на этом все, ибо SEBOOT не предоставляет сжатия от слова совсем, что значит место никак не освободить.

Ну существуют и другие методы, там разница лишь в том, что заголовок ~PSP немного с другими тегами шифрования. Можно паковать тем же PrxEncrypter-ом, но тогда из исходников собирать пакер с Кирком другим, от EBOOT.BIN, но про это долго рассказывать.

Dedok179 25.05.2020 17:07

Цитата:

Сообщение от ErikPshat (Сообщение 1214621)
Ну существуют и другие методы, там разница лишь в том, что заголовок ~PSP немного с другими тегами шифрования. Можно паковать тем же PrxEncrypter-ом, но тогда из исходников собирать пакер с Кирком другим, от EBOOT.BIN, но про это долго рассказывать.

Можно было бы попробовать собрать, правда он после сборки начинает требовать неведомые библы, после подсовывания которых в ошибку 7b уходит. Исходник брал отсюда

https://i.imgur.com/XJucVTU.png

ErikPshat 25.05.2020 18:18

Dedok179, это немного не то, вернее совсем не то. У вас наверное MSYS не установлен. В паблике PrxEncrypter не кастомный, а обычный от PRO-Team, он у них в исходниках лежит. Но он не может сжать до исходного размера, поэтому мы тут немного помучались и модифицировали как надо, получается файл точно такого же размера как исходный оригинальный. Залил исходники сюда во вложение: https://www.pspx.ru/forum/showthread.php?t=103580

Я же говорю, потом ещё долго объяснять как шифровать и как кирк доставать.
Проще бы давно скинули мне свой кастомный EBOOT.BIN с читами и нужен ещё оригинальный не декриптованный. Я бы вам просто давно бы переподписал за 5 минут. А то вы тут на несколько дней застрянете :D

Dedok179 25.05.2020 18:33

Цитата:

Сообщение от ErikPshat (Сообщение 1214656)
Я же говорю, потом ещё долго объяснять как шифровать и как кирк доставать.
Проще бы давно скинули мне свой кастомный EBOOT.BIN с читами и нужен ещё оригинальный не декриптованный. Я бы вам просто давно бы переподписал за 5 минут. А то вы тут на несколько дней застрянете :D

Тут такой момент что инструмент формирующий сжатие должен входить в состав билдера который будет эти трейнеры собирать. И собираться они будут не 100 и менее раз (не учитывая тестовые процедуры). И каждый раз стучать за подписью через каждый промежуток времени думаю будет не очень. Времени на разбор у меня предостаточно, так как этот проект должен быть закончен.

Кстати именно ваш исходник на удивление без проблем собрался, в отличие от предыдущего.

ErikPshat 25.05.2020 18:51

Цитата:

Сообщение от Dedok179 (Сообщение 1214658)
Кстати именно ваш исходник на удивление без проблем собрался, в отличие от предыдущего.

Ну вот и отлично! Ну у меня время есть, тогда придётся вам объяснять долго и нудно...

Вам теперь нужно скачать для PSP вот это: PRXdecrypter_27a_fix_mod.zip
Не знаю, есть ли у вас PSP вообще :) А то думаю в PPSSPP не заработает.
Вам надо будет им декриптовать оригинальный EBOOT.BIN, который вы декриптовали и модифицировали.
Кидаете его в корень карты памяти в папку enc и декриптуете программой.
Потом там будет лежать декриптованный файл и рядом kirk.16 или kirk.144 - он нам и понадобится.

И ещё вам нужно будет вот это: Hex Workshop v6.8.0.5419.

Потом дам следующие указания...

Dedok179 25.05.2020 19:10

Цитата:

Сообщение от ErikPshat (Сообщение 1214660)
Ну вот и отлично! Ну у меня время есть, тогда придётся вам объяснять долго и нудно...

Вам теперь нужно скачать для PSP вот это: PRXdecrypter_27a_fix_mod.zip
Не знаю, есть ли у вас PSP вообще :) А то думаю в PPSSPP не заработает.
Вам надо будет им декриптовать оригинальный EBOOT.BIN, который вы декриптовали и модифицировали.
Кидаете его в корень карты памяти в папку enc и декриптуете программой.
Потом там будет лежать декриптованный файл и рядом kirk16.bin или kirk144.bin - он нам и понадобится.

И ещё вам нужно будет вот это: Hex Workshop v6.8.0.5419.

Потом дам следующие указания...

Да, kirk появился, исполняемый файл принял стандартный вид с elf заголовком.

https://i.imgur.com/XoY7Kn1.png

ErikPshat 25.05.2020 20:09

Ну хорошо, что у вас всё быстро делается без лишних вопросов :D
В Hex Workshop закройте все лишние окна справа, слева, внизу, они пока не нужны.
  1. Короче, откройте в хекс-редакторе kirk.16, он занимает ровно 272 байта (0x110)
  2. Выберите в меню File -> Export -> С Source (*.c, *.cpp).
  3. У вас сохранится файл kirk.c
  4. Теперь откройте его в Notepad++ и так же откройте в исходниках файл main.c - вы должны увидеть сходство кирка с исходным кодом в этом месте:
    Код:

    unsigned char kirkHeader[272] = {
        0x8B, 0x5D, 0xC0, 0x96, 0x38, 0x77, 0x54, 0x6D, 0x2E, 0x40, 0x07, 0x42, 0x8D, 0x5A, 0xAE, 0xEF,
        0x11, 0x34, 0x0F, 0x5D, 0xF8, 0x57, 0x7A, 0x7A, 0x06, 0xDA, 0xE2, 0xB1, 0x4F, 0x5A, 0x3D, 0x84,
        0x99, 0xC4, 0xF4, 0x95, 0x61, 0xDF, 0x88, 0xBA, 0xB3, 0x60, 0x09, 0x90, 0x5A, 0x94, 0xD8, 0x58,
        0xC5, 0x3A, 0x33, 0x3E, 0xD7, 0x30, 0x20, 0xED, 0xCC, 0xA8, 0x7B, 0x90, 0x46, 0x9B, 0x0C, 0xFC,
        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,
        0x48, 0x06, 0x2F, 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, 0x4D, 0x6F, 0x64, 0x65, 0x6C, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x48, 0x06, 0x2F, 0x00, 0xA0, 0x07, 0x2F, 0x00,
        0x24, 0x01, 0x00, 0x00, 0x44, 0xDD, 0x1E, 0x00, 0x5C, 0x46, 0x2D, 0x00, 0x40, 0x00, 0x40, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xCA, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x4C, 0xCA, 0x20, 0x00, 0x84, 0x2A, 0x2E, 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, 0x06, 0x06, 0x09, 0x00, 0x00, 0x00,
    };

  5. Вот эта строка указывает на количество байт: unsigned char kirkHeader[272] - по этому количеству вы должны ориентироваться, чтобы не спутать блоки и там и там.
  6. Из kirk.c выделяете движением мышки слева весь цифровой код сверху вниз, не затрагивая скобки { и };, копируете, затем выделяете в исходнике main.c такой же код и заменяете.
  7. Теперь открываете оригинальный шифрованный не декриптованный EBOOT.BIN (~PSP). Выделяете с самомго начала заголовок, размером 336 байт (0x150).
  8. И делаете всё тоже самое File -> Export -> С Source (*.c, *.cpp).
  9. У вас сохранится файл EBOOT.c
  10. Теперь откройте его в Notepad++ и так же откройте в исходниках файл main.c - вы должны увидеть сходство в EBOOT.c размером 336 байт с исходным кодом в этом месте: unsigned char pspHeader[336]
  11. Точно так же копируете, вставляете, сохраняете main.c и компилируете новый PrxEncrypter.
  12. Ну вот и всё, у вас есть энкриптер именно для этого вашего файла.
  13. Берёте ваш кастомный файл, который надо упаковать как оригинал, кидаете рядом с программой или прямо на программу, либо в консоли натравливаете команду
    Код:

    PrxEncrypter.exe EBOOT.BIN
  14. На выходе вы должны получить файл DATA.ENC - это и есть ваш пожатый и подписанный EBOOT.BIN, переименовываете его потом и пакуете в ISO.
  15. У него будет тот же заголовок как у оригинала, точно такой же размер, как и записано в хедере и он будет работать на любой OFW, как и оригинал.


P.S. Я ухожу сегодня, нужно освобождать комп. Завтра с утра зайду проверить как дела :)

Dedok179 25.05.2020 20:52

Цитата:

Сообщение от ErikPshat (Сообщение 1214663)
Ну хорошо, что у вас всё быстро делается без лишних вопросов :D
В Hex Workshop закройте все лишние окна справа слева внизу, они пока не нужны.
  1. Короче, откройте в хекс-редакторе kirk.16, он занимает ровно 272 байта (0x110)
  2. Выберите в меню File -> Export -> С Source (*.c, *.cpp).
  3. У вас сохранится файл kirk.c
  4. Теперь откройте его в Notepad++ и так же откройте в исходниках файл main.c - вы должны увидеть сходство кирка с исходным кодом в этом месте:
    Код:

    unsigned char kirkHeader[272] = {
        0x8B, 0x5D, 0xC0, 0x96, 0x38, 0x77, 0x54, 0x6D, 0x2E, 0x40, 0x07, 0x42, 0x8D, 0x5A, 0xAE, 0xEF,
        0x11, 0x34, 0x0F, 0x5D, 0xF8, 0x57, 0x7A, 0x7A, 0x06, 0xDA, 0xE2, 0xB1, 0x4F, 0x5A, 0x3D, 0x84,
        0x99, 0xC4, 0xF4, 0x95, 0x61, 0xDF, 0x88, 0xBA, 0xB3, 0x60, 0x09, 0x90, 0x5A, 0x94, 0xD8, 0x58,
        0xC5, 0x3A, 0x33, 0x3E, 0xD7, 0x30, 0x20, 0xED, 0xCC, 0xA8, 0x7B, 0x90, 0x46, 0x9B, 0x0C, 0xFC,
        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,
        0x48, 0x06, 0x2F, 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, 0x4D, 0x6F, 0x64, 0x65, 0x6C, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x48, 0x06, 0x2F, 0x00, 0xA0, 0x07, 0x2F, 0x00,
        0x24, 0x01, 0x00, 0x00, 0x44, 0xDD, 0x1E, 0x00, 0x5C, 0x46, 0x2D, 0x00, 0x40, 0x00, 0x40, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xCA, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x4C, 0xCA, 0x20, 0x00, 0x84, 0x2A, 0x2E, 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, 0x06, 0x06, 0x09, 0x00, 0x00, 0x00,
    };

  5. Вот эта строка указывает на количество байт: unsigned char kirkHeader[272] = - по этому количеству вы должны ориентироваться, чтобы не спутать блоки и там и там.
  6. Из kirk.c выделяете движением мышки слева весь цифровой код сверху вниз, не затрагивая скобки { и };, копируете, затем выделяете в исходнике main.c такой же код и заменяете.
  7. Теперь открываете оригинальный шифрованный не декриптованный EBOOT.BIN (~PSP). Выделяете с самомго начала заголовок, размером 336 байт (0x150).
  8. И делаете всё тоже самое File -> Export -> С Source (*.c, *.cpp).
  9. У вас сохранится файл EBOOT.c
  10. Теперь откройте его в Notepad++ и так же откройте в исходниках файл main.c - вы должны увидеть сходство в EBOOT.c размером 336 байт с исходным кодом в этом месте: unsigned char rawData[336] =
  11. Точно так же копируете, вставляете, сохраняете main.c и компилируете новый PrxEncrypter.
  12. Ну вот и всё, у вас есть энкриптер именно для этого вашего файла.
  13. Берёте ваш кастомный файл, который надо упаковать как оригинал, кидаете рядом с программой или прямо на программу, либо в консоли натравливаете команду
    Код:

    PrxEncrypter.exe EBOOT.BIN
  14. На выходе вы должны получить файл DATA.ENC - это и есть ваш пожатый и подписанный EBOOT.BIN, переименовываете его потом и пакуете в ISO.
  15. У него будет тот же заголовок как у оригинала, точно такой же размер, как и записано в хедере и он будет работать на любой OFW, как и оригинал.

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

Думаю, с PS3 меня будут ожидать примерно такие же проблемы если не больше:D

https://i.imgur.com/sTYyNN5.jpg

Dedok179 25.05.2020 21:38

К сожалению файл размером больше первоначального он отказывается принимать

https://i.imgur.com/yUyZNoT.png

Yoti 25.05.2020 22:23

Цитата:

Сообщение от Dedok179 (Сообщение 1214665)
Думаю, с PS3 меня будут ожидать примерно такие же проблемы если не больше

Слово "PlayStation" правильно написать ты уже не осилил.

ErikPshat 26.05.2020 04:51

Yoti, да ладно, не придирайся, парень дедок вполне смышлённый, просто имеются немного пробелов :)

Цитата:

Сообщение от Dedok179 (Сообщение 1214667)
К сожалению файл размером больше первоначального он отказывается принимать

Ну так правильно. В кирке и в заголовке проставлены размеры шифрованного файла и так же декриптованного ELF, тело шифруется исходя из размера оригинала и размера пожатого, записанного в хедере, который изменять никак нельзя, иначе хэши блоков не совпадут. Размеры записаны в позициях 0x28 и 0x2C по 4 байта в Little Endian.
Так что размер ELF не может превышать оригинал, но может быть меньше, просто концовка забивается нулями до нужного размера.
Либо можно упаковать и подписать увеличенный кастомный файл - кирком и хедером другого официального файла большего размера.

Цитата:

Сообщение от Dedok179 (Сообщение 1214665)
Такой вопрос, могу ли я немного модифицировать ваш исходник для некоторой автоматизации процесса?

Да без проблем, модифицируйте как вам угодно :)

Yoti 26.05.2020 08:12

ErikPshat,
я не в первый раз вижу этот ник и аватар, если что.

Dedok179 26.05.2020 09:20

Цитата:

Сообщение от ErikPshat (Сообщение 1214677)
да ладно, не придирайся, парень дедок вполне смышлённый, просто имеются немного пробелов

Уже привычно что некоторые пользователи из известного места где только не появятся, начинают разливать свои токсины. Просто не обращай внимания.


Цитата:

Сообщение от ErikPshat (Сообщение 1214677)
Так что размер ELF не может превышать оригинал, но может быть меньше

Ну, это немного не состыковывается с конечной целью. Видимо все таки без пересборки образа тут не обойдется. Всегда старался обойти этот процесс ибо на PS1/2 он не только геморный, но и есть шанс нарушить некоторые данные при неверно составленной карте образа.

Dedok179 26.05.2020 12:10

Цитата:

Сообщение от ErikPshat (Сообщение 1214677)
Ну так правильно. В кирке и в заголовке проставлены размеры шифрованного файла и так же декриптованного ELF, тело шифруется исходя из размера оригинала и размера пожатого, записанного в хедере, который изменять никак нельзя, иначе хэши блоков не совпадут. Размеры записаны в позициях 0x28 и 0x2C по 4 байта в Little Endian.
Так что размер ELF не может превышать оригинал, но может быть меньше, просто концовка забивается нулями до нужного размера.
Либо можно упаковать и подписать увеличенный кастомный файл - кирком и хедером другого официального файла большего размера.

Т.е эту "хитрожопость" не обойти так полагаю? В предыдущих работах была вполне уместная такая схема: оригинальный файл+загрузчик и другие данные(больше оригинального)->упаковка->получаем файл меньше оригинального что удобно для простой замены в образе

ErikPshat 26.05.2020 12:46

Цитата:

Сообщение от Dedok179 (Сообщение 1214685)
В предыдущих работах была вполне уместная такая схема: оригинальный файл+загрузчик

А что вы такого делаете с ELF, что он превышает размер оригинала? Вы же понимаете, что нельзя сдвигать скомпилированный код, это чревато нарушением линковки и смещения позиций программного кода.
И про какой загрузчик вы тут говорите? Оригинальный файл ELF - он же и есть загрузчик, т.е. исполняемая программа, а если у неё есть ресурсы, то они все отдельно находятся. Так что тут не надо никакие загрузчики к ELF приклеивать.

Dedok179 26.05.2020 13:28

Цитата:

Сообщение от ErikPshat (Сообщение 1214690)
А что вы такого делаете с ELF, что он превышает размер оригинала? Вы же понимаете, что нельзя сдвигать скомпилированный код, это чревато нарушением линковки и смещения позиций программного кода.
И про какой загрузчик вы тут говорите? Оригинальный файл ELF - он же и есть загрузчик, т.е. исполняемая программа, а если у неё есть ресурсы, то они все отдельно находятся. Так что тут не надо никакие загрузчики к ELF приклеивать.

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

https://i.imgur.com/QryhvRW.png

Yoti 26.05.2020 13:52

ErikPshat,
GTA Cheat Device помнишь? Вот он делает такую же хрень, только вместо плагина на карте памяти, как у всех белых людей, он его хочет вшить в образ. Да ещё так, чтобы LBA не поехали, на которые 99% игр пофиг. Максимализм перфекционизма, видимо. Вот только я вижу лишь одно решение - кастомный пакер-анпакер в самописный загрузчик добавлять. Либо самопал на место оригинала, а все зависимости в конец закинуть. Или вместо boot.bin, если влезет.

BlackDaemon 26.05.2020 14:12

Формально есть свободная LBA в SYSDIR под обновление прошивки, которую можно в теории использовать под другие нужды:crazy:

Yoti 26.05.2020 14:37

BlackDaemon,
ну, кстати, тоже верно, там даже с запасом место будет. Просто смысла в этих извращениях немного - на диск образ не запишешь всё равно. Также можно оригинальную исполняшку декриптнуть и как boot.bin положить, а свой код на место eboot.bin засунуть. Тут смотря какого размера исполняшка сама, иногда там мелкий лодырь для модуля лежит.

ErikPshat 26.05.2020 15:22

Вложений: 1
Вот же извращенцы мля :D

В общем немного упростил сборку, залил во вложение на всякий, пускай хранится здесь.
Сделал Example, просто запустить 1 MAKE.BAT и закидывать папку "SIGNED GAME" на консоль в ms0:/PSP/GAME/ кто не в курсе.
Потом наводите курсор на игру и можете слушать часами модную современную музыку без остановки.
Название композиции не скажу :) секрет. И что за игра не скажу, сами смотрите...

P.S. из main.c убрал #include <zlib.h>, ибо прога давно не использует архиватор zlib, а вместо него 7-Zip. Из Makefile убрал LDFLAGS=-lz, пускай без него собирается.

Dedok179 26.05.2020 16:29

Цитата:

Сообщение от Yoti (Сообщение 1214702)
ну, кстати, тоже верно, там даже с запасом место будет. Просто смысла в этих извращениях немного - на диск образ не запишешь всё равно. Также можно оригинальную исполняшку декриптнуть и как boot.bin положить, а свой код на место eboot.bin засунуть. Тут смотря какого размера исполняшка сама, иногда там мелкий лодырь для модуля лежит.

Как-то даже не подумывал об этом. Может это будет один из выходов, спасибо.

riku.kh3 26.05.2020 17:38

В конец самого образа-то религия не позволяет данные добавлять? Как там что-то может сместиться и поехать, если поправить только указатель на файл в файловой таблице и дописать его содержимое в конец ISO. :/

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

riku.kh3 26.05.2020 17:59

ErikPshat, PrxEncrypter по-моему можно и не компилировать каждый раз, там в самом экзешнике достаточно хедер подменить.

ErikPshat 26.05.2020 19:36

Цитата:

Сообщение от riku.kh3 (Сообщение 1214708)
ErikPshat, PrxEncrypter по-моему можно и не компилировать каждый раз, там в самом экзешнике достаточно хедер подменить.

Хех, ну блин хакеры тут собрались, начинающим программистам проходу не дадут :D

Ага, тоже интересная идея :) там они идут друг за другом kirkheader и следом через строчку pspheader.

Кстати, зарелизил всё-таки исходники на :github: GitHub


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

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