Про телефоны и Северную Корею (КНДР)

В моем возрасте еще рано писать мемуары, но воспоминания — вполне можно, тем более, что новые жизненные впечатления накрывают предыдущие и многие прикольные вещи уже не помню за давностью лет. 🙂

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

Дело было около 6-7 лет назад. Я тогда написал и выложил в общий доступ небольшую программку, которая позволяла распаковывать и упаковывать обратно языковые пакеты в прошивках сотовых телефонов Siemens. В принципе, в этом не было ничего особо сложного — использовался словарный алгоритм сжатия типа LZ78/LZW: для каждого языка хранился словарь, а каждая строка состояла из ссылок на элементы словаря — точные детали уж не упомню. Все это было оптимизировано для использования на 16-битных процессорах Siemens C167 — данные хранились 16-ти килобайтными сегментами для простоты адресации и все такое. Ассемблерный код распаковщика, достающего нужные строки по запросу, был достаточно компактным и не менялся начиная с моделей телефонов C35/S35 вплоть до заката самой компании, когда ее продали BenQ. А может и сейчас в каких-то остатках Infineon’а, на которых китайцы клепают свои дешевые телефоны, это используется. Менялся только формат заголовка (иногда даже между прошивками в одной модели) и поэтому в своей программе я сделал возможность задавать через конфиг разные варианты моделей телефонов и их прошивок. Мой алгоритм распаковки был полной калькой с Сименсовского, реализованный на VisualBasic. Упаковку пришлось писать уже самому, но так как программист из меня всегда был вполне посредственный, запаковывал он несколько хуже оригинального. 😉

Писал я все это для личного развлечения и забавы ради, однако, как это обычно и получается, если что-то делаешь более-менее неплохо, то рано или поздно найдутся люди, желающие за это заплатить. 🙂 На меня вышли сотрудники из небольшой фирмы по ремонту сотовых телефонов, объяснили их ситуацию и попросили помочь. А ситуация была в том, что к ним обратились представители КНДР и заказали сделать им телефон с интерфейсом на корейском языке. В Северной Корее GSM связь тогда только появлялась, а телефоны выдавали только чиновникам и гос.служащим. При этом все аппараты, естественно, были на английском языке — то бишь языке не то что потенциального, а реального противника, использовать который нормальному северо-корейскому партийному чиновнику конечно же зазорно. 🙂 Южно-корейские телефоны их тоже не устраивали — то ли язык там чем-то отличается, то ли в принципе не хотели принципиально взаимодействовать с «южанами» — у них там в КНДР с этим строго. 🙂 Так или иначе, но тех, кто решит им этот вопрос искали они у нас в стране. Я, конечно же, согласился. Хотя сейчас, по зрелому размышлению и умудренный опытом, понимаю, что денег попросил неприлично мало. С другой стороны — был я тогда еще несмышленым студентом, а работа была достаточно небольшая и в удовольствие. 🙂

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

С изображениями иероглифов было уже сложнее. Европейские прошивки имели слишком маленький размер символа — иероглиф туда просто не помещался, а ковырять из-за этого код было слишком долгим. Тогда я взял китайскую прошивку — в ней все как раз было на иероглифах и поэтому знакоместо было вполне здоровенным (16х12 пикселов, если мне память не изменяет). Но с ней возникла другая проблема — не было места под дополнительные изображения символов. Пришлось немного извращаться: заменять китайские иероглифы корейскими, а потом соответствующим образом подменять символы в тексте строк. Делать это пришлось еще и потому, что телефоны Siemens не поддерживали полноценный unicode. У них были своеобразные кодовые страницы — если в тексте строки встречается специальный служебный символ, то код следующих после него прибавляется к фиксированному (зашитому в прошивке) основанию и получается итоговый юникодовый символ, под который уже ищется изображения и который выводится пользователю. Так вот, для частей таблицы unicode с корейскими иероглифами таких заранее зашитых служебных символов для переключения не было.

В общем, проблему с местом удалось успешно решить, тем более, что китайские иероглифы, которые мы меняли, как я понял, лексически отличаются от корейских — обозначают целые слова, а не слоги (как в корейском), поэтому их намного больше и наши корейские заняли лишь часть имеющегося места… Кстати, сами картинки иероглифов корейцы тоже нарисовали очень быстро. Я сказал им для каждого использованного в строчках символа сделать bmp-файл с названием в виде кода этого символа в unicode и его изображением 16х12 — справились они с этим очень оперативно.

В общем-то, моей задачей было собрать все это воедино. Для редактирования языковых пакетов у меня уже была готовая программа. Я написал еще одну, которая вставляла в прошивку изображения корейских иероглифов на место китайских и соответствующим образом корректировала файл языкового пакета. В итоге «кореизация» китайской прошивки делалась буквально в три-четыре клика: достаточно выбрать нужные файлы/каталоги и нажать «Start».

Первый и последний раз, когда я видел самих корейских заказчиков был как раз на сдаче работы. Их было, если правильно помню, трое — один «главный» и двое русскоговорящих. Они очень хотели получить не просто переведенную прошивку, а возможность потом ее еще и менять. Сначала я не хотел отдавать непосредственно софт, а потом плюнул и все-таки отдал — сама программа для редактирования языковых пакетов и так лежала в интернете, а программа для замены китайских иероглифов корейскими все равно писалась специально для них и больше бы мне не пригодилась (да и представляла собой по сути надерганные из других моих же программ куски). Больше после этого я не видел ни этих корейцев, ни саму фирму, которая это заказала. Хотя вру — в фирме этой я потом случайно оказался с другом, чинившем там сотовый телефон. Работают люди как и раньше…

Вот такой вот любопытный опыт. Вряд ли сейчас кто-то  в КНДР ходит с телефоном с моей прошивкой (все-таки на данный момент эти телефоны сильно устарели), но когда-то — ходил и сознание этого греет мне душу — я люблю делать что-то, что имеет зримый и конкретный результат. Вряд ли они врали про всю эту тему с северной Кореей: у южной и своих телефонов хватало — им нет смысла нанимать русских программистов для таких хитрых переделок. А язык натурально корейский — его таким даже Гугл опознает. 🙂 Вот, скопировал пару фраз из языкового файла:
«우선권망»
«PIN을 입력하십시오:»
«SIM카드를 넣으십시오»

Минифон от Мегафона — 1:0 в их пользу

Отечественный «Мегафон» в плане интеллекта и фантазии по покупке китайских OEM’ных моделей телефонов и продажи их на территории нашей страны с большим перевесом обходит остальных операторов. Сначала был «бабушкофон», теперь — «минифон».

Обзоры с большим количеством фотографий — тут или тут. В тезисах: крохотный по размерам и вполне современный по внешнему виду телефон с функциональностью телефона, а не медиа-комбайна (т.е. он только звонит и рудиментарно работает с SMS), отдают за 500 рублей в офисах Мегафона. Платишь 500 рублей, получаешь телефон с sim-lock на самого Мегафона, SIM-карту с понравившимся тарифом (который в 90% случает — О’Хард) и 30 рублями на счете, а также 165 бесплатных минут местной связи (в Москве, в регионах по разному, иногда и сильно больше). С точки зрения экспертов, простых пользователей и меня лично — это просто хит. Я взял уже себе и окружающим — всего в количестве 4 штук. Думаю пойти и взять еще, а то многие уже вопят на форумах, что комплекты кончаются. 🙂

Немного еще личного мнения и впечатлений. Качество сборки — выше всяких похвал (Нокия с ее облезающей краской и затирающимся пластиком позавидует). Громкость динамика и качество работы микрофона — хорошие. Клавиатура — отличная: резиновые кнопки с тугим ходом, «кликом» и далеко друг от друга разнесенные — в кармане случайно не нажимаются даже без блокировки клавиатуры и если карман забит еще кучей вещей. О функционале говорить бессмысленно — его нет. Но это наоборот несказанно радует: когда пользуешься старым телефоном, все время чувствуешь его ограничения — Java вроде есть, но OperaMini «вылетает»; фотоаппарат вроде есть, но плохой; mp3-плеер есть, но тихий; GPS есть, но спутники ловит долго; и так далее. А когда функционала нет совсем (при этом телефон не стыдно рядом с собой на стол положить) — ни о чем этом не думаешь. 🙂 Сознание свободно и ничего не напрягает… Ну и опять же — при всем при этом, аппарат совершенно не жалко потерять. При такой-то цене! Вообще, по сути единственный его реальный недостаток — разъем для зарядки. Он выглядит как miniUSB, но с перепутанной полярностью (1 и 5 пины поменяны местами), из-за чего обычные кабели miniUSB использовать для зарядки телефона невозможно, а если не дай Бог вставить его комлектную зарядку в какой-нибудь прибор, то этот прибор, соответственно, тут же сгорит к чертям. Сие не есть гуд. Народ в Инете уже начал перепаивать родной разъем на стандартный, но это геморрой…

Однако, все вышенаписанное — лирика. Перейдем к технике и конкретике. Аппарат (как, кстати, и «бабушкофон») произведен для Мегафона китайской компанией Umeox, модель называется V158 и построена на супер-дешевой платформе Infineon ULC2 (чип модели 7880), ноги которой растут в старые-старые Сименсы (очередная реинкарнация E-Gold’а), что доставляет и наводит на размышления о тщете всего сущего. 🙂 Ну и ностальгия, само собой: я когда содержимое памяти минифона в HEX увидел — чуть не прослезился — оказалось, что еще помню команды микроконтроллера Siemens C167 даже в шестнадцатеричном виде… Но что-то я опять на лирику и слюни/сопли съехал. 😉

В miniUSB разъеме кроме зарядки ничего интересного нет. Доступ к последовательной консоли находится под наклейкой с IMEI под батарейкой — просто контактные площадки TX, RX, питание и земля.

Для подключение подойдет любой Serial-TTL конвертер — я использовал старый USB-кабель от мобильника. Собственно, в отсутствии необходимых аксессуаров, тупо приклеил проводки изолентой и зажал батарейкой. Работу консоли можно проверять в любом терминале (скорость 115200, параметры 8N1) — телефон должен откликаться на AT.

А теперь о печальном: на момент написания данного поста бесплатного метода разлочки телефона не существует (при попытке вставить чужую симку аппарат говорит «Только Мегафон»).  Предыдущие версии ULC2 успешно разблокируются в соответствии с данной инструкцией и описанными вот тут утилитами: http://forum.gsmhosting.com/vbb/showthread.php?t=695556. Собственно, утилита работает и с этим телефоном (используется стандартный дебаг-режим, который не поменялся еще с тех пор, как существовали сами телефоны Сименс), только не работает вход в test mode через нажатия * + # + <кнопка power>. Нужно включить телефон (кабель, естественно, должен быть подключен и последовательная консоль — нормально работать), запустить программу, перейти в меню «Settings»-«Phone tool», указать номер порта и скорость 115200, потом в основном окне сделать то, что написано по указанной выше ссылке после основной инструкции: нажать кнопку «V24 AT# On», потом выбрать в меню рядом «ptest_mode», потом снова нажать «V24 AT# On», потом — «Reset» и телефон перезагрузится в тестовый режим — на экране будет надпись «Test Poweron!», а нажатие кнопки «Update info» в программе выдаст в окне следующее:

Connection Test: OK
Prod. testmode: Yes
Target SW Ver: 04.19.00:18.26.18:08.09.00:ULC2GL
Target EEP Ver: 12
RF Band Support: 900 & 1800Mhz

Собственно, все бы хорошо, но функции блока «Security» не работают в принципе — прошивка аппарата более новая, чем поддерживается программой, так что ни разлочить, ни сменить IMEI не получится… Однако, перспективы есть: последние версии утилиты SagemEG уже по заявлениям производителя поддерживают последние прошивки для E-Gold’а, а значит через некоторое время появится и бесплатный аналог — это как пить дать.

В любом случае, Мегафону и Umeox’у можно смело засчитать балл в плюс: при такой стоимости телефона вряд ли кто-нибудь кроме любителей (вроде меня) захочет заморачиваться и тратить либо время, либо деньги на разлочку. Делалось бы это через основной разъем телефона по обычному кабелю USB — тогда еще куда ни шло. А так, как это есть и будет — на фиг никому не сдалось. Ну и в любом случае — респект и уважуха Мегафону за креатив.

И напоследок еще пара вещей, вычитанных в интернете, чтобы не забыть:

1) Защитный код телефона — 0000.

2) Нажав *### в режиме ожидания, можно попасть в простенький нетмонитор и посмотреть информацию о текущей соте и т.п.

Прошивки телевизоров Samsung

Мечтая о новом телевизоре читаю тему: http://forum.ixbt.com/topic.cgi?id=62:15456

Хочется модельку типа 46B652, чтобы был DLNA и можно было на фиг убрать комп-который-типа-медиа-центр. Пусть даже глюки есть при чтении файлов… Но не суть. Суть в том, что в телевизоре — Linux и значить можно/нужно все это ковырять. Хотя телевизора еще нет, но в поисках того, как бы покачественнее поотлынивать от подготовки к поступлению в магистратуру, зашел в дебри Самсунговского сайта и скачал последнюю прошивку (ver.T-CHL7DEUC-2001.0), чтобы посмотреть, как это вообще со стороны выглядит. Выглядит как несколько файликов — образы (appdata.img.enc и exe.img.enc) и, судя по всему, загрузчики этих самых образов (ELF’овские бинарники снаружи, а смотреть внутри было неинтересно). Образы — зашифрованы, но шифрование — обычный XOR со строкой. Какой в нем смысл — загадка, ведь простой человек все равно не сможет с этими образами ничего сделать, а для имеющего хоть минимальный опыт в реверсинге, XOR поверх файлов — это какое-то неуважение и издевательство. Особенно учитывая то, что «пароль» считывается просто глядя на содержимое файлов — как и полагается для типичных image’ей — в них полно нулей, поверх который, будучи отXORенным пароль лежит открытым текстом. 🙂 Пароль — T-CHL7DEUC.

Поискал в интернете — найти простой программки для разXORивания (чтобы тупо брала строку и проходилась ей по всему файлу) не смог. Написал сам на VB.NET, благо это единственный desktop’ный язык, на котором я могу что-то сделать. 🙂

РазXORил образы. appdata — SquashFS, exe — FAT16. Почему так? Никогда не видел этого на Линуксовых девайсах, ибо априори лишено смысла. Но так есть. В SquashFS всякая фигня типа подготовленных сеток каналов для стран и картинок интерфейса. Самое интересное — виджеты и весь их API. Даже документации не надо — все прилично откомментировано и много примеров. Пиши — не хочу. В FAT16 же наоборот — хардварные библиотеки (so’шки), телевизионный модуль для ядра Линукса (samdrv.ko), всякие EDID’ы для DCC и здоровые файл exeDSP (ELF), который запускается из прилагающегося rc.local. Судя по названию — не иначе, как что-то обслуживающее встроенный медийный процессор.

Какие выводы в целом? Самсунг не стал доверять пользователям обновлять все до самых корней. Очевидно, что и ядро, и загрузчик все время остаются теми же.  Из обновляемой прошивки подгружаются только модули ядра и библиотеки. С одной стороны — очень правильно. Уверен, что в случае убийства телевизора прошивкой, к нему можно будет достучаться по банальной последовательной консоли. С другой стороны, это значит, что базовые вещи — загрузчик и ядро — нужно делать сразу такими, чтобы возможность из обновлять даже не потребовалась за время срока поддержки девайса.

Что со всем этим делать дальше — ХЗ. Просто расковырял для самоудовлетворения. Реальный результат только один — написал программку для быстрого разXORивания. Пригодится еще…

Для захода внутрь образа FAT16 использовал файл-менеджер Altap Salamander. SquashFS поленился копировать в Линуксовую виртуальную машину и тупо разжал через скомпилированные под cygwin squashfs-tools. Они вместе с программкой для разXORирвания — во вложении.