IMPORTOZAMESHENIE: как устройство училось говорить по-русски

02 08 2020

Введение

Многие поймут меня, если я скажу, что большинство оплачиваемых проектов начинается с вопроса “Сколько будет стоить %очень_широкое_определение%?”. Я постараюсь описать процесс таким образом, чтобы вы могли почувствовать, сколько неопределенностей встречается при решении подобных задач. Итак, %очень_широкое_определение% - оказалось переводом на русский язык устройства. Если говорить грамотно - русификацией.

Неизвестный науке зверь

Итак, какой же девайс мы будем рассматривать? На входе было известно, что это устройство принадлежит к группе устройств, предназначенных для проведения конференций. Из подобных устройств мне было на тот момент уже известно два вида - микрофон с “мозгами” в виде коробки и сенсорной панели и какое - то серверное оборудование. На этом моменте становится вполне очевидным то, что мне может попасть в руки два типа устройств - какое-то на линуксе (к которому возможно получить доступ по сети) либо из которого придется читать прошивку. Исчерпывающая информация, не правда ли?

Далее я получаю фотографию модульного устройства с вопросом: “Какую плату надо тебе прислать, для того, чтобы провести русификацию”?

Внимательно смотрим на изображение и пытаемся ответить на вопрос.

Если вам удалось выбрать требуемую плату, то выйдите вон, потому что ответ на данный вопрос может быть только один - “Вы шо, упали?”. Действительно, слева внизу мы можем наблюдать трансформатор, справа вверху тоже какая-то силовая часть, справа внизу - какой-то интерфейс, в центре под модулем видим uart (делаем земной поклон, крестимся - слава богу!) и на модуле фиксируем взглядом длинные микрухи (пахнет памятью) - скорее всего - рядом МОСК устройства. Исходя из этого формируем ответ - девайс нужен целиком, ибо мы будем пытаться ковырять его через UART, соответственно при загрузке он будет проверять все ли к нему подключено и требовать везде определенные уровни напряжения, которые обеспечивает силовая часть (потому что подавать ему напругу и эмулировать интерфейсы - нам нечем, да и займет это в триста раз больше времени :D).

Итак, к нам в гости приезжает сей крокодил.

Доступ

Прежде чем начать тыкать в беднягу уартом, надо было забутить его и посмотреть, что он вообще умеет и что из себя представляет (производитель склонировал его у другого производителя и из информации о данном устройстве - есть крайне скудная страничка в интернет-магазине и один обзор на ютубе на китайском). Вся прочая информация, видимо, добывается при помощи переписки с поставщиком.

У устройства был сенсорный (резистивный, тьфу!) дисплей, необходимо взглянуть ему в лицо! (Фото немного опережает события). Здесь мы видим окно настроек.

Также были обнаружены функции назначения переводчика, всякие настройки, изменение названий камер и их позиции, аудиоплеер и прочая хрень. Хочу обратить внимание, что для доступа к настройкам было необходимо ввести пароль. Пароль был угадан - 123456. Устройство предложило вставить флешку и скопировать свой конфиг на нее (да, оно поддерживает монтирование флешки для записи звука и/или проигрывания треков). В конфиге был пароль производителя (нам не потребовалось его вводить куда-либо, но он отличался от 123456).

После осмотра морды лица данного товарища, был осуществлен ребут и подключение через уарт (tx, rx, gnd - в таком случае питание не подключается, так как устройство запитано). Во время бута, судя по логам, он поднял какие-то сервисы и веб. В результате загрузки система представилась - Friendly ARM и дала права пользователя root. В принципе, на этом моменте, я закатилась от смеха под кровать.

Выкатившись, в файловой системе мы обнаружили папочку с названием, похожим на на название нашего девайса, но отличающимся некоторыми цифрами (они заливают во все модели одну и ту же прошивку!?). В папочке лежал конфиг, который нам предложили скопировать на флешку, картиночки и бинарь. Вся папочка была успешно скопирована на флеш и изучена.

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

Гуй

Итак, часть гуя сие чудо хранило в виде PNG - файлов, из-за чего, мне пришлось просидеть несколько дней в paint net. Всего в папке с бинарем было 253 графических файла.

Подводные:

На китайском динамические элементы расположены по горизонтали, на английском - по вертикали.

Градиенты на кнопках - пришлось аккуратно копировать вертикальные участки и растягивать их, замазывая текст, ориентируясь по пикселям. На текст можно не обращать внимания, потому что китайцы сами наделали в английском меню ошибок и вкл и выкл могли обозначить как open close, мы же старались приблизиться к реальности максимально точно подбирая смысл действия, которое привязано к динамическому элементу (фух).

В общем и целом - заседания в пенте.

Далее гуи лечились подменой в папке на сделанные мной, с соответствующими именами через уарт.

Бинарь

Бинарь бодро распаковался, как бы приглашая сделать аппаратные закладки :D Хотя, зачем, если там был целый рут, который давал возможность свое ПО накатить (делать это мы, конечно не стали, так как мы люди порядочные :)).

С учетом того, что прошивка была скопирована китайцами, допилена под китайский язык, и, вероятно, побывала в руках десятков людей в ней были следующие страшные вещи:

  1. Часть гуя отрисовывалась через бинарь - даты, ошибки, некоторые динамические элементы.

Патчилось это путем вычисления эквивалентного китайской фразе количества бит и последующим вставлением эквивалентного количества бит кириллицы :D Всего было накатано 2000 патчей.

Особый гемморой представляла собой клавиатура, которая была приделана китайцами отдельным модулем и являлась подобием T9 (слова вводятся на латыне, а в окне предлагаются подходящие иероглифы).

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

А здесь переполнилось и в соседнюю локаль вылезла буква:

Заключение

Проект оказался крайне милым, сбалансированным по сложности/скучности. Ну и результатом данной работы стал пак русифицировнной прошивки. Но эта железка - просто писец, все крутится от рута, все сервисы от рута, все дампится… ААА....

Поэтому, просто полюбуемся его фотками из рабочего процесса: