eXeL@B —› Вопросы новичков —› Исследование прошивки для АРМ процессора |
Посл.ответ | Сообщение |
|
Создано: 11 марта 2013 01:27 · Личное сообщение · #1 |
|
Создано: 11 марта 2013 02:40 · Личное сообщение · #2 Сложная, но актуальная задачка. Если прошивка представляет собой ELF то entry point указан в его структуре, но должен быть еще First Stage Loader который бы этот ELF грузил. Если прошивка сама по себе, то на сколько мне известно нету гарантированного метода найти точку входа. Есть подходы типа изучить код инициализации начиная с адреса 0, когда код сам себя копирует по месту и потом передает управление на начало. Также если прошивка простенькая, линейная и не работает с прерываниями (бывают и такие), то дизассемблирование и построение call графа впринципе может помочь найти entry point. Хорошая темка, давайте embeddщики, подтягивайтесь, делитесь опытом P.S. Еще можно пообсуждать поиск image base, тоже бывает нетривиально. ----- Get busy living or get busy dying © |
|
Создано: 11 марта 2013 07:22 · Личное сообщение · #3 STM32F103 это Cortex-M3. У них первый дворд по адресу 0 - это начальное значение SP, а второй (по адресу 04) - указатель на точку входа по ресету. Т.к. Cortex-M3 поддерживает только Thumb режим, надо сразу выставить регистр Т в 1 (Alt-G). После этого конвертишь второй дворд в оффест, переходишь по адресу, отступаешь на 1 байт назад (т.к. указатели на Thumb-код имеют 1 в младшем бите), и жмёшь C. Ну а дальше даташит в зубы и вперёд. А, ещё ида по дефолту для бинарников ставит ARMv6, поэтому надо переключить на ARMv7 (Options-General-Analysis-Processor specific-ARM architecture) |
|
Создано: 11 марта 2013 13:13 · Личное сообщение · #4 h-k EP прописанная в ARM ELF может быть обычным рудиментом при компиляции, если при загрузке ида видает illegal program entry point(xxxxxxxx) значит бут который подгружает эльф сам определяет откуда стартовать и необязательно это должен быть именно адрес xxxxxxxx, возможно какое-то значение из таблицы загрузки или статичное значение забитое в бутлоадере. Короче прошивку надо посмотреть, а еще лучше полный дамп флеш-памяти. |
|
Создано: 11 марта 2013 15:50 · Личное сообщение · #5 |
|
Создано: 12 марта 2013 13:58 · Личное сообщение · #6 h-k В файле DEVO-8 FWDT v0.8A_00.s19 есть строки вида: Code:
где Code:
Code:
Code:
Code:
В принципе то что я получил совпадает с DEVO-8 FWDT v0.8A_00_08004000.bin из архива и если загрузить бинарник по адресу 0x08004000 получим то о чем уже говорил выше товарищ reverser | Сообщение посчитали полезным: h-k |
|
Создано: 12 марта 2013 18:50 · Поправил: Youlupukki · Личное сообщение · #7 Привет! Позволь поинтересоваться, ты сам писал под stm32? Если прошивка написана с использованием стандартных библиотек то вначале идет что-то вроде: Reset_Handler LDR R0, =SystemInit BLX R0 LDR R0, = Program_start BX R0 где SystemInit - функция начальной инициализации тактового генератора(скорей всего стандарт и не представляет интереса), а вот Program_start - это и есть адрес самого main(). Также, если тебя интересует конкретный начальный адресс загрузки, в зависимости от камня векторная таблица может меняться. Рекомендую поставить последний IAR. Выбираешь в нем нужный тебе камень и смотришь параметры линкера. Увидишь что-то вроде: ROM start: 0x08000000 end:0x0801FFFF RAM start: 0x20000000 end:0x2000FFFF |
|
Создано: 13 марта 2013 01:08 · Поправил: Getorix · Личное сообщение · #8 Немного поправлю kp0m Это Code:
S3 - используется 32битный адрес 25 - записать 0x25 байт 08004000 - адрес начала ... данные ... 4B - контрольная сумма ----- Get busy living or get busy dying © |
|
Создано: 27 июля 2015 13:37 · Личное сообщение · #9 ДД. Не стал создовать ещё одну тему. Возникла проблема. Есть смарт часы с процессором STM32P207. ARM Cortex-M3 я так понимаю. Есть прошивка на них, в которой производитель не хочет добавить поддержку кириллицы. Я этим занимаюсь. Расшифровал файлы шрифтов. Даже нашёл в файле прошивки описания файлов шрифтов, смещения символов. Теперь нужно как то добавить ещё одну такую запись, чтоб не поломать прошивку). хотел IDA использовать, да вот не совсем уверен как применить её. да и ещё есть 2 бинарника. ER_ERAM1.BIN и ER_IROM.BIN. в первом как раз записи описания шрифтов. может кто подсказать, куда копать)? |
|
Создано: 27 июля 2015 13:59 · Личное сообщение · #10 |
|
Создано: 28 июля 2015 13:43 · Личное сообщение · #11 |
|
Создано: 28 июля 2015 14:00 · Личное сообщение · #12 |
|
Создано: 29 июля 2015 21:26 · Личное сообщение · #13 |
|
Создано: 29 июля 2015 22:14 · Личное сообщение · #14 > Есть смарт часы с процессором STM32P207 У STM32 нет такой модели микроконтроллеров, может быть STM32F207? Тогда возникает вопрос почему не была использована менее дорогая STM32F205 модель, ведь она отличается только тем что у нее нет поддержки hardware ethernet и параллельного интерфейса к камере, которые вряд-ли понадобятся часам. > Расшифровал файлы шрифтов. Даже нашёл в файле прошивки описания файлов шрифтов, смещения символов. Давайте разберемся, я так понял имена файлов вшиты в прошивке. А вот файлы шрифтов идут раздельно от прошивки или они тоже вшиты в нее? 1. Если раздельно, то как именно код из прошивки берет эти файлы? Из microSD карты или откуда? 2. Если вшиты, и Вы говорите "файл", то там должна быть какая-то маленькая файловая система внутри прошивки, или как? Ну и, чтобы попытаться чем-нибудь (кроме советов) помочь, нужна будет сама прошивка. |
|
Создано: 30 июля 2015 06:21 · Поправил: rbmaks · Личное сообщение · #15 arnix пишет: У STM32 нет такой модели микроконтроллеров, может быть STM32F207? Это именнно STM32P207. http://4pda.ru/forum/dl/post/6319275/back2.JPG arnix пишет: 1. Если раздельно, то как именно код из прошивки берет эти файлы? Из microSD карты или откуда? 2. Если вшиты, и Вы говорите "файл", то там должна быть какая-то маленькая файловая система внутри прошивки, или как? Прошивка представляет собой архив, в котором находятся ресурсы и 2 бинарника. по всей фидимости, файловая система есть) |
|
Создано: 30 июля 2015 09:23 · Поправил: reversecode · Личное сообщение · #16 |
|
Создано: 30 июля 2015 10:04 · Поправил: Maximus · Личное сообщение · #17 |
|
Создано: 30 июля 2015 21:29 · Поправил: arnix · Личное сообщение · #18 rbmaks пишет: Это именнно STM32P207 Забавно, поисковики тоже не знают такой микроконтроллер, есть только rbmaks пишет: Прошивка представляет собой архив, в котором находятся ресурсы и 2 бинарника. по всей фидимости, файловая система есть) Так нужно идентифицировать эту файловую систему (может там например FAT12, которую можно уместить и в 40КБ) и посмотреть, если внутри есть свободное место, то это самый легкий вариант, нужно просто записать новый файл в файловую систему, не меняются ни код, ни адреса, ни размеры. Если в ФС места нет, то тут два варианта: 1. записать шрифт в конец прошивки и дописать код чтобы тот читал шрифты кириллицы оттуда. 2. или же, если размер флэшки МК позволяет, то можно создать новую ФС нужного размера с нужным содержанием и заменить адрес оригинальной ФС на адрес новой, практически не тронув сам код. |
|
Создано: 30 июля 2015 22:00 · Личное сообщение · #19 arnix пишет: Так нужно идентифицировать эту файловую систему... Стоп, смысл не в том, что я не могу добавить в прошивку файл шрифта. Как я писал, прошивка - есть архив, в которой папочка fonts со шрифтами. при обновлении прошивки мне даже не важно, что за ФС там, файлики сами падают на место. Смысл в том, что бы заставить код прошивки обрабатывать добавленные файлы). они обрабатываются процедурами в бинарнике. причём, имена файлов не жёстко прописаны, а склеиваются по маске (%d_%d_%d.dat). а подставляемые данные прописаны в виде констант так же в бинарнике. как и данные для обработки файов (смещения символа по x). |
|
Создано: 30 июля 2015 22:06 · Личное сообщение · #20 |
|
Создано: 30 июля 2015 22:52 · Поправил: arnix · Личное сообщение · #21 rbmaks пишет: они обрабатываются процедурами в бинарнике. причём, имена файлов не жёстко прописаны, а склеиваются по маске (%d_%d_%d.dat). а подставляемые данные прописаны в виде констант так же в бинарнике. как и данные для обработки файов (смещения символа по x). Понятно. Так значит там есть еще и специальный прошивальшик, который все это дело расфасовывает на флэшке МК.. Так как наверху было написано "имя файла имеет вид, типа 32_32_126.dat, что определяет границы кодов символов", то я предположил, что код прошивки сам умеет находить и использовать файл шрифта с правильным названием когда натыкается на символы которые должны там находиться. rbmaks пишет: Стоп ... Согласен, хватит предположений. Без самой прошивки, или хотя бы кусков дизассемблированного/декомпилированного кода помочь вряд ли удастся. |
|
Создано: 01 августа 2015 09:59 · Личное сообщение · #22 |
|
Создано: 04 августа 2015 20:27 · Поправил: arnix · Личное сообщение · #23 пардон, забыл прикрепить)) Скачал, посмотрел немного, если я ничего не перепутал, нужно загружать в дизассемблер так: Code:
Обращение к строке "/#1/fonts/%d_%d_%d.dat" идет из нескольких мест: Code:
Попробую разобраться, если не будет занимать много времени. |
|
Создано: 05 августа 2015 21:23 · Личное сообщение · #24 |
|
Создано: 01 марта 2019 11:44 · Поправил: teSon · Личное сообщение · #25 Извините за некропост, что бы не плодить тем, подскажите есть bin области 0x0800 0000 0x0807 FFFF проца stm32f103 vet6 точка входа 145, стаю на 144 далее с, Code:
Code:
Code:
Дальше застрял. Хотелось декомпилировать. |
|
Создано: 01 марта 2019 12:08 · Личное сообщение · #26 |
|
Создано: 01 марта 2019 12:23 · Личное сообщение · #27 UniSoft Спасибо, что откликнулись. Да это я сделал. Результат тот же Code:
|
|
Создано: 08 марта 2019 15:33 · Личное сообщение · #28 |
eXeL@B —› Вопросы новичков —› Исследование прошивки для АРМ процессора |