Небольшой подарок моддерскому коммьюнити Пикабу от меня!
Всем снова привет :) Думаю многие пикабушники знают, что одно из моих хобби - реверс инжиниринг ретро телефонов, их хакинг и попытки впихнуть невпихуемое. Полгода назад в рамках серии статей я с нуля взломал неизвестный кнопочный телефон, отреверсил прошивку и написал для него бинлоадер (загрузчик нативных программ) и первую программу для него - игру змейку!
Две недели хакинга... это было действительно круто!
Однако телефоны на спредтруме это круто, но современные кнопочники на этом процессоре, к сожалению, используют компрессию 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:
Немного моих статей по теме реверса и запуска программ на телефонах:
















