Перейти к содержанию
    

Прошивка MSP430 и как ее получить

Привет народ. Где-то на просторах интернета нашел вот что:

хотие слить дамп с микросхемы MSP430

Это стало возможно .Я раскрыл этот секрет...

 

Нужен шнур USB - COM от любого мобильника..и программа MspFet и фаил для разлочки .. int_vect.txt

1)Спаиваем шнур по этой схеме:

1 TXD P1.1

2 RXD P2.2

3 RST RST/NMI

4 DTR Test

5 GND GND

 

2)Запскаем программу MspFet

3)Выбираем контролер MSP430F12x2/F11x2

4)меню TOOLS - SETUP ставим BSL и нужый COM порт.

5)нажимаем кнопку READ и кнопку RESET на донгле..

6)Красный светодиод на модуле должен погаснуть и в прграмме MspFet

должно появится сообщние Read failed. Protected function. Password not match.

7)Это означает что прога микруху опредилила но нужен пароль для чтения прошивки...

8)Забьем на это, и открываем фаил int_vect.txt и жмем PROGR.

9)В MSP заливается две строчки в конец имеющийся прошивки

@FFE0

00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0

00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0

q

10)Теперь нажимаем кнопку READ и вместо сообщеня Read failed. Protected function. Password not match. Нам сливается прошивка MSP430.Толька в конце две строчки

@FFE0

00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0

00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0

q

 

Каторые мы выризаем в блокноте .И чистая прошивка у нас!!!

 

 

 

@FFE0

00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0

00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0

q

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каторые мы выризаем в блокноте .И чистая прошивка у нас!!!

Даже, если и у вас (в чем я сомневаюсь, т.к. в указанных номерах кристаллов известных "дырок" в BSL вроде нету), то она (прошивка) нерабочая :) Потому, что этими 0xF000 затерли вектора прерываний. Даже вектор сброса затерт и при клонировании программа стартанет фиг знает откуда. Точнее откуда стартанет понятно - с адреса 0xF000, но что она при этом будет делать?

Вообще, d7d1cd, вы вместо того, чтобы цитировать "произведения" всяких "кулибиных", почитали бы оригинальные документы. RTFM, как говорится :)

MSP430 Programming Via the Bootstrap Loader (BSL) (Rev. A)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за просвещение :rolleyes: Из прочитанного я понял, что пароль для открытия проца на чтение - это по сути адреса векторов прерываний. Это так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из прочитанного я понял, что пароль для открытия проца на чтение - это по сути адреса векторов прерываний. Это так?

Немного не так. Не адреса прерываний, а область Flash-памяти, содержащая адреса/вектора прерываний. В программе можно ведь не все прерывания использовать, а только те, что необходимо. Поэтому не все вектора будут содержать адреса обработчиков прерываний. В зависимости от опцией и типа компилятора неиспользуемые вектора могут 0xFFFF содержать. Чтобы затруднить взлом прошивки, рекомендуется инициализировать все вектора прерываний, адреса которых можно легко найти в хедере. Кроме того, инициализация всех векторов прерываний упрощает отладку в части случайных вызовов неиспользуемых прерываний. Так что следующая рекомендация советует выполнять обработчики неиспользуемых прерываний как заглушку-бесконечный цикл. Пример.

#pragma vector=PORT2_VECTOR
#pragma type_attribute=__interrupt
void PORT2_ISR (void)
{ for(;;);
}

При случайном вызове прерывания программа попадает в бесконечный цикл и этот факт вы легко поймаете с помощью отладчика. В противном же случае программа может "улететь" бог знает куда и в 99% случаев вызовет сброс, причину которого вылавливать гораздо сложнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде немного понятно. К меня пока задача не писать программу для микроконтроллера, а считать ее. Fuse в проце пережжен, распилить проц мне не под силу. Остается брут паролей для BSL. Реально ли это осуществить за мыслимое время? Сколько примерно проходит времени от "отправил пароль в BSL" до "получил ответ"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В зависимости от опцией и типа компилятора неиспользуемые вектора могут 0xFFFF содержать.

Это так ИАР делает.

MSPGCC на неиспользуемые вектора ставит заглушки __unexpected, что повышает стойкость к взлому.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сколько примерно проходит времени от "отправил пароль в BSL" до "получил ответ"?

В указанном выше документе имеется описание способа вызова BSL (1.3 Standard RESET and BSL Entry Sequence), формата протокола (1.4 UART Protocol) и фрейма запроса (Table 2-1. Data Frame of BSL Commands). Так что прикиньте сами t(BSL entry) + (HDR + RX password frame + ACK) * (Start+8bit+Parity+Stop) / 9600.

Остается брут паролей для BSL. Реально ли это осуществить за мыслимое время?

И еще раз (повторно) вам указываю, что открытое обсуждение способов и методов взлома в данном разделе является нарушением Правил форума! :twak:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал документацию. Уяснил, что таблица векторов прерывания хранится в микроконтроллере с адреса FFE0 по адрес FFFF (всего 32 адреса). Так же понял, что доступом к защищенным командам BSL является пароль, который представляет собой значения, которые хранятся по адресам с FFE0 по FFFF (32 байта). Если все так, то получается, что пароль для BSL это шестнадцатеричное число от 0x0 до 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF (FF повторяется 32 раза). Или же пароль представляет собой только старшие (младшие) байты, хранящиеся по адресам векторов прерывания?

 

Поправьте меня, если что-то не так. Направьте на путь истинный...

Изменено пользователем d7d1cd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не поверю, что никто не может помочь...

Ну а чем можно помочь?

За это время можно было уже чего-то попробовать.

Пара соображений.

Вектора прерываний обычно ссылаются на область флеш-памяти (сужаем диапазон возможных значений).

Можно прикинуть, какие вектора не используются. Скорее всего, для них будет FFFF либо фиксированная заглушка (одна на все).

RESET_VECTOR обычно (если не переопределён) ссылается на начало программы (startup).

Ну а дальше - скрипт в зубы и круглосуточно ползущие буковки в консоли...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не поверю, что никто не может помочь...

Ну хотите, перепишу программу с нуля?

 

фиксированная заглушка (одна на все).

У меня всегда индивидуальные заглушки на наиспользуемые вектора :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня всегда индивидуальные заглушки на наиспользуемые вектора :)

Я имел в виду заглушку, которую компилятор (GCC) ставит по умолчанию.

Типа:

00001134 <_unexpected_>:
_unexpected_():
    1134:    00 13           reti

Хотя IAR, по моим наблюдениям, даже такого не делает (вообще не ставит никаких заглушек).

Что приводит иногда к печальным последствиям (в случае случайного разрешения незаглушенного прерывания)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотя IAR, по моим наблюдениям, даже такого не делает

А, понятно.

ИАР сам не делает, я это делаю ручками, а с GCC не работаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Брут-форс тоже не поможет: в MSP есть такая фича, что после скольки-то неверных попыток получения доступа по BSL программа стирается. Если ее включили (а я, например, включаю) - после пары попыток в руках оказывается кирпич.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...