- PVSM.RU - https://www.pvsm.ru -
Так уж приключилось, что последние 1.5 года я отдаю долг родине (на АГС) и работаю медтехником. Работа дико интересная и увлекательная, особенно если вы падки на reverse engineering. Но времени и сил на что-то творческое, про что можно в последствии написать статью - не остаётся. А тут можно сказать, звёзды сошлись и получается убить 2х зайцев: контент и инструкция для моих коллег из IT отдела.
Или даже 3х, мало-ли кому-то пригодится инструкция по замене накопителей в Toshiba Aplio 500
Само собой всё нижеописанное вы делайте на свой страх и риск. Помимо банального риска убить рабочий накопитель, вы ещё и рискуете данными, даже после успешной перепрошивки. Потому что, никто не гарантирует, как себя поведёт модернизированный накопитель на долгосроке. Учитываем это и действуем аккуратно, да прибудут с вами бэкапы!
На первый взгляд перепрошивка SSD звучит также абсурдно как прошивка паяльника. Однако если отбросить философию, то вариантов зачем это делать, становится не особо много:
1) У вас исправный SSD и вам нужно перебить его серийные номера
2) У вас неисправный SSD и тщетно (или не очень) боретесь за его жизнь
В статье будем работать с контроллером SMI, однако описанный опыт можно экстраполировать и для контроллеров Phison.
Почему Phison и SMI? Ответ прост - софт для прошивки (а это слитый фабричный) наиболее распространён именно под эти контроллеры. Я не заявляю, что его совсем нет, отнюдь, просто будет обидно целенаправленно купить SSD под перепрошивку и узнать, что прошивать то нечем...
Алгоритм подбора крайне прост:
Ищем в рознице 3-5 моделей среднего качества, отсеивая всякий ширпотреб аля Radeon SSD (которые к AMD естественно никакого отношения не имеют) и прочие KingSpec
Далее для каждого гуглим сочетание контроллер+память, в идеале ищем случаи восстановление конкретной модели
Поиски сводятся к одному сайту: usbdev.ru - святой грааль при работе с накопителями, будь то флешки или SSD. Рекомендую ознакомиться, даже если вам не нужно прошивать ничего, думаю далеко не все слышали про прошитую USB флешку которая определяется как USB-ODD [1], данные для которого лежат во флеш-памяти в формате .iso
Если среди множества множеств версий комбайнов для прошивки есть нужный под ваше сочетание контроллер+память - едем дальше
Давайте сначала ознакомимся с виновником торжества, а затем уже будем разбирать необходимые железки...
А вот и он, характеристики следующие
ЖК монитор 19 дюймов с возможностью регулировки положения в вертикальной и горизонтальной плоскостях
сенсорная панель управления 10 дюймов
коннекторы для подсоединения 3/4-х датчиков
встроенный жесткий диск УЗИ аппарата – 160 Гб
жесткий диск рабочей станции – 250 Гб
кинопетля – 4090 кадров
количество приемо-передающих каналов – свыше 70 тыс.
кол-во физических передающих каналов – 190
глубина сканирования – до 32 см
габариты: 500 (Ш) х 1400-1700 (В) х 900 (Г)
масса – 140 кг
Я намеренно написал в названии статьи 'вернуть в строй', вместо оживить, аппарат то рабочий. Но что с ним не так? Врачи-УЗИсты жалются на 5 минутные тормоза аппарата, работать невозможно :/
Оба HDD морально-физически устали и требуют замены на стильные, модные, молодёжные SSD.
Аппарат сначала попал к ITшникам. А уже только потом ко мне, как к последней надежде.
Казалось бы, делов то - поставил SSD, да склонировал посекторно данные с HDD, ITшники тоже так думали, но столкнулись с суровой реальностью.
Дело в том, что после старта системы, грузится оболочка УЗИ и она сверяет серийный номер накопителя на котором установлен дистрибутив. И если диск отличный от того, что поставил производитель/оффицал, то УЗИ при включении покажет индейскую национальную народную избу.
Государственное Бюджетное Учреждение не может себе позволить выезд офицалов (по целому ряду причин), поэтому в очередной раз приходится изобретать болт с обратной резьбой.
Очевидно надо добраться до дисков, обнажаем пластиковую скорлупу на правом торце и нас встречает...
Да, обыкновенный комп. Из необыкновенного, только принадлежность материнки, она для рабочих станций и специализированная PCI плата для датчиков. Уже предвкушаете какая система там стоит?
P.S. Чтобы запустить свой процесс после старта оболочки (она блокирует любые попытки выйти за пределы её GUI, в т.ч. перехватывает системные вызовы стандартных клавиш), нужно словить тайминг между её стартом и проходом winlogon.exe.
Там порядка ~600ms (если система и оболочка на SSD), при резком нажатии стандартного CTRL+SHIFT+ESC можно попасть, затем после старта оболочки курсором выставить фокус на диспетчер задач, ну а дальше думаю не нужно рассказывать
Это фото из начала, когда была клонирована только система, диск 1 с дистрибутивом остался родной. Но этого мало, поэтому переходим к осмотру SSD.
Ещё перед тем как получить аппарат в свои шаловливые ручки, я проанализировал розницу по вышеприведённому алгоритму и заказал 2 SSD под это действо:
Да, самые попсовые A400, зато легко купить и под них можно найти прошивку. Вскрываем и внутри нас встречают:
Контроллер Silicon Motion SM2259XT2 + две TLC банки FB25608VCS1 (от Samsung? По крайней мере в конфиге прошивальщика память так обзывается)
Самые глазастые заметили контактные площадки в левом верхнем углу платы. С шагом 2.0мм 12 пиновый, предположу что JTAG контроллера. А вот 2х пиновый, это контакты для перевода контроллера в BootROM, но забегая вперёд скажу, что они не понадобятся и конкретно этот SSD для прошивки - даже вскрывать не нужно!
1. Материнка с двумя SATA HotPlug - чтобы не мучаться перезагружая каждый раз, выводим их наружу вместе с питанием чтобы получилось что-то вроде:
2. USB-SATA адаптер, я использовал DEXP HD303 на чипе ASM225CM - он отлично себя показал, с ним 0 проблем за всё время жонглирования прошивками
Ну и нужно ли говорить, что прошиваем только через него?
3. Ну и собственно сам прошивальщик, тут можно поступить хитро, скачать любой свежий для вашей версии контроллера, прожать Scan Drive и вычитать версию прошивки:
Затем уже по FW ищем необходимый пакет прошивальщика. Для теста можно прошить не изменяя параметры, если всё окей - продолжаем продолжать:
Открываем параметры -> Edit config -> Вводим пароль (который указан на странице загрузки) и правим следующие параметры:
Жмём Save Config As -> Сохраняем в корень прошивальщика. Выбираем наш конфиг ещё раз.
Далее я намеренно упрощу, т.к. всё ровно будет описываться неверная последовательность действий, не наступайте в мои грабли!
И тут проблема, в программу серийник забивается по определённой маске, но не беда, правлю текстовый конфиг выставляю минимальную длину 9 байт, затем сам серийник как у жёсткого диска, который прочитали в Crystal Disk Info
Прошиваем, проверяем:
Паспорт как у HDD, практически полный клон. Погоняем тестами:
Серийник успешно зашился, значит можно действовать дальше. Клонируем систему и..
Ничего. Всё также оболочка не стартует, тупик?
Но почему? Неужели количество секторов влияет?
Поменял, залил, клонировал, проверил - всё также..
Спустя день снова вернулся с холодной головой и меня озарило, а что если GUIшные программы для диагностики нас обманывают?
Гуглим спеки, ATA API, выходим на сайт мелкомягких [2] и что мы видим:
typedef struct _IDENTIFY_DEVICE_DATA {
struct {
USHORT Reserved1 : 1;
USHORT Retired3 : 1;
USHORT ResponseIncomplete : 1;
USHORT Retired2 : 3;
USHORT FixedDevice : 1;
USHORT RemovableMedia : 1;
USHORT Retired1 : 7;
USHORT DeviceType : 1;
} GeneralConfiguration;
USHORT NumCylinders;
USHORT SpecificConfiguration;
USHORT NumHeads;
USHORT Retired1[2];
USHORT NumSectorsPerTrack;
USHORT VendorUnique1[3];
UCHAR SerialNumber[20];
USHORT Retired2[2];
USHORT Obsolete1;
UCHAR FirmwareRevision[8];
UCHAR ModelNumber[40];
UCHAR MaximumBlockTransfer;
UCHAR VendorUnique2;
В структуре данными устройства под наш краеугольный SerialNumber отведено 20 байт. Отлично, а как данные по факту выглядят? Открываем PowerShell и ваяем простенький скрипт:
Get-Disk | ForEach-Object {
$diskNumber = $_.Number
$wmi = Get-CimInstance Win32_DiskDrive |
Where-Object DeviceID -eq "\.PHYSICALDRIVE$diskNumber"
# Получаем строки
$serial = $wmi.SerialNumber
$unique = $_.UniqueId
# Преобразуем строки в байты и затем в hex
$serialHex = if ($serial) {
($serial.ToCharArray() | ForEach-Object {
"{0:X2}" -f [byte][char]$_
}) -join " "
} else { "" }
$uniqueHex = if ($unique) {
($unique.ToCharArray() | ForEach-Object {
"{0:X2}" -f [byte][char]$_
}) -join " "
} else { "" }
[PSCustomObject]@{
Disk = $diskNumber
Serial = $serial
SerialHex = $serialHex
UniqueId = $unique
UniqueHex = $uniqueHex
}
}
Запускаем и что мы видим?
Диск 0 собственно наш SSD, диск 3 родной УЗИшный HDD, вроде один серийник, но есть нюанс.
Далее я ради интереса подключил другой случайный винт на 500гб и посмотрел его серийник и он тоже с пробелами (ASCII код 0x20) причём той же длины, чтож, видать это стандарт.
Возвращаемся к нашему барану, прошивальщику:
Возвращаем длину 20, заодно на всякий случай (даже если оболочка УЗИ его не проверяет, ничего страшного) добавляем WWN (который UniqueId), который мы добыли выше. Далее переходим в конфиг
При попытке поставить пробелы прошивальщик в начале прошивки нас молча обрадует и удалит их:
Уж не знаю с какой попытки перебора символов, всё же мне пришло в голову добавить кавычки и как итог:
Прошивальщик радостно кушает первый и последний символ кавычек, не трогая остальной серийник и далее уже преобразует нашу строку с пробелами и зашивает её с остальными данными.
Проверяем что там по факту, а там всё шоколадно:
Правильный алгоритм действий для прошивки серийного номера в MPTool
Находим прошивку под свою связку контроллер + память
Запускаем скрипт в PowerShell, достаём наши уникальный серийники
В MPTool задаём основные все данные, серийник не трогаем, колличество секторов не меняем
Сохраняем конфиг
В конфиге правим строку BEGINSN, заключая наш SN в ""
Прошиваем
Вы прекрасны
Подключаем, грузимся
Ииии, да! Это победа, оболочка запустилась, аппарат снова готов работать. А поскольку у нас апгрейд на SSD, то ещё и не мешая врачам работать 5 минутными затупами
Собираем SSDшник обратно в корпус, не забывая обозначить, что это малость не обычный диск:
Ну финальное фото:
По итогу получилось обмануть УЗИшную оболочку, аппарат поехал в отделение кардиологии работать дальше.
Вот такая вот предновогодняя статья-подарочек. Если по стилю и содержанию повествования тяжёло, уж простите, статья скорее разминочная, после паузы сложно выдавать абзац за абзацем. Спасибо за внимание, я пошёл трассировать плату для следующего проекта, увидимся в 2026!
Автор: kulhaker478
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssd/440548
Ссылки в тексте:
[1] прошитую USB флешку которая определяется как USB-ODD: https://www.usbdev.ru/articles/luncdrom/
[2] на сайт мелкомягких: https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ata/ns-ata-_identify_device_data
[3] Источник: https://habr.com/ru/articles/979626/?utm_source=habrahabr&utm_medium=rss&utm_campaign=979626
Нажмите здесь для печати.