bbsc Маститый телефонист С нами с: 09.06.2003 Плодовитость: 300
Предупреждения: Рейтинг
Подано 77 (64/13) голосов
|
FAQ начинающего прошивкокопателя.
|
Мне уже четвертый или пятый раз присылают письмо с просьбой объяснить, с чего начинать "прошивкокопание".
Меня это очень радует, ибо не перевелись люди, которые считают себя ЛЮДЬМИ, а не кем-то иным, верят в свои силы, ставят себе задачи и пытаются их решать.
Как известно, ламер - не тот, кто чего-то не знает, а тот, кто знать НЕ ХОЧЕТ. Иначе - все мы ламеры, кроме Бога.
В связи с этим, открываю этот топик. Предлагаю его прибить вверху (на усмотрение модератора), а по мере накопления инфы - сделать соответствующий FAQ.
Начинаю с инфы, которой со мной в свое время поделился Skylord (за что ему большое спасибо) и которую я нашел сам и использовал для себя.
Предлагаю всем желающим меня поправить, если я в чем-то ошибся и дополнять, если есть какие-то дополнительные сведения.
Итак, начнем.
Телефоны Siemens собираются на специализированном микроконтроллере EGOLD, ядром которого является процессор типа c166. Конкретное поколение процессора мне неизвестно, в некоторых случаях приходится учитывать систему команд c167.
Информацию по архитектуре, системе команд и использованию процессора (на английском языке) можно взять на http://www.infineon.com/c166/. Лично я пользуюсь файлом http://www.infineon.com/cmc_upload/documents/039/947/sj2003551.pdf.
Раньше на этом же сайте можно было взять простенький 16-разрядный ассемблер/дизассемблер adis16x. Теперь его там нет (убрали, или я просто найти не могу - не знаю). Эта программа поможет вам написать небольшой патчик, сохранить его в нужном формате, откуда его легко трансформировать в формат Vklay. Она же сможет дизассемблировать "на лету" небольшой кусок кода, когда вы не хотите запускать Иду. Нужность этой проги для прошивкокопателя очевидна, занимает она всего несколько десятков килобайт, поэтому я с удовольствием вышлю ее любому, кто возьмется выложить ее в общедоступном месте.
Для серьезного анализа прошивки понадобиться интерактивный дизассемблер IDA. Нужна полная версия, которая поддерживает процессор c166. Ссылку на полную версию не публикую по понятным причинам, ее достаточно легко найти, во всяком случае - на версию 4.30, которая вполне подойдет для анализа прошивки.
Несколько слов о фуллфлеше (ФФ) и адресуемой процессором памяти.
Как известно, размер ФФ для S/Me45 составляет 6 Мбайт, адресуемая память процессора - 16 Мбайт.
ПО телефона считает, что первые два мегабайта ФФ находятся по адресам с 0x800000 по 0x9fffff, остальные 4Мбайта - с адреса 0xc00000 по 0xffffff.
В связи с особенностями дешифрации адресов в телефоне, процессор "видит" первые два мегабайта ФФ также и по адресам с 0xa00000 по 0xbfffff, что обычно используется программами-флешерами для чтения/записи с 0xa00000 по 0xffffff - получаются те же 6 Мбайт, очень удобно .
Однако, для анализа прошивки такой подход не есть правильным и мы должны помнить о действительном положении вещей, когда беремся за дизассемблер .
Кроме того, что называют "флешем", в телефоне еще имеется RAM и ROM, которые находятся в пределах первых двух мегабайт адресного пространства процессора.
К сожалению, в настоящее время для S/Me45 нет ПО, позволяющего считывать RAM с работающего телефона. Что касается ROM, то его содержимое могут считывать некоторые флешеры, в частности - Ksie, если ему указать нужные адреса. В ROM находятся некоторые процедуры, которые используются любой версией прошивки телефона при работе, поэтому очень полезно иметь содержимое ROM при дизассемблировании прошивки.
Таким образом, для анализа прошивки нам понадобится:
1. Первые два мегабайта 16-мегабайтного фуллфлеша, слитые с помощью Ksie.
2. Собственно 6-мегабайтный фуллфлеш телефона.
Подготовка бинарного файла для дизассемблирования (без задания маппингов для IDA):
1. Берем WinHex, или что там нам нравиться.
2. Делаем файл размером 16М.
3. Берем KSie и сливаем первые 2Мбайта полного 16Мбайтного флеша. Обращаем внимание, что там может быть 16 лишних байт в начале, которые KSie дописывает сама для себя. Эти байты удаляем для получения соответствия адресов.
4. Кладем эти 2Мбайта в созданный файл, начиная с 0.
5. Берешь 6-мегабайтный ФФ телефона.
6. Кладем первые 2 мегабайта от ФФ в созданный файл по адресам 0x800000 по 0x9fffff.
7. Кладем оставшиеся 4 мегабайта от ФФ в созданный файл по адресам 0xc00000 по 0xffffff.
8. Натравливаем Иду на полученный файл, не забывая правильно указать тип процессора .
Дальнейшие действия зависят от обстоятельств и ограничиваются только вашей фантазией . |
____________________________
...from your horror I'll create a dreem... |
|