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

Телефоны на спредтруме это круто, однако современные кнопочники на этом процессоре, к сожалению, используют компрессию LZMA и что-то пропатчить в них иногда проблематично. Плюс у них крайне мало флэш памяти для написания каких-то сложных патчей. Поэтому я время от времени качаю прошивки для телефонов из своей школьной юности и ковыряю их в IDA Pro, чтобы не только иметь доказательную базу для своих статей, но и просто попытаться на них что-то запилить. Одним из таких стал легендарный Samsung SGH-C100.
Модель 2003 года базировалась на чипсете Skyworks, который условно можно назвать братиком Neptune LTE в Motorola C350 и E398 (используется идентичное ядро ARM7TDMI, только работающее на более низкой частоте). C100 стал настоящей легендой благодаря поддержке загрузки контента (хотя настоящей ФС в нём особо и не было), Java-приложений, а также очень крутому UFB-дисплею с разрешением 128x128 и конечно синтезатору Yamaha, который давал ту самую полифонию.
В процессе изучения телефона я наткнулся на то, что Samsung почему-то выкладывала прошивки вместе с map-файлами линкера. Для тех кто не в курсе, процесс компиляции прошивки упрощенно происходит в два этапа:
Компиляция отдельных модулей в объектные файлы — т.е файлы с расширением.o. Объектные файлы содержат в себе как код с данными, так и информацию о символах (функциях и переменных) в них, а также зависимостях от других модулей.
Линковка набора объектных файлов в единую прошивку. Здесь специальная программа — линкер, анализирует все входные объектные файлы и собирает из них готовую программу, исправляя ссылки на зависимости на конкретные адреса в исполняемом файле.
Так вот, с помощью специальной опции можно попросить линкер выдавать текстовый .map файл для дальнейшего анализа секций, таблицы символов и помощи при отладке кода. Как вы уже поняли, в этом файле хранятся текстовые имена всех функций и глобальных переменных в прошивке, а также карта памяти процессора:

Это настоящая находка для реверсера, поскольку по именам и коду большинства функций можно легко понять их предназначение, список аргументов (тут же все таки Plain-C) и просто понять принцип работы MMI (оболочки) в прошивке. Я написал парсер, который импортировал map-файл в базу IDA Pro и теперь у нас есть полностью отреверсенная прошивка для C100, которую можно патчить и моддить вдоль и поперек :-)

Так что делюсь базой и с вами. Базу свободно можно использовать как референс при реверсе других телефонов на Skyworks'ах с помощью поиска по паттернам, а также для реверса более поздних Swift'овских телефонов, но с ними надо поковыряться подольше. Знаю что меня читают инженеры, так что может кто-то тоже вдохновится и пойдет моддить свой C100? :-)

Поковырял бы сам и запили статью, но я чет купил пару кабелей для C100 и все оказались нерабочими :(
База для IDA Pro:
https://disk.yandex.ru/d/EABYXSvV5OOCwg
Немного моих статей по теме реверса и запуска программ на телефонах:
https://habr.com/ru/companies/timeweb/articles/910498/
Комментарии (3)

smart_alex
30.01.2026 18:03Есть такая глобальная проблема — цивилизация генерирует огромное количество «устаревших» смартфонов. Сами по себе это потрясающие вещи — там достаточно мощная начинка, хорошие дисплеи, куча датчиков и интерфейсов... И это всё отправляется в помойку, а в худшем случае вообще просто загрязняет планету.
Так вот, если бы нашёлся такой богатырь, который на системном уровне решил проблему «второй жизни» старых гаджетов, то благодарность человечества не имела бы границ.
Предлагаю вам подумать на эту тему.
monobogdan Автор
Такс, ну два поста в день это конечно уже перебор немного, но надеюсь никто не обессудит) Дело в том, что после статей про Siemens и Motorola со мной связываются инженеры, которые разрабатывали софт для этих телефонов (бывшие сотрудники Тэлмы) и просто олдовые моддеры-реверсеры, которые стояли буквально у истоков моддинг-сцены телефонов нулевых. Ребята не только рады видеть, что кто-то юный чтит их труд и сам интересуется темой реверс-инжиниринга, но и сами иногда включаются в работу: тот же Ilya_ZX реверсит кнопари на Spreadtrum, EXL с MotoFan портировал Doom на RAZR V3i, E398 и C380, а Azq2 так вообще пишет полный эмулятор чипсета Infineon S-Gold. Поэтому моддинг сцена хоть и ушла в "андер", всё равно остаётся актуальной :)
Поскольку эта тема нашими общими усилиями снова набирает популярность, я делаю всё для того, чтобы заинтересовать моддингом и реверс-инжинирингом как можно больше ребят - и прикладываю базу. А для тех кто не хочет заниматься моддингом, но интересно узнать как работала прошивка любимого телефона "под капотом" это будет просто интересный материал для изучения.