Pfg29 6 al что за память
Если у вас SSD Team L5 Lite 120 GB перестал определяться, то возможно у него слетела прошивка в контроллере. Попытаемся восстановить прошивку.
Внимание! Данный процесс не гарантирует восстановление работы SSD, так как возможны ещё поломки аппаратной части накопителя. Мы попытаемся восстановить только программную часть.
Вы также должны понимать, что все данные на вашем накопителе будут потеряны в процессе восстановления SSD!
Если вскрыть корпус SSD, то внутри мы увидем контроллер Silicon Motion SM2258XT и две микросхемы памяти от Intel 29F32B2ALCMG2.
Для прошивки необходимо использовать USB-SATA переходник или USB-карман в который поместить прошиваемый SSD, чтобы работать с диском как с USB-накопителем.
Итак, снимаем всю электронику из корпуса и вставляем её в USB-SATA переходник. Подключаем USB к компьютеру.
Прошивать SSD будем утилитой SMI MPTool, которую можно скачать по cсылкам в конце этой статьи. К нашему SSD должна подойти сборка версии Q0914B.
Утилитой SMI MPTool можно прошивать не только SSD Team, но и SSD Silicon Power, SSD Goldenfir, SSD Kingdian, SSD Faspeed и т.д. Главное условие - наличие контроллера SM2258XT.
Прошивать SSD нужно в режиме ROM. В этот режим перевести накопитель можно используя перемычку на контактах подписанных как ROM (эта надпись находится со стороны микросхем памяти). Контакты можно просто закоротить пинцетом.
Примечание: На некоторых накопителях эти контакты подписаны как MOD.
Далее переходим на вкладку Parameter и нажимаем Edit Config. Зпросит пароль. Нужно будет ввести два пробела и нажать кнопку ОК.
Теперь необходимо выбрать правильную модель памяти из списка Flash Select и сохранить конфигурацию нажав Save Config.
Примечание: При выборе памяти можно нажать кнопку Auto и из предложенного списка выбрать необходимую память посмотрев маркировку на плате.
Некоторые пользователи отмечают, что иногда необходимо «поиграться» с Select Test Procedure, а именно с параметром Pretest. Иногда надо выбрать из списка 2.Reference Runtime Bad чтобы процесс восстановления SSD выполнился удачно, хотя зачастую достаточно оставить значение по умолчанию: 0.Reference Original Bad.
Больше ничего в настройках программы менять не нужно.
Затем переходим на вкладку Test и нажимаем кнопку Start или просто кнопку пробел на клавиатуре.
На этом всё - прошивка прошла успешно. Далее в Windows запускаем Управление дисками (Достаточно нажать клавиши Win + R и ввести diskmgmt.msc - это работает в Windows 7, 8 и 10) и инициализируем таблицу разделов, форматируем.
Все данные в процессе вышеуказанных действий, естественно, будут уничтожены. Однако у вас должен получиться вполне рабочий SSD!
Сервисные утилиты для восстановления и обслуживания SSD-накопителей на контроллерах Silicon Motion SM2258XT
Примечание: Используемые при прошивке бинарники, расположены в папке \Firmware\2258\ внутри каждого архива.
Секрет: Для получения доступа к редактированию настроек программы MPTool, необходимо ввести правильный пароль - два пробела .
а вот как такое шьют вопрос интересный.
Запись заголовка. : Ok
Запись PRAM. : Ok
Проверка. : Ok
Вызов исполняемого кода. : Ok
Запись оверлея в PRAM. : Ok
Проверка. : Ok
Загрузка микрокода. : Ok
****************************************
Чтение системной информации. : Ok
Чтение информации о микросхемах. : Ok
USER пароль. : Нет
Preformat
****************************************
Burner:
Использовать прекомпилированный burner.. : Yes
Подготовка:
Выполнить очистку SSD. : Yes
Паспорт SSD:
Model. : SSD FOXLINE 240GB
Serial. : 111E0796040F013AFF01
Firmware. : SBFM21.3
WWN. : 5000000000000000
Capacity. : [Auto]
****************************************
Переключение в Safe Mode. : Ok
Запись Burner
Запись заголовка. : Ok
Запись PRAM. : Ok
Проверка. : Ok
Вызов исполняемого кода. : Ok
Запись оверлея в PRAM. : Ok
Проверка. : Ok
Загрузка микрокода. : Ok
Выполнено успешно
Запись ISP (Tech)
Запись заголовка. : Ok
Запись ISP. : Ok
Вызов исполняемого кода. : Ok
Выполнено успешно
Питание выкл./вкл. : Ok
Подготовка:
Выполнить очистку SSD. : Yes
Паспорт SSD:
Model. : SSD
Serial. : A45E0779058000146543
Firmware. : SBFM21.2
WWN. : 0000000000000000
Capacity. : [Auto]
****************************************
Переключение в Safe Mode. : Ok
Чтение информации о микросхемах. : Ok
Запись Burner
Запись заголовка. : Ok
Запись PRAM. : Ok
Проверка. : Ok
Вызов исполняемого кода. : Ok
Запись оверлея в PRAM. : Ok
Проверка. : Ok
Загрузка микрокода. : Ok
Выполнено успешно
Основной тест
****************************************
Чтение системной информации. : Ok
Чтение информации о микросхемах. : Ok
Как узнать всю информацию об установленной у вас оперативной памяти?
Во первых, на самой планке оперативной памяти должна быть вся интересующая вас информация, только её нужно правильно прочесть. Не спорю, бывают планки памяти, на которых нет практически ничего, но с ними мы тоже справимся.
Например возьмём планку оперативной памяти Hynix, на ней есть такая информация: 4 GB PC3 – 12800.
Это значит, что наша планка оперативной памяти производителя Hynix имеет тип DDR3 и имеет пропускную способность PC3-12800. Если пропускную способность 12800 разделить на восемь и получается 1600. То есть эта планка памяти типа DDR3, работает на частоте 1600 Мгц.
Прочитайте всё, что касается оперативной памяти DDR2 и DDR3 на сайтеВозьмём ещё один модуль оперативной памяти – Crucial 4GB DDR3 1333 (PC3 – 10600). Это обозначает следующее: объём 4 ГБ, тип памяти DDR3, частота 1333 МГц, ещё указана пропускная способность PC3-10600.
Возьмём другую планку – Patriot 1GB PC2 – 6400.
Производитель Patriot, объём 1 ГБ, пропускная способность PC2 – 6400. PC2 - обозначение пиковой пропускной способности принадлежащей только типу DDR2 (у оперативной памяти DDR3 обозначение будет PC3, например PC3-12800). Пропускную способность 6400 делим на восемь и получается 800. То есть эта планка памяти типа DDR2, работает на частоте 800 Мгц.
Производитель Kingston, пропускная способность 6400, тип DDR2, объём 1 ГБ. Пропускную способность делим на 8, получаем частоту 800 МГц.
Но на этой планке оперативной памяти есть ещё важная информация , у неё напряжение питания микросхем нестандартное: 2.0 В - выставляется в БИОС вручную.
Всё хорошо видно по этой схеме.
Иногда на модуле оперативной памяти не будет никакой понятной информации, кроме названия самого модуля. А модуль нельзя снять, так как он на гарантии. Но и по названию можно понять, что это за память. Например
Kingston KHX 1600 C9 D3 X2K2/ 8G X, всё это обозначает: Буква X в конце маркировки памяти Kingston указывает на поддержку XMP-профиля.
Можно просто набрать название модуля в поисковиках и вы узнаете всю информацию о нём.
К примеру, информация программы AIDA64 о моей оперативной памяти. Модули оперативной памяти Kingston HyperX установлены в слоты оперативной памяти 2 и 4, тип памяти DDR3, частота 1600 МГц
DIMM2: Kingston HyperX KHX1600C9D3/4GX DDR3-1600 DDR3 SDRAM
DIMM4: Kingston HyperX KHX1600C9D3/4GX DDR3-1600 DDR3 SDRAM
Если запустить бесплатную программу CPU-Z и пройти на вкладку Memory (Память), то она покажет на какой именно частоте работают Ваши планки оперативки. Моя память работает в двухканальном режиме Dual, частота 800 МГц, так как память DDR3, то её эффективная (удвоенная) скорость 1600 МГц. Значит мои планки оперативной памяти работают именно на той частоте, для которой они и предназначены 1600 МГц. Но что будет, если рядом со своими планками оперативной памяти работающими на частоте 1600 МГц я установлю другую планку с частотой 1333 МГц!?
Смотрим что показывает AIDA64, в программе видно, что установлена дополнительная планка объёмом 4 ГБ, частота 1333 МГц.
То есть, материнская плата автоматически выставила частоту работы всех планок оперативной памяти по самому медленному модулю1333МГц.
Можно ли установить в компьютер планки оперативной памяти с частотой больше, чем поддерживает материнская плата
Устанавливать в компьютер планки оперативной памяти с частотой больше, чем поддерживает материнская плата не желательно. Например, если ваша материнская плата поддерживает максимальную частоту оперативной памяти 1600 МГц, а вы установили на компьютер модуль оперативной памяти работающий на частоте 1866, то в лучшем случае этот модуль будет работать на меньшей частоте 1600 МГц, а в худшем случае модуль будет работать на своей частоте 1866 МГц, но компьютер будет периодически сам перезагружаться или вы получите при загрузке компьютера синий экран, в этом случае Вам придётся войти в БИОС и вручную выставить частоту оперативной памяти в 1600 МГц.
Тайминги (задержки сигнала) определяют как часто может процессор обращаться к оперативной памяти, если у вас четырёхъядерный процессор и у него большой кэш второго уровня, то слишком большие тайминги не страшны, так как процессор уже реже обращается к оперативной памяти. Можно ли установить в компьютер планки оперативной памяти с разными таймингами? Тайминги тоже не обязательно должны совпадать. Материнская плата автоматом выставит тайминги для всех планок по самому медленному модулю.Какие условия нужны для того, чтобы моя память работала в двухканальном режиме
Перед покупкой оперативной памяти нужно изучить максимум информации об материнской плате. Всю информацию о вашей материнской плате можно узнать из руководства прилагающегося к ней при покупке. Если руководство утеряно, нужно пройти на официальный сайт вашей материнки. Также вам будет полезна статья «Как узнать модель и всю информацию о своей материнской плате»
Чаще всего в наше время встречаются материнские платы, поддерживающие нижеописанные режимы работы оперативной памяти.
Dual Mode (двухканальный режим, встречается чаще всего) – при внимательном рассмотрении материнской платы вы можете увидеть, что слоты оперативной памяти окрашены в разные цвета. Сделано это специально и означает, что материнская плата поддерживает двуканальный режим работы оперативной памяти. То есть специально подбираются два модуля оперативной памяти с одинаковыми характеристиками (частотой, таймингами) и одинаковым объёмом и устанавливаются в одинаковые по цвету слоты оперативной памяти.
Как узнать, работает моя оперативная память в двухканальном режиме или нет?
Скачиваем бесплатную программу CPU-Z и идём на вкладку Memory , смотрим параметр Channel в нашем случае — Dual , значит оперативная память работает в двухканальном режиме. Если параметр Channels — Single , значит оперативная память работает в одноканальном режиме.
Triple Mode (трехканальный режим, редко встречается) – можно установить от трёх до шести модулей памяти.
Что лучше будет работать, две планки оперативки по 4 ГБ в двухканальном режиме или одна планка, но объёмом 8 ГБ в одноканальном режиме?
Моё мнение, при обычной работе на компьютере одинаково будут работать, лично я особой разницы не заметил. Я долго работал на компьютере с одной большой планкой оперативки и производительность была такая же, как и на точно таком же компьютере с двумя планками оперативки работающими в двухканальном режиме. Опрос друзей и знакомых сисадминов укрепил меня в этом мнении. Но вот при работе с программами активно использующими оперативную память, например Adobe Premiere Pro, Canopus ProCoder, Photoshop, играх, компьютер с двумя планками оперативной памяти будет работать быстрее.
Можно ли в компьютер установить несколько разных по частоте и объёму планок оперативной памяти?
Есть у меня знакомый, который занимается ремонтом автомобильного железа. Он как-то принес мне микроконтроллер, выпаянный из блока управления автономного отопителя. Сказал, что его программатор это не берет, а ему хотелось бы иметь возможность переливать прошивки туда-сюда, т.к. блоков много, в железе они часто одинаковые, а вот агрегаты, которыми они управляют отличаются. И вроде и блок есть взамен неисправного, но ПО разное и заменить просто так нельзя. Так как задачка была интересной, решил покопаться. Если тема интересна и вам, прошу под кат.
Подопытным оказался M306N5FCTFP. Это микроконтроллер группы M16C/6N5. Ядро M16C/60 разработано Mitsubishi, а т.к. преемником этой компании по части МК с 2003 года является Renesas, то сейчас эти микроконтроллеры известны именно под этим брендом.
Немного о самом микроконтроллере
Камешек представляет собой 16-разрядный микроконтроллер в 100-выводном QFP корпусе. Ядро имеет 1 МБайт адресного пространства, тактовая частота 20МГц для автомобильного исполнения. Набор периферии так же весьма обширный: два 16-разрядных таймера и возможность генерации 3-фазного ШИМ для управления моторами, всякие UART, SPI, I2C естественно, 2 канала DMA, имеется встроенный CAN2.0B контроллер, а также PLL. На мой взгляд очень неплохо для старичка. Вот обзорная схемка из документации:
Так как моя задача выдрать ПО, то так же весьма интересует память. Данный МК выпускался в двух вариантах: масочном и Flash. Ко мне попал, как выше уже упоминалось, M306N5FCTFP. Про него в описании сказано следующее:
- Flash memory version
- 128 KBytes + 4K (дополнительные 4K — так называемый блок А в подарок пользователю для хранения данных, но может хранить и программу)
- V-ver. (автомобильное исполнение с диапазоном +125°C)
Как вытащить из устройства то, что разработчики втащили
Вполне естественно, что начинать попытки достать что-то из микроконтроллера нужно с изучения механизмов, которые встроены разработчиком чипа для задач программирования памяти. В мануале указано, что производитель любезно разместил в памяти загрузчик, для нужд внутрисхемного программирования устройства.
Как видно из картинки выше, память разбита на 2 части: пользовательская область, и область загрузчика. Во второй как раз с завода залит загрузчик по умолчанию, который умеет писать, читать, стирать пользовательскую память и общается через асинхронный, синхронный, либо CAN-интерфейс. Указано, что он может быть переписан на свой, а может быть и не переписан. В конце концов это легко проверяется попыткой постучаться к стандартному загрузчику хотя-бы через UART… Забегая вперед: производитель отопителя не стал заморачиваться своим загрузчиком, поэтом копать дальше можно в этом направлении. Сразу оговорюсь, что есть еще способ параллельного программирования, но т.к. программатора для этого у меня не было, я не рассматривал этот вариант.
О защите от считывания
Все бы было совсем просто, если бы в загрузчике не была предусмотрена защита от несанкционированного доступа. Я просто приведу очень вольный перевод из мануала.
Функция проверки идентификатора
Используется в последовательном и CAN режимах обмена. Идентификатор, переданный программатором, сравнивается с идентификатором, записанным во flash памяти. Если идентификаторы не совпадают, команды, отправляемые программатором, не принимаются. Однако, если 4 байта вектора сброса равны FFFFFFFFh, идентификаторы не сравниваются, позволяя всем командам выполняться. Идентификатор — это 7 байт, сохраненных последовательно, начиная с первого байта, по адресам 0FFFDFh, 0FFFE3h, 0FFFEBh, 0FFFEFh, 0FFFF3h, 0FFFF7h, и 0FFFFBh.
Таким образом, чтобы получить доступ к программе, нужно знать заветные 7 байт. Опять же, забегая вперед, я подключился к МК, используя тот же «M16C Flash Starter» и убедился, что комбинации из нулей и FF не проходят и этот вопрос придется как то решать. Здесь сразу же всплыла мысль с атакой по сторонним каналам. Уже начал прикидывать в голове платку, позволяющую измерять ток в цепи питания, но решил, что интернет большой и большинство велосипедов уже изобретено. Вбив несколько поисковых запросов, довольно быстро нашел на hackaday.io проект Serge 'q3k' Bazanski, с названием «Reverse engineering Toshiba R100 BIOS». И в рамках этого проекта автор решал по сути точно такую же задачу: добыча встроенного ПО из МК M306K9FCLR. Более того — на тот момент задача им была уже успешно решена. С одной стороны я немного расстроился — интересная загадка разгадана не мной. С другой — задача превратилась из поиска уязвимости, в ее эксплуатацию, что обещало гораздо более скорое решение.
В двух словах, q3k точно по такой же логике начал изучение с анализа потребляемого тока, в этом плане он был в гораздо более выгодных условиях, т.к. у него был ChipWhisperer, этой штукой я до сих пор не обзавелся. Но т.к. его первый зонд для снятия тока потребления оказался неподходящим и вычленить из шумов что-то полезное у него не получилось, он решил попробовать простенькую атаку на время отклика. Дело в том, что загрузчик во время выполнения команды дергает вывод BUSY, чтобы проинформировать хост о том, занят он, или готов выполнять следующую команду. Вот, по предположению q3k, замер времени от передачи последнего бита идентификатора до снятия флага занятости мог послужить источником информации при переборе. При проверке этого предположения перебором первого байта ключа действительно было обнаружено отклонение по времени только в одном случае — когда первый байт был равен FFh. Для удобства измерения времени автор даже замедлил МК, отключив кварцевый резонатор и подав на тактовый вход меандр 666кГц, для упрощения процедуры измерений. После чего идентификатор был успешно подобран и ПО было извлечено.
Первый блин — граблями
Ха! Подумал я… Сейчас я быстренько наклепаю программку к имевшейся у меня STM32VLDiscovery c STM32F100 на борту, которая будет отправлять код и измерять время отклика, а в терминал выплевывать результаты измерений. Т.к. макетная плата с целевым контроллером до этого подключалась к ПК через переходник USB-UART, то, дабы ничего не менять на макетке, работать будем в асинхронном режиме.
Когда при старте загрузчика вход CLK1 притянут к земле, он понимает, что от него хотят асинхронного общения. Собственно потому я его и использовал — подтяжка была уже припаяна и я просто соединил проводами две платы: Discovery и макетку с целевым M306.
Заметка по согласованию уровней:
Т.к. M16 имеет TTL-уровни на выводах, а STM32 — LVTTL (упрощенно, в даташите подробнее), то необходимо согласование уровней. Т.к. это не устройство, которое, как известная батарейка, должно работать, работать и работать, а по сути подключается разок на столе, то с трансляторами уровней я не заморачивался: выходные уровни от STM32 пятивольтовый МК переварил, в смысле 3 вольта как «1» воспринимает, выходы от М16 подаем на 5V tolerant входы STM32 дабы ему не поплохело, а ногу, которая дергает RESET M16 не забываем перевести в режим выхода с открытым стоком. Я вот забыл, и это еще +2ч в копилку упущенного времени.
Этого минимума достаточно, чтобы железки друг друга поняли.
Логика атакующего ПО следующая:
- Устанавливаем соединение с контроллером. Для этого необходимо дождаться, пока завершится сброс, затем передать 16 нулевых символов с интервалом более, чем 20 мс. Это для того, чтобы отработал алгоритм автоопределения скорости обмена, т.к. интерфейс асинхронный, а МК о своей частоте ничего не знает. Стартовая скорость передатчика должна быть 9600 бод, именно на эту скорость рассчитывает загрузчик. После этого при желании можно запросить другую скорость обмена из пяти доступных в диапазоне 9600-115200 (правда в моем случае на 115200 загрузчик работать отказался). Мне скорость менять не нужно, поэтому я для контроля синхронизации просто запрашивал версию загрузчика. Передаем FBh, загрузчик отвечает строкой вроде «VER.1.01».
- Отправляем команду «unlock», которая содержит текущую итерацию ключа, и замеряем время до снятия флага занятости.
Команда состоит из кода F5h, трех байт адреса, где начинается область идентификатора (в моем случае, для ядра M16C, это 0FFFDFh), длина (07h), и сам идентификатор. - Измеряем время между передачей последнего бита идентификатора и снятием флага занятости.
- Увеличиваем перебираемый байт ключа (KEY1 на начальном этапе), возвращаемся к шагу 2 до тех пор, пока не переберем все 255 значений текущего байта.
- Сбрасываем статистику на терминал (ну или выполняем анализ «на борту»).
В итоге, для всех значений результаты были идентичны. Полностью идентичны. Тактовая частота таймера у меня была 24Мгц, соответственно разрешение по времени — 41,6 нс. Ну ок, попробовал замедлить целевой МК. Ничего не поменялось. Здесь в голове родился вопрос: что я делаю не так, как это делал q3k? После сравнения разница нашлась: он использует синхронный интерфейс обмена (SPI), а я асинхронный (UART). И где-то вот здесь я обратил внимание на тот момент, который упустил вначале. Даже на схемах подключения для синхронного и асинхронного режимов загрузчика вывод готовности назван по-разному:
В синхронном это «BUSY», в асинхронном это «Monitor». Смотрим в таблицу «Функции выводов в режиме Standart Serial I/O»:
«Семён Семёныч…»
Упущенная вначале мелочь завела не туда. Собственно, если в синхронном режиме это именно флаг занятости загрузчика, то в асинхронном (тот, который serial I/O mode 2) — просто «мигалка» для индикации работы. Возможно вообще аппаратный сигнал готовности приемопередатчика, оттого и удивительная точность его поднятия.
В общем перепаиваем резистор на выводе SCLK с земли на VCC, припаиваем туда провод, цепляем все это к SPI и начинаем сначала…
Успех!
В синхронном режиме все почти так же, только не требуется никакой предварительной процедуры установки соединения, упрощается синхронизация и захват времени можно выполнить точнее. Если бы сразу выбрал этот режим сохранил бы время… Я снова не стал усложнять и измерять время именно от последнего бита, а запускал таймер перед началом передачи последнего байта ключа, т.е. включаем таймер и отправляем в передатчик KEY7 (на скриншоте выше, из логического анализатора, видно расстояние между курсорами. Это и есть отсчитываемый отрезок времени).
Этого оказалось более чем достаточно для успешной идентификации. Вот так выглядит перебор одного байта:
По оси абсцисс у нас количество дискрет счетчика, по оси ординат, соответственно, передаваемое значение ключа. Отношение сигнал/шум такое, что даже никаких фильтров не требуется, прямо как в школе на уроке информатики: находим максимум в массиве и переходим в подбору следующего байта. Первые 6 байт подбираются легко и быстро, чуть сложнее с последним: там просто наглый перебор не проходит, нужен сброс «жертвы» перед каждой попыткой. В итоге на каждую попытку уходит что-то около 400 мс, и перебор идет в худшем случае в районе полутора минут. Но это в худшем. После каждой попытки запрашиваем статус и, как только угадали, останавливаемся. Я вначале вообще просто быстренько ручками перебрал идентификатор, вставляя в excel вывод консоли и строя график, тем более, что это была разовая задача, но уже для статьи решил дописать автоматический перебор, ради красивой консольки…
Конечно, если бы разработчик затер загрузчик (заменил своим), так просто выкрутиться не получилось бы, но в автомобильной электронике частенько МК вообще не закрыты. В частности в блоке управления с другого отопителя, в котором был установлен V850 того же Renesas все решилось подпайкой пары проводов и копированием прошивки штатной утилитой. Это в мире ЭБУ двигателем целые криптовойны. Видимо не нравится производителям явление чип-тюнинга и других видов вмешательства… Хотя это как гонка брони и снаряда — железки круче, дороже, но победителя нет…
Читайте также: