[Перевод] Получаем доступ к рабочему столу WinCE и запускаем Doom на осциллографе Keysight DSOX1102G
TL;DR: да, на осциллографе Keysight 1000 X-Series реально можно запустить Doom! Однако это непросто сделать.
![[Перевод] Получаем доступ к рабочему столу WinCE и запускаем Doom на осциллографе Keysight DSOX1102G [Перевод] Получаем доступ к рабочему столу WinCE и запускаем Doom на осциллографе Keysight DSOX1102G](https://habrastorage.org/webt/0c/gw/x-/0cgwx-u7swq4iv66nzbptgzhldo.jpeg)
Keysight DSOX1102G
Осциллограф должен иметь в своём арсенале любой уважающий себя энтузиаст-электронщик. Осциллографы, кратко говоря, позволяют вам изучать волны электрических сигналов в контуре, а цифровые осциллографы (digital storage oscilloscope, DSO) незаменимы тем, что могут найти редкие ошибки в сигнале, которые не распознает аналоговый осциллограф или мультиметр.
Тема моей статьи — DSOX1102G от компании Keysight Technologies (бывш. Agilent), из их недорогой линейки осциллографов, отличающихся неплохим соотношением цены к качеству по сравнению с продукцией конкурентов. Как и большинство их осциллографов, на этой модели работает встроенная ОС Windows Embedded CE 6.0 (также известная, как Windows CE или WinCE), но, как и в большинстве случаев применения WinCE, её интерфейс вы практически никогда не видите – он спрятан за специально сделанным интерфейсом для пользователя.
Этап 1: пробуждение
Когда в начале 2017 была запущена серия Keysight 1000-X, один из обзорщиков с Hackaday заметил, что способ сохранения данных на этих осциллографах иногда приводил к их падению и перезагрузке, и отметил, что перед загрузкой на экране на несколько секунд можно было увидеть указатель мыши. В его посте была гифка, где он сохраняет файл, вызывающий падение, и я заметил нечто странное на одном из кадров анимации – там можно было различить панель задач Windows сразу перед чёрным экраном с ошибкой. Интересненько!..

Выиграв свой осциллограф благодаря конкурсу Scope Month от Keysight, пару месяцев я не думал об этом, пока не наткнулся на экран с отказом самостоятельно. В моём случае я обнаружил, что заголовок Windows CE был виден поверх обработчика отказов осциллографа; перетаскивание заголовка оставляло за собой след, и в итоге подвешивало WinCE. Такое случалось очень редко, поэтому, наткнувшись на отказы впоследствии, я просто позволил обработчику просканировать файловую систему и перезагрузить ОС.
Однако меня это заинтриговало, и я хотел узнать большое о том, что происходит с лежащей в основе системы WinCE. Я обнаружил, что USB-порт осциллографа довольно чувствителен к ошибкам, и простое шатание флэшки в порту может привести к аварийному сбою. Однако этого было недостаточно для сбора нужного количества информации, поскольку это был ненадёжный метод.
Так начались мои поиски доступа к рабочему столу WinCE.
Сначала я попробовал чисто программное решение, пытаясь создать файл обновления прошивки .ksx (на самом деле это просто архив .cab), который бы смог завершить работу программы осциллографа и открыть Проводник Windows – не получилось. ПО осциллографа выдавало сообщение об ошибке, жалуясь на невозможность открыть файл. Оказывается, такое решение не сработало бы, даже если бы я заставил его загрузить файл обновления, поскольку ПО осциллографа не выходит на рабочий стол во время обновления. Встретив это первое серьёзное препятствие, я на время отставил в сторону любопытство и пользовался осциллографом по прямому назначению.
Этап 2: заглянем поглубже
Из-за своего любопытства однажды я решил посмотреть, сможет ли осциллограф считывать и записывать дискеты на 3,5″ (или, как говорит молодёжь, распечатанную иконку сохранения) через USB-порт – и он смог! Однако я заметил одну странную проблему; осциллограф аварийно завершал работу, если я оставлял дисковод в USB-порту при включении. Эврика! Я нашёл способ надёжно вызывать аварийный отказ.
Тут, к несчастью, меня поджидало второе серьёзное препятствие. Этот отказ при загрузке происходил, только если в USB-порт было включено единственное устройство — дисковод. Отказа не было, если я использовал USB-хаб, в который включал дисковод. Это означало, что мне придётся очень быстро переключаться между дисководом и USB мышью с клавиатурой. Спешка с целью как можно быстрее вынуть дисковод и воткнуть комбинацию из клавиатуры и тачпада в USB в процессе загрузки была утомительной и раздражающей. Мне нужно было решение получше – железячное решение.

Специальный переключатель A/B для USB, сделанный мною для быстрой замены устройств
Использовав старый USB-кабель, дохлый USB-хаб и DPDT-переключатель, я создал переключатель USB A/B, чтобы упростить и ускорить процесс переключения между устройствами. При помощи этого метода мне удалось попытаться установить контакт с ОС WinCE на долю секунды, пока панель задач была видимой на экране, и до тех пор, пока обработчик отказов не сломал мне всю малину. При помощи магии, заключённой в замедленной съёмке моего Samsung Galaxy S9, я смог определить, что могу отправлять последовательности нажатий клавиш в WinCE и она их обрабатывает – даже на заставке системы! Я смог получить информацию о системе, вслепую нажимая клавиши, и потом изучая отклик при аварийном отказе ПО осциллографа. Тут я столкнулся со вторым препятствием.
Возможность очень краткого взаимодействия с WinCE – это хорошо, но она была бесполезной, поскольку я не мог взять над ней управление до тех пор, пока обработчик отказов перезагрузит систему. Обработчик крепко держался за ОС, и никакая долбёжка по клавиатуре и Ctrl+Alt+Delete не пускали меня обратно в WinCE.
Этап 3: ищем точку опоры
И снова моё периодически играющее любопытство пригодилось, когда я решил использовать свой старый Sony Clie PEG-NX73V (наладонник на PalmOS от 2003 года) в качестве USB-привода. У него была функция импорта данных, позволявшая перетаскивать файлы на карту памяти точно так же, как на съёмный диск.
Точно так же, как и в случае с USB-дисководом, произошёл отказ системы, когда я включил осциллограф, не вытащив PDA. Однако на этот раз обработчик отказов решил, что файловая система PDA – это повреждённый раздел прошивки, и предложил загрузить обновление прошивки с внешней USB-флэшки.

Это поведение не было регулярным, иногда ПО осциллографа всё равно загружалось, и появлялось очень странное окно из WinCE с ярко-голубым указателем мыши, оставлявшим следы на экране. Однако в этом странном состоянии мне удалось оттащить окно ПО осциллографа InfiniiVision в сторону, и я попытался потыкаться с ОС. Но ПО осциллографа вело себя очень агрессивно и возвращало себе фокус каждый раз после клика вне окна. После некоторой возни со странно раскрашенной ОС я смог обойти её. Я не мог просмотреть файловую систему, поскольку не получалось надолго забирать управление от окна ПО осциллографа, но я смог вызвать диалоговое окно свойств системы, где было написано, что осциллограф основан на Windows CE 6.00, и у него есть 100 Мб RAM.

Затем я решил порыться на форумах EEVblog, где люди активно пытаются хакнуть осциллограф, чтобы открыть дополнительные возможности. Там я обнаружил, что ПО ищет файл infiniiVisionStartupOverride.txt в корне USB-флэшки, и если находит, то пытается загрузить с неё ПО осциллографа. И хотя, судя по всему, на самом деле прошивка не загружала ПО с флэшки, этот процесс прервал запуск ПО осциллографа, и тогда уже никто не забирал у меня управление ОС. С этого момента всё стало интереснее – обработчик отказов открывал окно Проводника, и введя в поле для имени файла «*.*», я смог начать рыться в файловой системе осциллографа и USB-флэшки! Именно это мне и было нужно для получения контроля над WinCE. Однако, я встретил очередное препятствие: осциллограф перезагружался через 60 секунд, из-за чего у меня не было много времени на рытьё в операционной системе.

Запрос на обновление прошивки DSOX1102G с диалогом выбора файла с флэшки

Менеджер задач Windows CE показывает запущенные процессы на экране восстановления прошивки
Скопировав несколько инструментов Windows CE, например, Windows CE Task Manager, я заметил два интересных процесса, которые были запущены, когда обработчик отказов ещё был виден — recoverInfiniiVision.exe и processStartupFolder.exe; судя по всему, первый был обработчиком отказов, не дававший мне доступ к WinCE после аварийного отказа ПО осциллографа. Прибив второй процесс при помощи iTaskMgr (бесплатная версия менеджера задач WinCE не даёт убивать процессы) я смог удержать осциллограф от перезагрузок, а прибив первый, я увидел чистый рабочий стол WinCE – и вот я внутри! К несчастью, мне не удалось восстановить панель задач, из-за чего ориентироваться в ОС было довольно неудобно.
Я создал на рабочем столе новую папку, чтобы открыть Проводник, и, наконец, смог заняться изучением файловой системы осциллографа. Этому очень помогла программа Total Commander/CE, имеющая встроенный текстовый редактор, которого не было в данной версии WinCE.

Копаясь в файловой системе при помощи Total Commander/CE (пока никакой панели задач)
Этап 4: полный контроль
Теперь, сумев добраться до небесно-голубого рабочего стола, для полноценного ощущения WinCE я должен был восстановить панель задач. Погуглив, полазав по Stack Overflow, я накидал небольшую программу для этого. Открыв её из Проводника, я получил полную версию рабочего стола WinCE! Наконец у меня был полный контроль над базовой ОС!

Свобода – полноценный рабочий стол WinCE на осциллографе!
С этого момента я начал рыться в файловой системе и смотреть, какие интересные инструменты там можно найти. Интерпретатор командной строки не хотел запускаться, однако я покопался в реестре и нашёл ключ HKEY_LOCAL_MACHINEDriversConsoleOutputTo, значение которого было 0xFFFFFFFF. Поменяв его на 0, я сумел сделать Command Prompt видимым на рабочем столе, поэтому я сделал ещё одну небольшую программу, которая занималась именно этим.
Всё шло хорошо, я сделал командный файл со всеми командами, необходимыми для того, чтобы убивать ПО осциллографа, обработчик стартовой папки, обработчик отказов, восстанавливать панель задач и разрешать запуск Command Prompt. Однако для открытия меню обработчика отказов требовался мой PDA, а это означало, что другие не смогут воспроизвести такой эффект.
Покопавшись дальше, я обнаружил, что как только появлялась заставка и начинали мигать светодиоды на панели, WinCE начинала обрабатывать нажатия клавиш даже без устройства, ронявшего ПО. Нажатие win+U подвешивало осциллограф, поскольку этим я открывал меню Пуск и выбирал опцию Suspend (и у ОС не было возможности вернуть после этого контроль, поскольку у осциллографа была только кнопка выключения питания). Помня это, я переименовал свой файл в a.bat, чтобы его имя было проще набирать, и попытался запускать его при загрузке через win+R, команду usba.bat и нажатия Enter. Но осциллограф в результате просто показывал заставку на экране, хотя в фоне WinCE была жива, и я просто не мог видеть, что там происходит. Оказывается, что обработчик отказов был необходимым компонентом для демонстрации рабочего стола ОС, и мне нужно было просто добавить в командный файл несколько строчек для запуска и последующей остановки обработчика отказов. Добавив эти последние штрихи, я смог (полуавтоматически) загружать осциллограф прямо до появления рабочего стола, используя только USB-флэшку, мышь и клавиатуру!
Этап 4: Да, на нём запускается DOOM!
Получив доступ к WinCE, я смог, наконец, ответить на вопрос: «Запускается ли на нём Doom?» И, как оказалось, реально запускается! После запуска осциллографа на это ушло полтора года, но до этой вехи я, наконец, дошёл.

Это не обман: на осциллографе Keysight 1000 X можно запустить Doom!

Doom II работает на моём осциллографе DSOX1102G! (3 кадра в секунду)

Запуск Doom в окошке размером 320×240 позволило выжать достаточно кадров в секунду для игры. Посмотрите, какая палитра цветов!
В следующей статье я ещё немного поиграюсь с этой легендарной видеоигрой на железяке, которая никогда не предназначалась для игр.

Doom в действии в разрешении 320×240, 256 цветов! На осциллографе!
Файлы для скачивания
Я выложил файлы, которые могут вам понадобиться для того, чтобы попробовать то же самое на своём осциллографе – но учтите, я не отвечаю за его превращение в кирпич или что-то ещё неприятное! Я проверял всё это только на своём DSOX1102G, но подозреваю, что другие модели серии 1000 X и другие осциллографы от Keysight, обладающие функцией восстановления прошивки, тоже могут сработать. Прошивка осциллографа сделана так, что вся WinCE запускается в оперативной памяти и не сохраняется после перезагрузки, поэтому все изменения в ОС, ломающие систему, не превратят осциллограф в кирпич (файлы с прошивкой лежат в директориях NAND-флэшки, которые нельзя открыть через Проводник, а можно лишь набрать по имени).
Флэшку необходимо будет отформатировать в FAT или FAT32, и распаковать в её корень zip-архив Scope Liberator. Инструкции содержатся в readme.txt.
Если вам интересен исходный код вспомогательных программ, которые возвращают панель задач и интерпретатор командной строки, я их тоже выложил.
Источник
На съемках «Народа против Гориллы Гродда» заметили намеки на появление Короля Соломона
Premium Collectibles Studio открыла предзаказ на статую ксеноморфа из фильма Чужой высотой 124 сантиметра
Серии Crash Bandicoot исполнилось 30 лет, но Xbox практически никак не отметила юбилей
Градостроительный симулятор XIRI Oasis Cities посвящен выживанию города будущего
Разработчики Moss закрыли студию после релиза игры на всех платформах
Авторы Fable пообещали сделать боевую систему глубокой вместо копирования старых RPG
По данным СМИ, Sony забрала у студии Kojima Productions движок Decima
Российская инди-студия анонсировала градостроительный симулятор XIRI Oasis Cities