В моем возрасте еще рано писать мемуары, но воспоминания — вполне можно, тем более, что новые жизненные впечатления накрывают предыдущие и многие прикольные вещи уже не помню за давностью лет. 🙂
Сейчас хотелось бы вспомнить и зафиксировать прежде всего для себя самого мой самый крупный проект по реверсингу сотовых телефонов, который принес с этого наиболее ощутимые деньги.
Дело было около 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카드를 넣으십시오»