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) |
Вложений: 1
Цитата:
Скомпилировал через MSYS по инструкции, надеюсь правильно сделал через [win32/Makefile.gcc]. Изменения 1.2.5 -> 1.2.8 |
ErikPshat, WTF?
Код:
main.o(.text+0x161):main.c: undefined reference to `deflateInit2_' |
frostegater,
ошибка в бинарнике - проблема с либами. |
Цитата:
Я обновил zlib на 1.2.8 в MinGW и в PSPSDK. Компилируется всё так же нормально. Но пробовал переименовать zlib.a и zlib.h - всё равно компилируется нормально. Что за чудеса? |
|
мусор при запаковке победил
интересная вещь, последние 4 байта декриптованого стаффа не нули.. что же они значат? /upd Очень интересно. Хедеры подбираются по 0x70 оффсету в Kirk хедере. В нем хранится размер закриптованого DATA.PSP. Этот оффсет с выравниванием и поправками (хз зачем, но получается верно) сравнивается с размером считанного elf и подбирается подходящий хедер. Я вот не пойму почему размер ELF меряется с размером криптованого файла?! |
Цитата:
Я уже по нескольку раз здесь переписал диссертацию, а вы по ходу её не читали :) Цитата:
И потом, после подписывания ты наверное проверяешь и декриптуешь. Но декриптер тебе выдаёт уже разархивированный файл, поэтому сам архив ты не видишь, как он выглядет внутри и сколько места занимает. Я уже писал вот здесь (Ликбез №2), что лучше в исходниках PrxDecrypter (не путать с Энкриптером) пофиксить расжатие 1F8B и он не будет разархивировать, а только декриптовать. Тогда ты сможешь подсмотреть, как сжимает Энкриптер в архив, сколько места занимает, на сколько добиватся нулями и что дописывает в конце. Конец архива GZ найдёшь по размеру декриптованного файла. - Поэтому я и говорю, что Astonishia Энкриптер не в состоянии ужать до исходника. Цитата:
|
ErikPshat, ну дак ты пишешь жидко, среди твоего рассуждения истину искать что иголку в стоге сена.
Для начала нужно устроить мега-компрессию. 7-zip юзает стандартную zlib библиотеку. Я нашел объявление функции сжатия: Код:
ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, method windowBits memLevel strategy у нас стоит Код:
deflateInit2(&strm, P.S. Тут много интересного: http://www.zlib.net/manual.html |
frostegater, да, я уже 100500 раз перечитыл исходники, изучил метод компрессии zlib :)
К сожалению тут всё выставлено на максимум и алгоритм deflateInit2 самый расширенный, поэтому не знаю даже куда копать. Можно ещё memLevel=9 выставить, он у меня так и проставлено, но это на большее сжатие вроде не влияет. Единственно тут не хватает сжатия по словарю, как в 7-Zip: Цитата:
Может как-то подключить либу 7z? |
ErikPshat, я так понимаю в 7-zip используется не zlib, а gunziplib: http://www.gzip.org/
скомпиль под юникс |
Цитата:
Я тут уже весь измотался с zlib-1.2.8... Вот такой лог Нарыл в инете инфу Цитата:
Log И где взять libz.so.1.2.8 ? |
Вложений: 1
Цитата:
|
Цитата:
ErikPshat, максимальное сжатие у меня получилось в 53.6%. Не намного отличается от 7z'шного. |
frostegater, отлично! пробовал подписать Astonishia своим же заголовком?
Кстати, не пробовал подписать любую игру или хомку через Fake_NP из шапки? Приколишься :) Ну раз тишина, значит никто не пробовал или не понял юмора. |
ErikPshat, у меня нет Astonishia. Залей пожалуйста. Времени совсем в обрез лазить по инету.
upd/ у меня на тот fakenp каспер ругается. |
Цитата:
Я же специально для теста в 7-Zip её туда положил. Там всё готово, нужно только нажать на батничек. Цитата:
frostegater Ну чо там у тебя тишина, есть какие-нибудь движения в правую сторону? |
Подключил 7z, через одно место, правда.
После подписи Astonishia виснет на Now Loading, не вырубается. |
Цитата:
А сам EBOOT.PBP - это всего лишь лоадер. Оригинал я брал здесь: http://www.pspdemocenter.com/page.php?id=926 |
Все короче.
Как теперь прога работает (в теории):
Сделал 2 батничка на ELF и EBOOT подписывание. Только не могу все лишние exe уложить в Utils. unpack-pbp не хочет работать с относительными путями. В общем.. доделаешь. Будет баг, стучи. http://rghost.ru/45825803 |
Жалко внутреннюю библиотеку не удалось внедрить, а всё-таки внешний 7z. Ну да ладно, хоть избавил ты нас от ручного добивания нулями ELF-а.
Цитата:
В общем такой эксперимент. Оригинальная упаковка:
Кастомная упаковка:
Astonishia запускается и работает замечательно! Беру свой любимый Cube Sample = 52988 байта Кастомная упаковка:
|
Текущее время: 06:18. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.