А вот попробуй занулить хоть один байт из предпоследних 40 байт и игра не заведётся.
это точно не заведется уже проверил,но вот что интерестно ISO.BIN.DAT PSOne Classics подписан реальной подписью ECDSA а прога sign.np генерирует эту подпись(кстати генерирует каждый раз новую подпись на один и тот же файл но игра заводится) и игры работают,вполне возможно что EBOOT.BIN подписан той же подписью вот только нужно знать какую часть файла она хеширует или может это хеш debug версии или EBOOT.ELF ...
PS3 OFW 4.82
Последний раз редактировалось Strong-Men; 09.09.2017 в 21:21.
Слежу за темой взлома. Если все получится, то мы сможем вытаскивать приватный ключ из консольки, тогда и подпись заработает. Я тут не писал, но загадку подписи ECDSA я разгадал в том году. Однако поняв, что приватный ключ на всех современных прошивках, каждой консольке разный, не стал писать. Ибо нет в этом смысла. А тут вроде обещают полный доступ к ядру в ближайшее время.
Ну так что ж ты молчишь? Если бы ты нам дал бы разгадку ECDSA, так мы в том году бы подправили scetool и спокойно подписывали бы EBOOT.BIN.
Пока что поправлять ничего не нужно. На официалке EBOOT.BIN не работает потому, что у всех приватный ключ разный.
А до прошивки 3.55 он был у всех одинаковый, потому то в те времена PS3 легко и взломали.
rhish777, меня интересует - что ты там разгадал в прошлом году и не стал писать
А приватный ключ не может быть разный у каждой консоли, потому что тогда нужно для каждой консоли выпускать индивидуальный диск с EBOOT.BIN, подписанным индивидуально под каждый приватный ключ у каждой консоли. Даже пусть не диск, а игра из PSN, но и тогда для каждого скачивающего EBOOT.BIN должен вытаскиваться из PKG, переподписываться Соней под консоль скачивающего и одновременно паковаться обратно в PKG. Однако, насколько нам известно, все PKG с игрой, скачиваемые из любого места в мире, имеют один и тот же PKG с одним и тем же EBOOT.BIN по MD5 или SHA-1 контрольной суммой.
А ты подумал над тем, что все игры имеют статичную подпись ECDSA? То есть, она для всех консолей у каждой игры одинаковая и почему-то на всех консолях запускается, несмотря на то, как ты придумал, что приватный ключ (пароль к архиву) у всех разный
Я понимаю, что к каждой подписи подмешивается соль - это рандомный набор цифр. Но дело в том, что какой бы ты набор цифр не подмешивал, то конечно ECDSA будет всегда изменяться, но алгоритм подсчёта всегда остаётся прежним. Если взять любой конкретный EBOOT.BIN, то мы свободно можем генерировать ту самую соль постоянно точно так же, как её сгенерировала Сони в данном EBOOT, как мы и проводили опыт в данной теме ранее. поэтому мы можем в точности восстановить метод создания файла, нам только требуется узнать метод генерации ECDSA. А ты оказывается всё это время знал и нам не раскрывал
Единственное, что я знаю, так эти данные записаны в самом EBOOT.BIN. Это VSH Curve должно записываться в метаданные в шифрованную область, потом оно раскладывается кубиками и прямоугольниками, переставляются местами по определённому алгоритму в зависимости от флага, как шарик-малик-келишь-мелишь-трёшь-мнёшь-тратр-ватр-экскаватр, потом вычисляется его SHA-1 и длина этого блока, ксорятся (совокупляются) с приватным ключом соответствующей прошивки и раскладывается на R и S.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat, Вы так и не поняли что scetool предназначена для локальной подписи. Файлы же от самой сони подписаны совсем по другому. Все приставки с CFW по сей день сидят на одном одинаковом ключе self_type=NPDRM priv=009EF86907782A318D4CC3617EBACE2480E73A46F6 от 3.55 прошивки. Ответ же всегда был перед глазами.
Как работает подпись для всех сразу?
А для абсолютной подписи для OFW нам нужен приватный ключ самой СОНИ. Публичный ключ есть в каждой приставке.
Где же мы его возьмем? Давай в сапорт напишем. Вышлите нам приватный ключ для подписи пожалуйста.
ВЫВОД Имеется два ключа для подписи. Один хранится в пристаке и с ним будет запускаться EBOOT.BIN только на нашей плойке. Другой хранится у сони с ним будет работать на всех плоечках. Такова работа ECDSA
vk.com/playstation_f_a_n
Последний раз редактировалось rhish777; 10.11.2017 в 11:15.
- Added Internal keys support.
- Added Signed Elf ver.2 decryption support.
- Decrypting header will now use key-bruteforce method.
- Options changed.
- Removed Pub/Priv configs, enabled all features by default.
Имейте в виду, что изменились названия команд (смотрите в консоли).
Например, --sce-type на --category, --self-auth-id -self-vendor-id --self-type на --program-auth-id --program-vendor-id --program-type и т.д.
Добавлены ключи в файл "internal_keys"
Во вложении экзешник с ключами и исходниками.
Тоже очень интересен секрет генерирования рандомного числа k для ECDSA подписей. В эмуляторе kirk на PS3 используют ch74 для генерирования 32 битного рандомного числа, затем отрезают от него 1 байт, и собирают в буфер из 0х28 таких байт, а потом сравнивают полученное большое число в буфере по модулю N. Этот N берут из параметров эллиптической кривой. Если разгадать секрет генерации этого k для ключей лоадеров, то можно повынимать все остальные недостающие priv ключи. Если же при 2 одинаковых k, для подсчёта priv (числа dA) сокращались переменные k, то при известных 2 числах k можно использовать метод подстановки.
Последний раз редактировалось Fireball; 07.02.2018 в 03:12.
Fireball, верно говоришь, вот на практитке реальный механизм ECDSA на примере декриптовки IPL-загрузчика у PSP: https://github.com/ErikPshat/ipltool
Всё понятно. Тут делают srand(time(0)); а потом получают рандом и сравнивают его по модулю 0xFF rand() % 0xFF
такими остатками от деления заполняют буфер, пока число в буфере не будет больше, чем число N. Полученное в буфере число используется в качестве числа k.
А дальше всё как обычно: G умножаем на k и берём абсциссу полученной точки в качестве R и тд.
Интересно
Последний раз редактировалось Fireball; 08.02.2018 в 12:50.
Ребята, там же ничего особо не поменялось в самом последнем обновлении, просто был исправлен лоадер эллиптических кривых vsh. Версию менять не зачем.
Этот лоадер пока что используется для подписи NPDRM self файлов, а так как нет подлинного приватного ключа для неё - толку мало. Есть публичный ключ только, его можно использовать только для проверки таких подписей, в чем тоже смысл не велик.
Последний раз редактировалось Fireball; 20.02.2018 в 04:04.
В общем, чтобы нам разгадать секрет генерирования числа K, нам надо понять, что же за байты они берут по модулю N.
Формула: k = x mod N.
где k и N - числа длиной в 20 байт,
x - некоторое число длиной в 40 байт.
Число N нам известно, это порядок используемой эллиптической кривой. Оно есть в параметрах кривых.
UPD:
Что мы имеем:
1) число k было постоянным для сигнатур с криптофейлами в пределах одного ключсета (разные ключи и одинаковые N дают разные k).
2) если изменять число x в пределах числа N, то число k будет меняться на разницу (x_второе - x_первое).
3) для всех сигнатур в .pkg файлах были одинаковые RS, при одинаковых hash от подписываемых данных.
То есть число k оставалось неизменным при неизменном хеше от подписываемых данных.
UPD2:
Надо вот что попробовать:
если для .pkg / .edat файлов число k "подсаливают", а соль вполне себе может быть равной sha1 хешу от данных, для некоторых случаев, будет справедливо уравнение:
(k_первое - k_второе) = (h_первое - h_второе)
где k_первое, k_второе - секретные числа первой сигнатуры и второй сигнатуры ,
h_первое, h_второе - хеши sha1 от подписываемых данных для первой и второй сигнатуры соответственно.
а т.к хеши - числа известные, то можно попробовать выразить k_второе через k_первое методом подстановки.
k1 - k2 = h1 - h2
k2 = k1 + (h2 - h1)
и попробовать использовать это для подсчёта прив ключа dA для edat и pkg.
Если облом: можно еще попробовать использовать не весь хеш, а только последние его 8 байт.
Последний раз редактировалось Fireball; 08.05.2018 в 08:58.
Такой код используется в вебмен. Если кастомное приложение все равно не запустилось, то в коде нет ошибки. Значит на HEN его пока что запустить нельзя.
np-content-id можно в коде ставить любой. На работоспособности приложения не отображается.