Вы здесь

Реверс-инжиниринг прошивки ЭБУ М74

Статья содержит базовые этапы анализа прошивок ЭБУ на МК Infineon XC2765X.

Исследование программного кода прошивки выполняется с импользованием дизассемблера IDA Pro. На первом этапе необходимо загрузить бинарный образ прошивки в рабочую среду дизассемблера. IDA не имеет специализированного модуля для МК Infineon XC2765X, что в прочем не мешает проводить анализ используя общее процессорное ядро Siemens C166 v2 family [c166V2]. МК Infineon XC2765X имеет особенность в стартовом адресе микропрограммы. Размещение программного кода во внутренней флеш микроконтроллера начинается с адресов C0'0000h, соответственно для корректной интерпретации адресов в IDA необходимо загрузить бинарный образ соответствующим образом. Здесь проще привести скриншот окна загрузки:

loader.png

После загрузки IDA выполнит некоторое разбиение адресного пространства на сегменты. Нас это разбиение не устраивает, так как не соответствует карте памяти в соответствии с датащитом. Для быстрого получения корректного разбиения на сегменты подготовлен соответствующий скрипт IDA.

large_m74_segments.png

МК использует адресацию с использованием страничных регистров DPP. Способ получения физического адреса хорошо описан на картинке ниже. Для корректной интерпретации адресов необходимо для каждого сегмента указать используемые адреса для регистров DPP. В противном случае мы получим некорректные переходы по относительным адресам и неверные ссылки на данные.

c166_dpp.png

Следующая проблема заключается в том, что IDA не знает значительного количества специализированных регистров МК и отображает их как адреса в памяти. Связано это с тем, что мы выбрали модуль с общим процессорным ядром и не имеем специализированного модуля для применяемого МК. Решать данную проблему можно различными способами, например, разработать специализированный модуль МК для IDA, но у нас задача иная и для быстрого получения результата и перехода к анализу программного кода мы воспользуемся скриптовым языком IDA для именования специализированных регистров. Описание регистров возьмем из подключаемых файлов компилятора KEIL. После окончания работы скрипта можно приступать к анализу дизассемблированного листинга программы. Предварительную предобработку можно дополнить скриптом настройки таблицы прерываний и создания соответствующих функций в IDA. Такого скрипта у меня нет, но думаю не составит труда подготовить его на основе информации из датащита.

Скрипт применяемый для подготовки прошивки к анализу prepare_bin.py.

Описание специализированных регистров МК XC2xxx.INC