Восстановление данных с карты памяти Compact Flash Transcend 32 Gb

admin Восстановление данных, Карты памяти

У карты памяти Transcend Compact Flash 32 Gb 400x из-за сильного износа памяти сломался транслятор и карта стала определяться с объемом 30 Мб. Разобрав, обнаруживаем внутри четыре микросхемы Samsung в корпусе LGA-52 с маркировкой K9LCG08U1M-LCBO и контроллер SM2234H от Silicon Motion.  Выпаиваем микросхемы флеш-памяти и считываем их на программаторе. Микросхемы оказались стековые, поэтому дампов восемь. После вычитывания, первым делом выделяем в служебных данных ECC (коды коррекции ошибок) и устраняем битовые ошибки. Алгоритмы ECC работают только до определенного числа ошибок, если ошибок на странице окажется слишком много, то поправить её не удастся. Составляем список нескорректированных секторов и вычитываем их еще раз. Когда с первой, а когда с десятой попытки удается вычитать страницу в приемлемом для коррекции состоянии. Обычно этот процесс на порядок сложнее , чем вычитывание и занимает несколько дней.  Если дампы очищенные от вкрапления ошибок на руках, то можно приступать к предварительным преобразованиям. Такой контроллер уже встречался и преобразования для него довольно простые. Дампы объединяются друг с другом через байт, полученный результат нужно вновь объединить через байт. Затем разбить страницу размером 34560 байт на 64 сектора и добавить к каждому сектору служебную информацию с маркерами для сборки образа. Перед сборкой нужно объединить два оставшихся дампа блоками по 64 сектора и при необходимости инвертировать. Но все это бесполезно, если не вычислить нужную последовательность дампов. Первым преобразованием дампы объединяются попарно, поэтому логично предположить, что в четырех дампах по одинаковым смещениям от начала будут встречаться похожие структуры, например чередование пустых участков и шума.  Разбив по этим признакам дампы на две группы, мы сильно упростим задачу, т.к. теперь нужно вычислить нужную последовательность  для двух групп из 4 элементов, а не для 8 элементов подряд. Никаких заголовков или осмысленной информации до объединения по байтам встречаться не будет, поэтому включаем интуицию с наблюдательностью и начинаем исследовать дампы. В одном месте глаз зацепился за последовательность 3422EST-RJET2890, которая включает в себя те же цифры, что и название контроллера. Меняем порядок с 0,1,2,3 на 6,2,0,4 и после двух объединений получаем 2234-TESTERJ0928 Chksum, а это явно не случайно.

TESTER

Изменение порядка следования дампов.

Сигнатурным анализом начали находиться большие файлы, значит предварительные преобразование верны и можно собирать транслятор. Контроллер разбивал всю карту памяти на блоки размером в 16384 сектора, которые записаны на микросхемах в хаотичном порядке, а номер блока кодировал маркерами смещенными на 513 байт от начала сектора.  Выделяем маркеры, по ним разделяем дамп на блоки и выстраиваем их по возрастанию номеров. Файловая таблица оказалась в положенном ей месте, теперь можно сохранить пользовательские данные.