Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IDA Pro
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
amiller
Приветствую!
Обратил внимание на статью на хабре (https://habr.com/company/inforion/blog/359116/), где бодренько так показали процесс реверс-инжиниринга прошивки для STM32.
Ради интереса решил попробовать. Установил версии IDA Pro 6.8 и 7.0 для теста (что нашел на просторах).
Скормил ей по инструкции из статьи пару своих бинарников для STM32F103CB. Результат плачевный. Практически сплошные данные с редкими включениями неадекватного кода.
Нет базы, с которой можно начинать работу по реверсу. Прошивки написаны на голом С без сторонних библиотек.
В статье имеется пример прошивки, который анализировался. Скачал, скормил IDA и о чудо, - результат если и не идеальный, то точно есть с чем работать.
Означает ли это, что IDA заточена на поиск стандартных сигнатур библиотечных функций и начинает анализ, отталкиваясь от них?
Или я просто что то не так делаю?
Если у кого то есть опыт успешного реверса, поделитесь настройками, что нужно сделать, чтобы процесс происходил максимально адекватно.
Может нужно подключить дефайны с описанием регистров периферии, startup-файлы для нужного процессора?
Obam
Носорог?
В этом весь маркетинг wink.gif
Цитата
Может нужно подключить ... startup-файлы для нужного процессора?

Ну тогда уж и исходники спросить не грех sm.gif Как-то раз стартап редактировал под задачу; такой же исходник wink.gif

И что, строки, области данных, адреса, константы после директив "LTORG" не идентифицируются?
amiller
Цитата(Obam @ Jun 29 2018, 19:22) *
Носорог?
Ну тогда уж и исходники спросить не грех sm.gif Как-то раз стартап редактировал под задачу; такой же исходник wink.gif

И что, строки, области данных, адреса, константы после директив "LTORG" не идентифицируются?

Да вот в том то и дело что практически ничего правильно не идентифицируется.
В прошивке для носорога (из статьи) правильно идентифицируется процентов 70 функций, да и текстовые сообщения почти без ошибок выделяются.
Точно с такими же настройками на моих прошивках результат - полный ноль.
Причём в составе кода есть структуры с большим количеством текстовых сообщений. Правда сейчас пришло в голову, что они все на кириллице, а в носороге на английском.
Вся память без затей идентифицируется как константные данные и забивается директивами DCB или DCW.
И "якобы код" был идентифицирован там, где лежали примитивы графики для дисплея. В общем чепуха полная.
Про стартап написал по причине, что таблица прерываний для конкретного процессора определенная вещь. Зная данные из таблицы, можно идентифицировать все функции прерываний и main. Далее проанализировать все вторичные вызовы функций ну и т.д.
Но похоже, что Ida работает как то иначе. Быстро получить результат не удалось.
Поэтому и спрашивал о чужом опыте. Ещё рано говорить о поддержке STM32 или уже можно пытаться использовать?
x893
Читаете RM от STM32
Определяете в IDA сегменты (CMSIS, ROM, RAM, PERIPHERIAL)
И от 0x8000004 (и остальные тоже) начинаете.
Можно и файл с описанием сделать, что бы каждый раз руками не задавать.
Конечно не так просто, но возможно.
Например
http://akb77.com/g/stm32/fix-jlink-ob-09262016/
k155la3
для "начала" работы с IDA (на хабре) это не лучший пример (с кучей "закрытого" кода в библиотеках и HAL и еще RTOS).
Скомпилируйте простой main без вызова библоиотечных ф-ий (кроме математики), "набейте" основные элементы программы - циклы, условия, switch-case итд, вызовы ф-ий, структуры данных. После этого (имея исходник, листинг на асм, map-файл) попробуйте поработать на IDA.
ps
параллельно RTFM ! как рекомендуют выше. В любом случае без этого - никак.
AVI-crak
Цитата(amiller @ Jun 29 2018, 14:41) *
Ради интереса решил попробовать.

Процент успеха программного кода напрямую зависит от содержащихся в нём синтаксических и смысловых ошибок. Те самые синие предупреждения в логе сборщика, не критические ошибки.
На библиотеках от st - количество синевы зашкаливает.

Написать код для st без синевы - очень сложно. Необходимо очень многое переписывать с нуля, даже то что уже хорошо работает. Хотя это и радует взгляд - сомневаюсь что этим кто-то будет заниматься бесплатно.
khach
За поиск стандартных функций в ИДА всегда отвечал набор сигнатур ( файлы .sig). Если при начальной анализе ИДА правильно определяла используемый компилятор и библиотеки, то тогда могла выбрать и правильеый набор .sig и найти большинство библиотечных функций с заголовками. SIG можно создавать и самому, если библиотеки не стандартные, а требуется частое их использование. Например существовали наборы сигнатур для библиотек аппаратных ключей защиты.
Раз в ТС библиотеки самописные, то и ИДА ничего про них не знает, надо ручками заголовки функций писать. Зато потом их можно экспортировать для повторного использования.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.