scetool(C)2011-2013bynaehrwertNPlocallicensehandling(C)2012byflatz==>Setup<==-/data/keys:Keyfile.-/data/ldr_curves:Loadercurves(7744bytes).-/data/vsh_curves:VSHcurves(360bytes).-/data/idps:IDPSasbinaryfile-/data/act.dat:act.dat-/rifs/*:*.riffiles-/raps/*:*.rapfiles==>KeyfileFormat<==[keyname]type={SELF,RVK,PKG,SPP,OTHER}revision={00,...,18,8000}version={...,0001000000000000,...}self_type={LV0,LV1,LV2,APP,ISO,LDR,UNK_7,NPDRM}key=...erk=...riv=...pub=...priv=...ctype=...==>KeysetExample<==[metldr]type=SELFrevision=00self_type=LDRerk=0000000000000000000000000000000000000000000000000000000000000000riv=00000000000000000000000000000000pub=00000000000000000000000000000000000000000000000000000000000000000000000000000000priv=000000000000000000000000000000000000000000ctype=00==>NPDRMKey(set)Names<==-[NP_tid]:TitleIDOMAC1key.-[NP_ci]:ControlinfoOMAC1key.-[NP_klic_free]:Freeklicensee.-[NP_klic_key]:klicenseekey.-[NP_idps_const]:IDPSconstant.-[NP_rif_key]:rifkey.-[NP_sig]:FootersignatureECDSAkeyset.==>OverrideKeyset<==It should be a single hex-string consisting of:32bytes(Key)16bytes(IV)40bytes(Pub)21bytes(Priv)1byte(CType).==>History<==Version0.2.9.2-ExtendedInfoforELFHeaderandothertypes.-Addedkeysets19,1A,1B1C1Dfor3.74-4.81FW.Version0.2.9.1-Minorupdate0.0.1--self-fw-versionforAPPbysomeonehttp://www.maxconsole.com/threads/uniofficial-minor-update-to-scetool.31333/Version0.2.9-Plaintextsectionswillnowtakelessspaceinmetadataheaderkeysarray.-AddedoptiontospecifiyatemplateSELFtotakeconfigurationvaluesfrom.-Addedoptiontooverridethekeysetusedforen-/decryption.-FixedNPapplicationtypes.-[FirmwareVersion]willnowbewrittentocontrolinfoonly.-[ApplicationVersion]willnowbewrittentoapplicationinfoonly.Version0.2.8(intermediaterelease):-Fixedminorbugswherescetoolwouldcrash.-AddedSPPparsing.-DecryptingRVK/SPPwillnowwriteheader+datatofile.Version 0.2.7:-AddedlocalNPlicensehandling.-Addedoptiontooverrideklicensee.-Addedoptiontodisablesectionskipping(inSELFgeneration).Version 0.2.5:-Addedoptiontouseprovidedmetadatainfofordecryption.-"PS3"pathenvironmentvariablewillnowbesearchedforkeys/ldr_curves/vsh_curvestoo.Version 0.2.4:-Addedoptiontodisplayrawvalues.-MovedfactoryAuth-IDsto<publicbuild>(astheyareonps3devwikinow).Version 0.2.2:-Addedoptionstooverridecontrol/capabilityflags(32byteseach).-Fixedwhereafalsekeysetwouldcrashscetoolwhendecryptingafile.-Somesourcelevelchangesandoptimizations.Version 0.2.1:-zlibisrequiredtousescetool.-'sdk_type'waschangedto'revision'indata/keys.==>Greetingsto<==-ps3dev.net-youknowwhoyouare!==>Trivia<==http://bit.ly/QUji89
Расшифровка параметров:
Знак = (равно) указывать не обязательно, а в сокращённых командах запрещено, только через пробел или вообще без пробела.
--sce-type=SELF // указываем тип SCE, могут быть SELF/RVK/PKG/SPP
--compress-data=TRUE// указываем сжимать или нет, выставляем одно из двух - TRUE/FALSE(default)
--skip-sections=TRUE// указываем пропускать секции или нет, одно из двух - TRUE(default)/FALSE
--key-revision=0A // указываем Ревизию ключа в зависимости от прошивки - 00, 01, ..., 1D.
--self-auth-id=1010000001000003// указываем ID Аутентификации, для ретэйл-игр и обновлений - всегда такой.
--self-vendor-id=01000002// указываем ID Производителя, для CoreOs/dev_flash files/Games - всегда такой.
--self-type=APP // указываем тип приложения, для дисковых игр - APP, для PSN игр - NPDRM.
--self-app-version=0001000000000000// указываем версию приложения, тут просто v1.0
--self-fw-version=0003005500000000// указываем версию прошивки, под ревизию ключа 0A идёт прошивка 3.55
--self-cap-flags=00000000000000000000000000000000000000000000003B0000000100040000 // 32 байта capability флаги
--encrypt EBOOT.ELF EBOOT.BIN // указываем, что производим шифрование ELF в BIN
Введение
Это формат, используемый исполняемыми файлами на PS3. В нем есть определенный заголовок, который называется SCE-заголовком, где он хранит все параметры для этого процесса
SCE Header - Заголовок SCE
Он состоит из информации о структуре и смещениях self. Первая часть находится в открытом виде до Metadata Info.
Metadata Info - Информация о метаданных
Информация о метаданных сама по себе находится под AES 256 CBC. Эта часть содержит KEY + IV для дальнейшей расшифровки заголовка с использованием AES 128 CTR.
Metadata - Метаданные
Заголовок метаданных, Заголовки секций метаданных, Хеш секции, Возможности и Подпись находятся под AES 128 CTR слоем и дешифруются с помощью ключа выше.
Metadata Header - Заголовок метаданных
Заголовок метаданных содержит информацию, необходимую для аутентификации заголовка и структуры метаданных. Подпись представляет собой ECDSA хеша SHA1 собственного файла, начинающегося с 0x0 и заканчивающегося на 0x0 + signatureInputLength.
Data Sections - Секции данных
Секции данных могут быть зашифрованы с использованием AES 128 CTR и/или сжаты. HMAC-SHA1 используется для аутентификации, они не должны быть изменены.
Примечание: в этот формат могут быть подписаны не только файлы ELF/PRX, другие известные файлы с заголовком SCE:
revoke (e.g. RL_FOR_PACKAGE.img/RL_FOR_PROGRAM.img and pkg.srvk/prog.srvk)
spp (e.g. default.spp)
package (e.g. .pkg/.spkg_hdr.X)
edat
Криптография
Это небольшое резюме о том, как работает криптография в self. В основном здесь находятся шаги, выполняемые загрузчиками:
Все загрузчики имеют статический ключ и iv, называемый соответственно erk и riv, это ключи для первого этапа дешифрования, которые используются для дешифрования первых первых 0x40 байтов метаданных self, используя AES256CBC.
Затем результат используется как ключ и iv для дешифровки остальной части метаданных с использованием AESCTR, наконец, дешифрованные метаданные содержат ключи и iv для каждого раздела данных, которые все еще дешифруются через AES128CTR. Эта модель безопасности основана на том факте, что первые 0x40 байт метаданных self, однажды дешифрованные статическим ключом AES256CBC в загрузчике, никогда не должны быть одинаковыми от одного бинарника к другому. То же самое относится к любому другому значению, используемому в качестве ключа AES128CTR или iv.
Загрузчики также участвуют в распаковке бинарных файлов с использованием zlib.
SELF аутентичность основана на других независимых шагах, HMAC-SHA1 от секции данных и ECDSA для актуальной сигнатуры в заголовке.
SCE Header - Заголовок SCE
Для начала, перед разбором кода структуры заголовка, давайте разберёмся, что означают эти странные значения и столбцы.
Слева - мы видим смещение в файле, а через пробел - его название, столбиком по порядку, смещение за смещением.
Справа - мы видим комментарии к этому смещению, заключённые между символами /* ... */ (такой вид комментария может использоваться в многострочном режиме, тогда как такой вид // только в однострочном)
Что означают uint8_t, uint16_t, uint32_t, uint64_t?
typedefstruct {uint64_t header_type; /* 3 - SELF */uint64_t appinfo_offset; /* app info offset */uint64_t elf_offset; /* ELF #1 offset */uint64_t phdr_offset; /* program header offset */uint64_t shdr_offset; /* section header offset */uint64_t section_info_offset; /* section info offset */uint64_t sceversion_offset; /* version offset */uint64_t controlinfo_offset; /* control info offset */uint64_t controlinfo_length; /* control length */uint64_t padding; /* padding */
} __attribute__((packed)) SELF_HDR;
Комментарий: Реальные данные ELF расположены после заголовка SCE (см. размер заголовка). Он зашифрован, если флаг не равен 0x8000. unfself работает, вырезав заголовок SCE из (фейкового) SELF.
typedef struct {
uint16 unknown_1;
uint16 unknown_2; //0x0001uint32 unknown_3;
uint32 unknown_4; //Number of sections?uint32 unknown_5;
////uint64 offset; //Data offset.uint64 size; //Data size.//// <- these are supposed to be sections
} SCE_VERSION_DATA_30;
Control Information
typedefstruct {uint32_t type; // 1==control flags; 2==file digest; 3==npdrmuint32_t size;
uint64_t next; // 1 if another Control Info structure follows 0 if not
// type 2 0x40 bytesstruct {uint8_t digest1[20]; //hash digest, same for every fileuint8_t digest2[20]; //sha1 hash digest calculated of .elf file...uint64_t padding;
} file_digest40;
Заголовок метаданных расположен после информации метаданных в файле SELF.
Он расшифровывается с использованием AES128CTR с помощью записей ключа и ivec из информации метаданных.
Длина входной сигнатуры - это количество байтов, которые используются для генерации SHA-1, который используется для генерации сигнатуры ECDSA. Длина должна быть от начала до самой подписи. Используется расшифрованная версия входных данных.
Это присутствует только в том случае, если присутствует метаданные.
Ключи метаданных (хеш раздела) расположены после заголовков раздела метаданных в файле SELF.
Количество ключей указывается в элементе keyCount в заголовке метаданных.
Они дешифруются с использованием AES128CTR с помощью записей ключа и ivec из информации метаданных.
Если sha1Index указывает на ключ, тогда ключ [sha1Index] и ключ [sha1Index + 1] образуют 160-битный хеш. Key [sha1Index + 2] на клавишу [key [sha1Index + 6] образуют 512-битный ключ для HMAC-SHA1. HMAC-SHA1 рассчитывается по дешифрованным данным и перед декомпрессией.
Capabilities Info
typedefstruct {uint32_t Type; // 1,2uint32_t capabilities_size; // capabilities Type 1 0x30, Type 2 0x100uint32_t next; // 1 if there is another cap flag structure after this, 0 if notuint32_t unknown2;
uint64_t unknown3;
uint64_t unknown4;
uint64_t flags;
uint32_t unknown6;
uint32_t unknown7;
} __attribute__((packed)) CAPABILITIES_INFO;
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
А вот попробуй занулить хоть один байт из предпоследних 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.
ErikPshat, Вы так и не поняли что scetool предназначена для локальной подписи. Файлы же от самой сони подписаны совсем по другому.
Что я не понял? Если ты не в курсе, то у нас на форуме лежат во вложении scetool, meke_npdata и многие прочие тулзы, во многом исправленные и скомпилированные лично вашим слугой капитаном КО . Ты же наверное заметил, что теперь всё отображается ровными рядами со специальными отступами для красивого копирования кода в сообщения форума в тег [CODE], а не как было раньше всё вперемешку в одну строчку со сдвигами хер знает куда. И думаешь я там просто так ковырялся только лишь для косметических изменений? А make_npdata теперь же не требует отдельной утилиты make_c00_edat, потому что она одна создаёт универсальный EDAT, подходящий под разные задачи.
Да, я прекрасно знаю, подо что scetool делалась. Она заточена под дисковые Non-DRM EBOOT.BIN. Там правда есть возможность создания NPDRM, но всё оставили под дисковые SELF, потому что в NPDRM всегда 0x33 ключа и нету дополнительной расширенной секции, по поводу которой мы тут много говорили насчёт True/False (лень вспоминать её точное название). True как раз означает наличие этой доп-секции, которая всегда присутствует в NPDRM из PSN.
Но это всё фигня. Это всё можно было воссоздать, пораскидывать мозгами, только какой в этом толк, когда мы не знаем механизма генерации ECDSA. Ведь достоверно известно, что при изменении хоть одного байтика в официальном файле, в частности в футере (в конце) секции ECDSA, так файл перестаёт работать.
Сообщение от rhish777
Все приставки с CFW по сей день сидят на одном одинаковом ключе self_type=NPDRM priv=009EF86907782A318D4CC3617EBACE2480E73A46F6 от 3.55 прошивки. Ответ же всегда был перед глазами.
Там есть полностью комплектованные ключи под 3.30, 3.42, 3.50, 3.55.
А вот с 4.21 я верю, что просто заполнили фейковыми ключами под CFW, т.к. они все одинаковые.
Но кто мешает подписывать игры под 3.30-3.55? Или ты думаешь, что они все в чёрном списке? Возможно.
Но я что-то сомневаюсь, что те копии игр, распространённых миллионными тиражами на дисках и через PSN, которые требовали прошивки 3.30-3.55 и это в период бурного расцвета PS3 с активными продажами - и вдруг все эти игры оказались забанены по причине подписи их скомпрометированными ключами? Они что, теперь не запускаются на последующих прошивках, которые были подписаны утёкшими приватными ключами?
Что-то мне твоя разгадка подписи ECDSA не устраивает такими доводами.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
ErikPshat,
Ну блин не ужели не понятна эта формула?
rhish777 добавил 10.11.2017 в 13:05
Сообщение от ErikPshat
Но кто мешает подписывать игры под 3.30-3.55? Или ты думаешь, что они все в чёрном списке? Возможно.
Но я что-то сомневаюсь, что те копии игр, распространённых миллионными тиражами на дисках и через PSN, которые требовали прошивки 3.30-3.55 и это в период бурного расцвета PS3 с активными продажами - и вдруг все эти игры оказались забанены по причине подписи их скомпрометированными ключами? Они что, теперь не запускаются на последующих прошивках, которые были подписаны утёкшими приватными ключами?
Что-то мне твоя разгадка подписи ECDSA не устраивает такими доводами..
Все старье подписано не лакальным приватником с консоли, а приватным ключем самой компании SONY.
Все работает естественно. Ключ настоящий еще некто не получил этот.
vk.com/playstation_f_a_n
Последний раз редактировалось rhish777; 10.11.2017 в 13:06.
Причина: добавил, подумав
rhish777, эту картинку из детского сада я уже видел на каком-то сайте. Это ты детям показывай, что там неужели не понятно
Я тебе уже объяснял насчёт соли, как она рандомно генерируется и я прекрасно знаю все смещения, куда она записывается, уже показывал на скриншотах ранее в этой же теме. А ты эту картинку видимо только увидел, как что-то новое и типа она всё объясняет
Это знаешь, можно собрать вокруг школьников, сделать умный вид, показать эту картинку и сказать, типа вы все лохи, вот вам секрет ECDSA. Ну и вся школота будет махать гривами и соглашаться, типа теперь всё понятно Короче, не парь мне и людям мозги. Я уже по этому разговору вижу, насколько глубоко ты разбираешься в этом ECDSA, это можешь детям сказки рассказывать, но только не мне. И все ключи 3.30-3.55 настоящие, включая приватные. Где-то тут была тема с тех времён, когда мы сами эти ключи вытаскивали из файлов прошивки и сами же заполняли текстовик keys. И приватные ключи дампили из кирка. Вот почитай примерный ход исследования и добычи ключей для PSP, а на PS3 примерно то же самое и есть алгоритм формирования этого ECDSA, только никто пока не разгадал складывание байтов в этот кубик рубика. Если имеется один и тот же файл, подсаливается одной и той же солью (мы можем это дело взять под контроль и сделать статичным явлением по своему хотению, вместо рандомной генерации), ксорится одними и теми же приватными ключами, тогда и ECDSA всегда у этого файла будет на выходе одна и та же, иначе никакой приватный ключ дешифровки от Sony не сможет расшифровать свой же архив.
Я просто подумал, что ты реально просчитал механизм генерации ECDSA, а ты оказывается тут картинками пришёл размахивать.
Насчёт раскладывания кубиков я пока не нашёл ту тему и архивы со схемами, но потом найду и покажу, как это делается в механизме подписи каждой новой прошивки. Этот метод просто нужно разгадать, тогда у тебя появляется возможность декриптовать файлы прошивки. Это и есть аналогичный метод складывания ECDSA с рандомной солью, когда эта контрольная сумма никогда не повторяется в разных EBOOT.BIN в играх, в PKG или EDAT, поэтому угадать это сложно.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Я не проверял, но возможно можно декриптовать прошивку 4.81...
Кстати, я сам лично проверял EBOOT.BIN NPDRM подписанный под 4.75. Так вот, я его полностью декриптовал.
А это намекает, что ключи после 3.55 не совсем фейковые, как ты уверял.
И при желании, при отсутствии лени, их все можно проверить на валидность.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram