Сообщение от Erema36
Что по сути такое [ЕСС]?
Код ЕСС - код коррекции ошибок. Иными словами это СRC с ограниченной возможностью коррекции содержания по которому он высчитан.
Сектор представляет из себя [данные] + [служебка].
Точнее сказать, [данные] + [служебка контроллера] + [код ЕСС].
Код [ЕСС] защищает не только [пользовательские данные], но и [служебку контроллера]. В частности, [служебка контроллера] - хранит номер блока в банке, ротацию блока и еще бог знает какие служебные биты-флаги.
Поэтому выше предложенный способ не сработает.
Сектор, имеющий одно и то же содержание пользовательских данных, будучи записанным в разные места через стандартный интерфейс, имеет разную [служебку контроллера] и следовательно разный [код ЕСС] (высчитанный из [пользовательских данных] + [служебки контроллера]).
|
По моему ты слишком много читаешь детективов )))
Это же ECC - просто проверка целостности данных, но это не относится к шифрованию.
Представляешь, записав только один единственный файл, во сколько секторов он ляжет?
А если это куча файлов или один большой файл?
Если рассуждать по твоему, то получается, чтобы произвести чтение карты памяти или запись, то на вычисление ECC к каждому сектору уйдёт масса времени, от которого зависят характеристики карт памяти на скорость чтения/записи, которыми хвалится каждый производитель и соревнуются между собой.
На этом основании покупатели и делают вывод, какого производителя купить карту памяти.
Здесь всё обстоит намного проще.
Каждый сектор просто-напросто проверяется операцией
XOR и всё!
На основании заранее заданоого сида, с помощью XOR вычисляется код этого сектора 512 байт.
Если на основании СИДА, с помощью операции XOR, получается другое значение, отличное от имеющегося, значит сектор считается фейковым.
Сообщение от Erema36
Не зря же пишут:
ECC Code: 512 / 7 / SM325QF AC
Sector: 519/9
|
Всё правильно. На Memory Stick, как правило ставятся контроллёры, которые форматируют карту на основании геометрии
512 + 16 = 528
Я уже разбирался с этим вопросом и вычислил, что 16 байт избыточного кода содержит:
- Первые 4 байта - адресацию блока. Но цифра по моему перевёрнута, т.к. если эти байты превратить в децимальную цифру, то встречаются такие цифры, что столько блоков просто не может поместиться в память.
- Следующие 2 байта - FFFF или 0000. То есть, я так думаю пустой резерв или разделение кода.
- Остаётся 10 байт - это и есть контроль ECC - XOR u16 Bit Unsigned Short. То есть, эти 10 байт со здвигом переворачивают каждые 16 бит (2 байта) кода из этих 512 байт сектора.
Отсюда, в случае с рассматриваемым нами контроллёром, представленным в шапке, геометрия идёт так:
ECC Code: 512/10/ Memory Stick Hynix HY27UH08AG5M 2Гб; Контроллёр UD1F
Sector: 528/1
Если не понятно, то я чуть позже более подробнее объясню, как производится операция XOR на примере сектора MSID.
Кстати, это уже вопрос к нашим программистам
Yoti и
Frostegater:
здесь я нашёл код вычисления ECC
- У нас есть дампы памяти, где как раз есть области, полностью забитые одинаковым кодом FFFF FFFF FFFFF FFFF
- И у такого сектора есть 10-значный код ECC.
- То что код имеет структуру u16 Bit Unsigned Short - я уже 100% вычислил и полностью уверен в этом.
- Так что можно найти SEED - код преобразования XOR.
P.S. За основу берём этот дамп: https://www.pspx.ru/forum/showpost.ph...&postcount=283
Там есть оригинальный дамп сектора MSID под названием "07FFC4 - MSID Page Original (1 Page = 4 Sectors).bin"
Это неизменённый натуральный дамп, с которым можно работать.
А файл "07FFC4 - MSID Page Changed (1 Page = 4 Sectors).bin" - это тот же самый, только я туда вписал сам MSID от сервисной карты. Ессно ECC осталось прежним. Вот туда нужно подсчитать новый легитимный ECC.
|