PrxEncrypter Mod v1.0.0.1 - Full Range Demo Game Sign
Вложений: 3
PrxEncrypter Mod Подписываем приложения оригинальными заголовками Как вы знаете, оригинальная версия Энкриптера содержит в себе только 3 заголовка для подписи приложений, диапазон размеров которых бывает явно недостаточен для более тонкого шифрования исполняемых файлов. Поэтому я собрал все имеющиеся в наличии заголовки демо-версий игр и портировал их в классический PrxEncrypter. Что это за мод? Это версия шифровальщика, собранного на основании предыдущей подготовительной темы, включающего 103 заголовка демонстрационных версий игр, способного подписывать приложения для запуска с карты памяти на официальных прошивках.
Как им пользоваться?
Таблица включённых в PrxEncrypter заголовков по алфавиту: Таблица включённых в PrxEncrypter заголовков по размеру DATA.PSP: Таблица включённых в PrxEncrypter заголовков по размеру ELF: Таблица включённых в PrxEncrypter заголовков по размеру GZIP: |
Вложений: 1
Ликбез №1. Вступление. Ликбез №2 Ликбез №3 |
В ранних версиях энкриптера не было сжатия, как я помню. Потом его допилили.
В коде даже есть проверка на использование сжатия: Код А что в итоге нужно я так и не понял. Проверку на размер по 0xB0 вместо 0x28? Так там в "забег" по заголовкам отправляется размер файла на харде. Код |
Цитата:
Должно быть не так. Файл сначала должен сжаться, а только потом подбираться заголовок под маленький сжатый файл, а потом всё остальное. |
Цитата:
1. Использование kernel-эксплоита под определённую прошивку. 2. rebootex по сути это код с kernel правами, который так и так выполняется каждый раз при перезагрузке или смене режима (VSH, GAME...). Так вот он внедряется. Он патчатит необходимые модули: LoadExec в первую очередь. И только потом можно уже стандартно загрузить модуль с правами ядра. Что мы сейчас написали? Угу, прошивку. Поэтому, предположение было в корне неправильное :) Что насчет енкриптера. Я не совсем понял о чем ты говоришь. То есть тебя смущает что заголовок подбирается под несжатый файл, а только потом жмется? P.S. Если ты хочешь чтобы подборка хедера работала корректно, то их нужно располагать в строгом порядке возрастания размера подписи, т.к. этого требует алгоритм. Он буквально берет первый подходящий, а не самый оптимальный из списка. Нужно или переписать алгоритм или располагать в порядке возрастания. Код:
Header_List *get_header_list(int size) |
Цитата:
Сами хедеры идут сверху вниз по убыванию размера в заголовке, а листинг, список хедеров, идёт по возрастанию размеров. Таблица в шапке уже составлена по возрастанию, а я располагал хедеры именно в том порядке, как было подготовлено в таблице. Тут всё правильно, подпись берётся именно по возрастанию. Я проверял, если файл не умещается в заголовок, то берётся следующий. А вот со сжатием в энкриптере совсем не правильно. Что оно есть, что его нет - один фиг. Просто сжатие есть и сжимает, но потом подписывает заголовком большим, чем декриптованный файл. Ну если бы ты повнимательнее почитал бы, что я написал и вник бы, то наверное бы всё понял. |
ErikPshat, ну вот смотри, ты хочешь чтобы все было так:
|
frostegater, да, именно так, но немного не так. Ещё нужно, чтобы математика была точной и опираться на указанные в заголовке размеры:
Тут нужно как-то изловчиться по другому...
Я не понимаю, как у них внутри архива оказывается конец на 1/3 архива, а остальное забито остатками декриптованного незаархивированного ELF. Они наверное архивируют не в чистое место памяти, а прямо туда же в начало, где находится ELF, потом отрезают по размеру 0xB0 и получается хвост не просто забитый нулями, а забитый остатками ELF :D Причём зачем-то в последней строчке нулевого архива вставляют какой-то код. Оно ведь и так конец читать не будет и правильно разархивируется. |
Цитата:
Цитата:
|
Цитата:
Просто я более подробнее описываю суть проблемы и в каком месте, что программа работает не так, как должно быть. И подробно описал принцип ихней упаковки на примере последующей распаковки. Можешь сам проверить на оригинальных исходниках. Удаляешь оттуда все лишние хедеры с кирками и оставляешь только 1 кирк с хедером от того же файла, который хочешь подписать. Взять тот же Astonishia Story 2 или vshmain.prx, или любой другой. Ессно файл не влезет обратно в свой родной заголовок и будет ошибка "ELF is to big" P.S. Порядок упорядочивания кода я уже написал в предыдущем посту. |
Цитата:
|
Yoti, ладно, поставим вопрос по другому.
Если я беру декриптованный файл Astonishia Story 2 и его-же кирк с заголовком, то получаю сообщение:
Код:
Header_List *target_header = get_header_list( elfSize ); Где ошибка? Вот здесь мне кажется нужно выкинуть h_size -= 0x150; или сделать равным нулю. Код:
Header_List *get_header_list(int size) P.S. Нужно было в таблицах ещё добавить размеры ELF. |
1) У меня нифига не компилится энкриптер, и разбираться чего не хватает поздновато уже.
2) Ну, можно попробовать так подсунуть: Код:
int elfSize = load_elf(argv[1]); |
Yoti
1) Я вроде ничего такого не ставил, но вроде Cygwin.exe всё решает. 2) Попробую... 3) А ты его в SDK положил )) Ну я так сделал, чтобы в папке не затирался декриптованный исходник DATA.PSP. Поначалу исходник сразу копировал в папку SOURCE, да потом что-то решил так сделать. А кстати, всё-таки ведь файл подбирается не по порядку списка, а наверное выбирается наименьший подходящий размер. Блин, сижу щас таблицу заполняю по размерам декриптованных ELF, чтобы понять почему так прыгает далеко. Просто у Astonishia Story размер декриптованный очень большой, поэтому наверное не может найти более подходящий хедер поменьше. Но полюбэ должен же подойти свой родной. Кстати, размер архива берётся из kirk_header 0x70 - там дублируется тот же размер, что и в psp_header 0xB0. Ну ты и сам знаешь )) |
1. А может список хедеров нужно было выстраивать по ELF размеру, а не по размеру всего файла? Или всё-таки он не находит подходящий из всего списка...
2. Может он тупо не может сжать файл до 0xB0? Потому что я смотрел сжатый файл Astonishia, так он больше получается, чем записано в 0xB0. Но в коде не заметил, чтобы он по этому параметру производил листинг. Странно, через 7-Zip он у меня сжимается значительно сильнее в GZIP. Вот с такими параметрами:
В коде я смотрю параметры такие стоят: Код:
ret = deflateInit2(&strm, 9, Z_DEFLATED, 15+16, 8, Z_DEFAULT_STRATEGY); |
Дайте libz.a. Глупые люди думают, что его легче собрать чем скачать бинар.
|
Цитата:
Библиотека в SDK вроде использует урезаный механизм:
Метод сжатия для GZ только = Z_DEFLATED windowBits состоит из двух логарифмов и может быть в пределах 8-15. Если добавить +16, то не будет включаться название файла, подсчитываться CRC и прочие плюшки. memLevel может быть в пределах 1-9, здесь стоит = 8 Интересный пример GZIP |
ErikPshat, ты дал libz из pspsdk. А ты мне из цигвина дай.
|
Цитата:
Кстати, разработчики игры Astonishia ведь как-то ужали так сильно файл в GZ какой-то библиотекой, значит должно ужаться с совместимостью. Короче, тут дело в сжатии. Он просто не может сжать файл до исходного размера, как он был сжат ранее, поэтому сжимает и потом ищет не среди psp_header по размеру файла 0x28, а по размеру архива из KIRK-заголовков, продублированного в 0x70 в кирке (0xB0 в psp_header): Код:
int get_kirk_size(u8 *key_hdr) Поэтому, даже если размер ELF >= размера в psp_header, то он берёт нужный хедер, но, если после сжатия размер архива не подходит к kirk_header, то он по списку ищет следующий подходящий по размеру среди kirk_header-ов. Другой вопрос - действительно ли он ищет по порядку в списке или всё-таки из всего списка выбирает наиболее подходящий? |
Вложений: 1
Насколько знаю, архиватор 7-Zip всегда сжимает в правильный GZIP с любыми настройками сжатия, поэтому провёл ещё эксперимент...
Но есть одно но, т.к. мы подсовываем Энкриптеру готовый архив, предварительно прогнанный через 7-Zip, то к ELF-файлу нули не добавляются до размера 0x28, потому что он заархивирован ))) У Astonishia ничего добавлять не нужно, т.к. ELF уже имеет нужный размер к своему же заголовку. Поэтому, если мы берём декриптованный файл меньше указанного в заголовке, то сначала добиваем его нулями, а потом кидаем для сжатия и подписи. Так же чётко подписался архив "Cube Sample", предварительно конечно добитый нулями до указанного в заголовке размера в 0x28. Можете сами потестить, всё в архиве заготовлено. Как можно подключить библиотеки 7-Zip к исходникам? И где их ваще взять? Кстати, Zlib в SDK лежит версии 1.2.5, а на оффсайте уже zlib 1.2.8 (April 28, 2013) |
Текущее время: 09:48. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.