так я и не понял чего не хватает чтобы подписать нужный файлик?
Ключей. KaKaRoTo говорил:
The signature on the NPDRM self file uses the exact same ECDSA curve and the same key as the one used in PS3 .pkg files, so no one has (or could have) the private key for it. What this means is that, even though we finally figured out the missing piece and we now know how the NPDRM self is built, we simply cannot duplicate it.
так я и не понял чего не хватает чтобы подписать нужный файлик?
Ну для начала нужно восстановить по порядку правильную структуру файла.
Как я выше писал, на примере EDAT можно восстановить первую SHA-1 хеш-сумму, как у оригинала. У тебя получилось?
А вот с EBOOT.BIN и с PKG у меня пока не получилось получить из DEBUG-файла верную SHA-1 контрольную сумму.
Вот её нужно научиться правильно генерировать, чтобы пойти дальше к сходству с оригиналом. А, как я понял, всякие утилиты генерируют фейковый digest. И это уже может проверяться в экзешниках и это может быть первой ошибкой в утилите.
Маленькие официальные PKG для тестов:
Вот список самых маленьких официальных PKG 5,91 Кб:
NPEB00092 Battlefield 1943 - Full Game Unlock (NPUB30077)
Для EDAT я в этом сообщении загрузил специально комплект исправленных утилит, в частности оригинальная make_npdata, без всяких извращений. Она, при создании debug генерирует всегда один и тот же файл.
А вот утилиты для EBOOT и PKG, каким-то образом патченные и там генерируется каждый раз рандомный хеш в debug. Сейчас пытаюсь скачать с меги 4.75 SDK, чтобы вытащить официальные утилиты make_fself_npdrm и make_package_npdrm, чтобы убедиться в чистоте утилиты. Но пока не удаётся скачать через браузер, пишет типа памяти не хватает.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Короче, залил на диск официальную коллекцию утилит из СДК475 (200 MB).
P.S. Естессна они все делают DEBUG-файлы для DEX-консоли, что нам и нужно для экспериментов.
Проверил пока только EDAT с помощью make_edata_npdrm.exe - получается правильный DEBUG.
--help по командам:
make_edata_npdrm: version 4.0.0.W
usage:
make_edata_npdrm [-options] <input file> <output file>
options:
-h, --help : print this usage and exit
-v, --version : print program version and exit
-p, --progress : print progress [%]
[create option]
-b <size(KB)> : block size (default 16, max 32)
-z, --compress : data compress
--format1 : old format (compatible with SDK 2.1x or older)
--format2 : old format (compatible with SDK 3.0x or older)
--format3 : old format (compatible with SDK 3.7x or older)
[extract/check option]
-x, --extract : extract raw image from developing EDATA
-i, --info : print file information
Команда элементарная, по умолчанию никаких опций не надо, там автоматом подставляется block size (default 16) и --format4 (4.0.0.W), если не указывается иное:
make_edata_npdrm licensee.dat licensee.edat
Затем замеряем контрольную сумму SHA-1 и сверяем с шифрованным оригиналом в позиции 0x40.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Провел эксперимент с EBOOT.BIN от игры "1942: Joint Strike" занулил последние 8 байт которые являются частью контрольной суммы SHA-1 и игра отлично завелась,занулил ещё 8 байт влево пс3 выдала ошибку 80010017,удалил 8 байт таже ошибка,так что в эти 8 байт можно вписать любые значения но без этих 8 байт игра не заведётся.
PS3 OFW 4.82
Последний раз редактировалось Strong-Men; 03.09.2017 в 20:17.
E2E41, эмм, в смысле? Если подписывать из ELF, то можно конец ELF забивать нулями настолько, чтобы после подписывания получился файл с таким же размером, как в оригинале. И вставить туда тот самый ECDSA. Но я сомневаюсь, что собственное подписывание сделает рабочим файл.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Берётся заголовок от игры-демки. Там просто демки не проверяются и свободно запускаются на официальной прошивке. Заголовок 0x150 байт менять нельзя ни байтика, в нём записаны кирки и чексуммы самого сжатого и подписанного ELF и потом заголовок подсчитан и подписан, поэтому его трогать нельзя. Механизм подписи тела известен.
А в заголовке прописано 3 значения - это размер декриптованного ELF, размер сжатого ELF и всего файла целиком.
Мы берём кастомное Хоумбрю-приложение, добиваем нулями декриптованный ELF до размера, указанного в заголовке.
Сжимем его пофигу чем, например с помощью 7-Zip или libzip, вернее в формат Gzip, который понимает PSP.
Затем добиваем нулями этот архив до размера, указанного в заголовке. Там хоть на гигабайт добавь в конец нули, он всё равно распакуется.
Потом этот правильный архив шифруем кирком от заголовка (это механизм PSP, а на PS3 шифруется ключами под версию EBOOT)
Ну и вставляем шифрованное тело к оригинальному официальному заголовку этой игры и ву-а-ля.
По всем проверкам на размеры игры кастомное Хоумбрю проходит и запускается на оффпрошивке.
Strong-Men, оу, это я тебе точно сказать щас ничего не могу, т.к. я ещё сам не рассматривал этот момент. Это надо разбирать весь код и соображать, что там и как всё устроено. Могу точно сказать, что ECDSA состоит из двух частей = R и S, которые состоят из хэшей по 0x14 байт, итого 0x28 байт.
R - это хеш от vsh_curves, этот файл ты можешь увидеть в папке ps3tools\tools\scetool\data или ps3tools\tools\scetool\.ps3
S - это тоже хеш, но я вообще без понятия откуда он берётся. Это, по-моему, хэш всех ключей, которые встраиваются в EBOOT.BIN, могу ошибаться.
И эти 2 хеша записываются один за другим и получается ECDSA 0x28 байт. Или в десятичном виде ровно 40 байт (2 раза по 20).
Короче, я тебя сразу что-то не понял, но теперь понял, что последние 8 байт хеша SHA1 не проверяются и их можно даже занулить.
А вот попробуй занулить хоть один байт из предпоследних 40 байт и игра не заведётся.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram