Найти в Дзене

Несколько дней из жизни автоматического гематологического анализатора Rayto RT-7600S.

Оглавление

Предисловие.

Зашел как-то в гости пациент: «Что-то неправильно меряет и показывает».

Рекомендуется ВСЕГДА создавать резервные копии и дампы!

Предметное рассмотрение аппарата показало, что не обновляется информации о замене реагентов, при этом время замены реагентов давно прошло. Ранее реагенты обновлялись с информацией которая читалась через NFC ридер. При попытке зайти в сервис и обновить параметры, появляется диалоговое окно, в котором отсутствуют возможности обновить дату замены реагентов:

Рисунок 1. - Сообщение об ошибке.
Рисунок 1. - Сообщение об ошибке.

И при попытке замены даты реагентов не позволяет сделать процедуру обновления реагентов.

Рисунок 2. - Диалоговое окно обновления даты реагентов.
Рисунок 2. - Диалоговое окно обновления даты реагентов.

Входная информация.

Версия программного обеспечения 7.4ua (украинская локализация). В наличии на выбор языки: английский, испанский, французский и указанный.

Рисунок 3. - Версия программы.
Рисунок 3. - Версия программы.

Загрузка системы.

При загрузке системы используется загрузчик GRUB, который копирует подавляющее большинство системных файлов операционной системы со скрытого раздела в системный раздел (диск C:\). При каждом запуске системы любые настройки и изменения не сохраняются. А диск D:\, на котором находится программ и база данных, свободен от защиты. Таким образом, обеспечивается стабильность работы системы. Общий вид разделов выглядит следующим образом:

Рисунок 4. - Структура носителя.
Рисунок 4. - Структура носителя.

В этом аппарате использовался накопитель CompactFlash на 8 Гб., из которых используются только первые 4 Гб., а остальные не распределены.

В корне диска C находится файл WERUNTIME.INI, в котором находится серийный номер системы: RunTimePID=G9KHD-GF824-7PBGK-9H7D7-PYFYM. Windows XP SP3 build 2600.

Для того чтобы изменить и запомнить некоторые параметры системы используется утилита FBWF.exe которая находится в корне диска C:\. Для запуска утилиты можно использовать Проводник, запустить его можно из меню безопасности (Ctrl-Alt-Del), или нажать, в указанном ниже, на изображении месте 10 раз:

Рисунок 5. - Место вызова дополнительного скрытого меню.
Рисунок 5. - Место вызова дополнительного скрытого меню.

После этой процедуры откроется новое диалоговое окно, в котором можно запустить Проводник. И уже используя Проводник в корне диска C:\ можно запустить FBWF.exe.

Рисунок 6. - Дополнительное скрытое диалоговое окно.
Рисунок 6. - Дополнительное скрытое диалоговое окно.

Запустив утилиту FBWF.exe можно разблокировать настройку системы, перезагрузить, изменить настройки, перезагрузить и включить защиту. Таким образом можно например изменить разрешение экрана или установить новый принтер. Сама утилита бывает как в англоязычной, так и в восточной локализации. Однако расположение и значения кнопок идентично. При запуске утилиты может потребоваться пароль, обычно: 1008.

Рисунок 7. - Окно утилиты FBWF.exe
Рисунок 7. - Окно утилиты FBWF.exe

Запуск программы.

Запуск основной программы начинается с запуска программы DatabaseMaintain.exe, которая находится в C:\Windows\. После проверки системы, проверки базы данных BloodCell.mdb, которая расположена в D:\RTHemat\, проверки и записи параметров в базу, отключении хранителя экрана и проверки модулей, происходит запуск основной программы анализатора RTHemat.exe, которая находится по адресу D:\RTHemat\.

При этом как оболочка (shell) грузится DatabaseMaintain.exe, а вместо userinit.exe грузится файл FBA.exe (расположенный по адресу C:\WINDOWS\FBA\). В принципе можно посмотреть параметры загрузки в реестре [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon].

Однако менять указанный shell на классический explorer не стоит, так как разворачивание Рабочего стола занимает почти 1 Гб. дополнительного места, и почти 20% производительности. Проверено, шкурка вычинки не стоит.

Очень большое количество параметров системы находятся в базе данных BloodCell.mdb. Чтобы открыть базу необходим пароль, посмотреть его можно в файле RTHemat.exe, начиная со смещения 05B8798h можно наблюдать описание пароля.

Рисунок 8. - Пароль на базу данных из основной программы RTHemat.exe.
Рисунок 8. - Пароль на базу данных из основной программы RTHemat.exe.

В тех случаях когда нет возможности посмотреть исходный код, пароль можно посмотреть в файле DatabaseMaintain.exe, начиная со смещения 0707Ch.

Рисунок 9. - Пароль на базу из файла DatabaseMaintain.exe.
Рисунок 9. - Пароль на базу из файла DatabaseMaintain.exe.

Пароль на базу данных DB7600, в некоторых случаях может быть MD7600. В принципе пароль за закрытую базу можно посмотреть программкой Access PassView от nirsoft.mirrorz.com.

Существует несколько разновидностей программы анализатора, а именно открытый и закрытый (смотри в конце текста). Акромя самих настроек, есть параметр который отвечает за открытие настроек реагентов.

Рисунок 10. - Параметр открытия\закрытия настроек реагентов.
Рисунок 10. - Параметр открытия\закрытия настроек реагентов.

Параметр находится в таблице SysSetting в поле CloseReagent. Значение поля равное единице говорит что параметры закрыты, а нуль - открыты.

Если программа анализатора перестала отвечать на события и зависла, то может такое случиться что при следующем запуске не сможет запуститься с ошибкой сети или базы данных. Для решения этой проблемы надо удалить файл BloodCell.ldb, который создаётся при открытии базы данных BloodCell.mdb. Внимание, удалять ТОЛЬКО файл с расширением .LDB. (Не забывайте делать резервные копии).

Около аппаратные процессы.

Изменения настроек и параметров в базе данных, изменение временных параметров не помогли справиться с ситуацией. При перезагрузке многие настройки возвращались в "первоначальные" состояния.

Есть достаточно интересный форум на medteh.info, в котором есть много интересной информации. Изучение пользовательской и сервисной инструкции также не помогло решить проблему, так как проблема оказалась достаточно уникальной. Был установлен сетевой снифер (PortMon) для просмотра пакетов порта RS-232.

Рисунок 11. - Порт монитор.
Рисунок 11. - Порт монитор.

Исследование логов и отчетов монитора показало следующее.

Рисунок 12. - Ошибка чтения на порту.
Рисунок 12. - Ошибка чтения на порту.
Рисунок 13. - Ошибка на чтения порту.
Рисунок 13. - Ошибка на чтения порту.

Монитор показывал ошибки чтения на порте COM 4.

Предметное изучение кода RTHemat.exe, показало что при старте программы идет чтение параметров с 4-го COM порта.

Рисунок 14. - Процедура чтения значений на порту.
Рисунок 14. - Процедура чтения значений на порту.

По адресу 01774Сh данные E807361700h занопил (операция NOP, код операции 90). После проведенной манипуляции пациент якобы ожил.

Рисунок 15. - Основное окно после процедуры "лечения" софта.
Рисунок 15. - Основное окно после процедуры "лечения" софта.

Однако праздник был не долгий, после промывки системы, при попытке произвести тест (аппаратная кнопка запуска теста), система не проводила тест, а включала ошибку тайм-аута теста.

Рисунок 16. - Тайм-аут теста.
Рисунок 16. - Тайм-аут теста.

Таким образом удалось только запустить систему но не заставить её работать.

Дальнейшее исследование аппарата привело к аналоговой периферийной плате, которая висит на COM4. На плате находится C8051F020, который и управляет всей периферией. На борту контроллера находится 64 Кбайта Flash памяти.

Рисунок 17. - Схема организации памяти C8051F020.
Рисунок 17. - Схема организации памяти C8051F020.

В этой памяти может находится не только программа управления периферией, но и данные о времени замены реагентов, которые и не читаются/перезаписываются.

В D:\RTHemat\FRTSYS находится файл NEWUP.exe, который предназначен для чтения\записи данных в аналоговую периферийную плату. Проведение теста показало, что тест, после рукопожатия, провалился.

Рисунок 18. - Провал теста аналоговой платы.
Рисунок 18. - Провал теста аналоговой платы.

При проведении теста аналоговая плата уходит в аппаратный стоп. Таким образом для повторного запуска необходимо отключение питания.

Рисунок 19. - Начало чтения пользовательских данных.
Рисунок 19. - Начало чтения пользовательских данных.

То же состояние, аппаратный стоп, получаем и при попытке чтения пользовательских данных.

Рисунок 20. - Ошибка чтения пользовательских данных.
Рисунок 20. - Ошибка чтения пользовательских данных.

Таким образом, нет возможности прочитать Flash память в контроллере на аналоговой периферийной плате. При попытке её чтения аппарат жестко зависает, требуется перезапуск питания.

На сейчас в поисках микропрограммы для контроллера, и по JTAG интерфейсу тоже. Если не получится обновить прошивку, придется менять аналоговую плату.

А начиналось все довольно прозаически ...

Финишная прямая.

Выше по тексту указывал что есть системы открытые и закрытые. Для того чтобы узнать какая система установлена необходимо:

  1. Войти под учетной записью инженера (Engineer), пароль 1001. (Настройки\Другое\Имя пользователя).
  2. Навести указатель мыши на кнопку "Налаштування" (Настройки) и одновременно нажать Ctrl-Пробел-ПравуюКнопкуМыши-ЛевуюКнопкуМыши.
Рисунок 21. - Вход в систему под учетной записью.
Рисунок 21. - Вход в систему под учетной записью.

Откроется новое окно в котором будет следующая информация.

Рисунок 22. - Окно с информацией о статусе системы.
Рисунок 22. - Окно с информацией о статусе системы.

Серийный номер, идентификационный код аналоговой платы (тут не указан), случайный код и статус. В данном случае статус - Система закрыта. Этот статус не позволяет на уровне пользователя читать или изменять данные в аналоговой плате. Для открытия системы необходимо ввести пароль. Пароль формируется из хэш значений указанных полей. В случае необходимости можно обратиться к разработчику программного обеспечения для получения пароля. После ввода правильного пароля система переходит в Открытое состояние и позволяет как читать так и перезаписывать пользовательские данные в аналоговой плате в программном интерфейсе, в том числе и обновлять данные по реагентам.

(D103-0-0000, AEQULV, b229591f-ef09c1f4-ee65931b-94493f52)

По большому счету можно написать генератор паролей по входным данным, однако такой задачи нет. Может в далёком будущем.