Сообщение от rupor
У меня такое чувство, что make_npdata их вообще не правильно считает. (если вообще считает)
Потому как у самодельных edat при декриптовке постоянно так
Metadata signature is invalid!
Header signature is invalid!
File successfully parsed!
|
Ну да, вообще не считает, а просто генерирует.
Вот, посмотри в исходниках:
в строке №1214
А там такой код:
// ECDSA header signature (fill with random data for now).
fseeko64(f, 0xB0, SEEK_SET);
prng(header_signature, 0x28);
fwrite(header_signature, 0x28, 1, f);
// ECDSA metadata signature (fill with random data for now).
fseeko64(f, 0xD8, SEEK_SET);
prng(metadata_signature, 0x28);
fwrite(metadata_signature, 0x28, 1, f);
То есть, эти ECDSA для
header_signature и
metadata_signature заполняются рандомными числами.
Функция
prng как раз отвечает за генерацию случайных чисел.
Причём я заметил тут ещё ошибку: в указанной позиции
0xB0 должно быть
metadata_signature, а в позиции
0xD8 должно быть
header_signature, а не наоборот

.
В хитрой утилите
make_c00_edat просто хитрый
Slimshady451 эту строку генератора случайных чисел удалил и в
строке №1145 поменяли это:
unsigned char header_signature[0x28];
unsigned char metadata_signature[0x28];
На вот это:
unsigned char header_signature[0x28] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char metadata_signature[0x28] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
В результате получаем утилиту make_c00_edat, не имея её исходников

.
Ну там ещё нужно будет подправить ввод команд, вместо "<input> <output> 1 1 1 0 16 3 01 Content_ID 1", используемых в make_npdata на автоподстановку заранее известных команд только для C00, вот так "<inputoutput> [Content_ID] [version=1]".
Собственно, хитрый
Slimshady451 поменял рандомный генератор на нули и выдал утилиту за своё новое произведение. Ах да, ещё удалил Футер в version 1 - это строка в конце файла "EDATA packager..". Хотя изначальная утилита make_npdata делает всё тоже самое из коробки с Type 01, только вместо нулей в ECDSA там набор рандомных чисел, которые ни на что не влияют и футер ни на что не влияет.
Что я хотел сказать... при шифровании любых файлов, как SDAT и EDAT, этот ECDSA подставляется рандомная, а не настоящая, которая проверяется только в
PS2 Classic, а в других случаях не проверяется консолью. Конечно же это не значит, что можно в готовом файле писать что угодно вместо ECDSA, потому что после заполнения заголовка, куда входят ECDSA, генерируется снова хэш всего заголовка, которым шифруется тело файла (короче говоря).