Сейчас на форуме: tyns777, bezumchik, Lohmaty (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Исследование прошивки для АРМ процессора
Посл.ответ Сообщение

Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 марта 2013 01:27
· Личное сообщение · #1

Ковыряю прошивку для процессора STM32F103
Это, я так понимаю, АРМ процессор, соответственно должен дизассемблироваться с помощью IDA.
Однако затык у меня настувает на том, что ИДА не может автоматически Entry Point найти.
Помогите с мануалом или парой советов, как мне эту прошивку дизассемблировать.




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 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 ©




Ранг: 58.0 (постоянный), 13thx
Активность: 0.020.01
Статус: Участник

Создано: 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)



Ранг: 26.1 (посетитель), 10thx
Активность: 0.01=0.01
Статус: Участник

Создано: 11 марта 2013 13:13
· Личное сообщение · #4

h-k EP прописанная в ARM ELF может быть обычным рудиментом при компиляции, если при загрузке ида видает illegal program entry point(xxxxxxxx) значит бут который подгружает эльф сам определяет откуда стартовать и необязательно это должен быть именно адрес xxxxxxxx, возможно какое-то значение из таблицы загрузки или статичное значение забитое в бутлоадере.

Короче прошивку надо посмотреть, а еще лучше полный дамп флеш-памяти.



Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 марта 2013 15:50
· Личное сообщение · #5

Вот прошивка http://files.mail.ru/BDABDCDE185C4232BAA78271289C1FC0
Изначально она была в dfu, конвертировал с помощью родной утилиты.



Ранг: 26.1 (посетитель), 10thx
Активность: 0.01=0.01
Статус: Участник

Создано: 12 марта 2013 13:58
· Личное сообщение · #6

h-k В файле DEVO-8 FWDT v0.8A_00.s19 есть строки вида:
Code:
  1. S3250800400000040020474100084179020879A3010891B30108E94E000869AB0208000000004B

где
Code:
  1. S325
- маркер версии или чего-то там
Code:
  1. 08004000
- адрес записи на флеш
Code:
  1. 00040020474100084179020879A3010891B30108E94E000869AB020800000000
- данные
Code:
  1. 4B
- контрольный байт

В принципе то что я получил совпадает с DEVO-8 FWDT v0.8A_00_08004000.bin из архива и если загрузить бинарник по адресу 0x08004000 получим то о чем уже говорил выше товарищ reverser

| Сообщение посчитали полезным: h-k

Ранг: 4.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 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




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 13 марта 2013 01:08 · Поправил: Getorix
· Личное сообщение · #8

Немного поправлю kp0m

Это SREC запись.

Code:
  1. S3250800400000040020474100084179020879A3010891B30108E94E000869AB0208000000004B

S3 - используется 32битный адрес
25 - записать 0x25 байт
08004000 - адрес начала
... данные ...
4B - контрольная сумма

-----
Get busy living or get busy dying ©




Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 июля 2015 13:37
· Личное сообщение · #9

ДД. Не стал создовать ещё одну тему. Возникла проблема. Есть смарт часы с процессором STM32P207. ARM Cortex-M3 я так понимаю. Есть прошивка на них, в которой производитель не хочет добавить поддержку кириллицы. Я этим занимаюсь. Расшифровал файлы шрифтов. Даже нашёл в файле прошивки описания файлов шрифтов, смещения символов. Теперь нужно как то добавить ещё одну такую запись, чтоб не поломать прошивку). хотел IDA использовать, да вот не совсем уверен как применить её. да и ещё есть 2 бинарника. ER_ERAM1.BIN и ER_IROM.BIN. в первом как раз записи описания шрифтов. может кто подсказать, куда копать)?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 27 июля 2015 13:59
· Личное сообщение · #10

Если там весь файл занят только описанием шрифтов то, возможно, свою таблицу можно добавить в конец файла. Но прийдется проверить не фиксируется ли где количество шрифтов.
Можно также подменить один из шрифтов на свой если формат позволяет.

-----
старый пень




Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 июля 2015 13:43
· Личное сообщение · #11

В том то и дело, что там не только описание шрифтов. А заменить просто файл шрифта не получится, т.к. имя файла имеет вид, типа 32_32_126.dat, что определяет границы кодов символов.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 28 июля 2015 14:00
· Личное сообщение · #12

можно перебить релоки имени файла в другое свободное место в файле, наверняка же есть?



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 29 июля 2015 21:26
· Личное сообщение · #13

релоки - это что? ссылка на имя файла? так такой не существует. имя файла считывается по маске *_*_*.DAT где звёздочки - числа.



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 29 июля 2015 22:14
· Личное сообщение · #14

> Есть смарт часы с процессором STM32P207

У STM32 нет такой модели микроконтроллеров, может быть STM32F207? Тогда возникает вопрос почему не была использована менее дорогая STM32F205 модель, ведь она отличается только тем что у нее нет поддержки hardware ethernet и параллельного интерфейса к камере, которые вряд-ли понадобятся часам.

> Расшифровал файлы шрифтов. Даже нашёл в файле прошивки описания файлов шрифтов, смещения символов.

Давайте разберемся, я так понял имена файлов вшиты в прошивке. А вот файлы шрифтов идут раздельно от прошивки или они тоже вшиты в нее?

1. Если раздельно, то как именно код из прошивки берет эти файлы? Из microSD карты или откуда?
2. Если вшиты, и Вы говорите "файл", то там должна быть какая-то маленькая файловая система внутри прошивки, или как?

Ну и, чтобы попытаться чем-нибудь (кроме советов) помочь, нужна будет сама прошивка.



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 июля 2015 06:21 · Поправил: rbmaks
· Личное сообщение · #15

arnix пишет:
У STM32 нет такой модели микроконтроллеров, может быть STM32F207?

Это именнно STM32P207. http://4pda.ru/forum/dl/post/6319275/back2.JPG
arnix пишет:
1. Если раздельно, то как именно код из прошивки берет эти файлы? Из microSD карты или откуда?
2. Если вшиты, и Вы говорите "файл", то там должна быть какая-то маленькая файловая система внутри прошивки, или как?

Прошивка представляет собой архив, в котором находятся ресурсы и 2 бинарника. по всей фидимости, файловая система есть)




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 30 июля 2015 09:23 · Поправил: reversecode
· Личное сообщение · #16

rbmaks пишет:
http://4pda.ru/forum/dl/post/6319275/back2.JPG

Ой! Ошибка 404.
Запрашиваемая информация не существует, перемещена или удалена.

без входа на форум никак
намекните что ли там админам на форуме, никогда не понимал этого




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 30 июля 2015 10:04 · Поправил: Maximus
· Личное сообщение · #17

--> Картинка <--

-----
StarForce и Themida ацтой!




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 30 июля 2015 21:29 · Поправил: arnix
· Личное сообщение · #18

rbmaks пишет:
Это именнно STM32P207


Забавно, поисковики тоже не знают такой микроконтроллер, есть только отладочная плата с таким названием от компании Olimex, с контроллером STM32F207. Или я просто плохо поискал.. Ну да ладно, не суть.

rbmaks пишет:
Прошивка представляет собой архив, в котором находятся ресурсы и 2 бинарника. по всей фидимости, файловая система есть)


Так нужно идентифицировать эту файловую систему (может там например FAT12, которую можно уместить и в 40КБ) и посмотреть, если внутри есть свободное место, то это самый легкий вариант, нужно просто записать новый файл в файловую систему, не меняются ни код, ни адреса, ни размеры.

Если в ФС места нет, то тут два варианта:
1. записать шрифт в конец прошивки и дописать код чтобы тот читал шрифты кириллицы оттуда.
2. или же, если размер флэшки МК позволяет, то можно создать новую ФС нужного размера с нужным содержанием и заменить адрес оригинальной ФС на адрес новой, практически не тронув сам код.



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 июля 2015 22:00
· Личное сообщение · #19

arnix пишет:
Так нужно идентифицировать эту файловую систему...

Стоп, смысл не в том, что я не могу добавить в прошивку файл шрифта. Как я писал, прошивка - есть архив, в которой папочка fonts со шрифтами. при обновлении прошивки мне даже не важно, что за ФС там, файлики сами падают на место. Смысл в том, что бы заставить код прошивки обрабатывать добавленные файлы). они обрабатываются процедурами в бинарнике. причём, имена файлов не жёстко прописаны, а склеиваются по маске (%d_%d_%d.dat). а подставляемые данные прописаны в виде констант так же в бинарнике. как и данные для обработки файов (смещения символа по x).




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 30 июля 2015 22:06
· Личное сообщение · #20

маску можно перенести в другое место в бинарнике, если в том где она есть не помещается дописать нужные символы



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 30 июля 2015 22:52 · Поправил: arnix
· Личное сообщение · #21

rbmaks пишет:
они обрабатываются процедурами в бинарнике. причём, имена файлов не жёстко прописаны, а склеиваются по маске (%d_%d_%d.dat). а подставляемые данные прописаны в виде констант так же в бинарнике. как и данные для обработки файов (смещения символа по x).


Понятно. Так значит там есть еще и специальный прошивальшик, который все это дело расфасовывает на флэшке МК..
Так как наверху было написано "имя файла имеет вид, типа 32_32_126.dat, что определяет границы кодов символов", то я предположил, что код прошивки сам умеет находить и использовать файл шрифта с правильным названием когда натыкается на символы которые должны там находиться.

rbmaks пишет:
Стоп
...

Согласен, хватит предположений. Без самой прошивки, или хотя бы кусков дизассемблированного/декомпилированного кода помочь вряд ли удастся.



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 августа 2015 09:59
· Личное сообщение · #22

arnix пишет:
Без самой прошивки, или хотя бы кусков дизассемблированного/декомпилированного кода помочь вряд ли удастся.

пардон, забыл прикрепить))
https://cloud.mail.ru/public/2KQJ/PwfTAsDYz



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 04 августа 2015 20:27 · Поправил: arnix
· Личное сообщение · #23

пардон, забыл прикрепить))

Скачал, посмотрел немного, если я ничего не перепутал, нужно загружать в дизассемблер так:

Code:
  1. ram start address  0x20000000
  2. ram size           0x20000
  3.  
  4. rom start address  0x08000000
  5. rom size           0x100000
  6.  
  7. input file
  8. loading address    0x08020000
  9. loading size       0xDEEFC
  10.  
  11. load additional file (external ram)
  12. external ram start addr. 0x64000000
  13. external ram end   addr. 0x64200000


Обращение к строке "/#1/fonts/%d_%d_%d.dat" идет из нескольких мест:

Code:
  1. Address      Function    Instruction
  2. -------      --------    -----------
  3. ROM:0805E63A             FF A1        ADR   R1, a1FontsD_D_D_da
  4. ROM:0805E738 sub_805E71E BF A1        ADR   R1, a1FontsD_D_D_da
  5. ROM:0805E7B6 sub_805E78E A0 A1        ADR   R1, a1FontsD_D_D_da
  6. ROM:0805E818 sub_805E78E 87 A1        ADR   R1, a1FontsD_D_D_da
  7. ROM:0805F9E2 sub_805F9CA AF F6 AC 71  ADR.W R1, a1FontsD_D_D_da


Попробую разобраться, если не будет занимать много времени.



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 августа 2015 21:23
· Личное сообщение · #24

arnix пишет:
Скачал, посмотрел немного, если я ничего не перепутал, нужно загружать в дизассемблер так:

Ну уже что то, спасибо! буду учиться дизассемблером пользоваться). грядут выхи, снова погрязну в разбор прошивки)



Ранг: 0.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 марта 2019 11:44 · Поправил: teSon
· Личное сообщение · #25

Извините за некропост, что бы не плодить тем, подскажите есть bin области 0x0800 0000
0x0807 FFFF проца stm32f103 vet6
точка входа 145, стаю на 144 далее с,

Code:
  1. ROM:08000144                 CODE32
  2. ROM:08000144                 LDR     R0, =(loc_800641C+1)
  3. ROM:08000146                 BLX     R0 ; loc_800641C
  4. ROM:08000148                 LDR     R0, =unk_8000131
  5. ROM:0800014A                 BX      R0 ; unk_8000130


Code:
  1. ROM:08000130 unk_8000130     DCB 0xDF ; - ; CODE XREF: ROM:0800014Aj
  2. ROM:08000131 unk_8000131     DCB 0xF8 ; ° ; DATA XREF: ROM:08000148o
  3. ROM:08000131                                         ; ROM:off_8000164o

Code:
  1. ROM:08000164 off_8000164     DCD unk_8000131         ; DATA XREF: ROM:08000148r


Дальше застрял. Хотелось декомпилировать.

--> bin file<--




Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

Создано: 01 марта 2019 12:08
· Личное сообщение · #26

teSon
это Cortex-M3 он не понимает код ARM (CODE32)...
надо переключить в режим Thumb
поставьте курсор в начало секции, Alt+G, установите флаг T в 1



Ранг: 0.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 марта 2019 12:23
· Личное сообщение · #27

UniSoft Спасибо, что откликнулись. Да это я сделал. Результат тот же
Code:
  1. ROM:08000144 ; ---------------------------------------------------------------------------
  2. ROM:08000144                 LDR     R0, =(loc_800641C+1)
  3. ROM:08000146                 BLX     R0 ; loc_800641C
  4. ROM:08000148                 LDR     R0, =unk_8000131
  5. ROM:0800014A                 BX      R0 ; unk_8000130




Ранг: 16.5 (новичок), 5thx
Активность: 0.01=0.01
Статус: Участник
iOS expert

Создано: 08 марта 2019 15:33
· Личное сообщение · #28

Shift-F7 -> E -> Segment bitness -> 16 bit, а мучаться с Alt+G можно долго - на каждую отдельную инструкцию.


 eXeL@B —› Вопросы новичков —› Исследование прошивки для АРМ процессора
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати