Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Как считать прошивку из микроконтроллера

Блог об электронике


Привет друзья.
Меня попросили рассказать о клонировании микроконтроллеров. Просили — выполняю!
Кратко о чём я хочу рассказать в данном видео:
Я расскажу две коротенькие истории, чтобы вы лучше поняли, что такое клонирование и как всё происходит.
Второе — я сделаю клон данного устройства, точнее сделаю клон микроконтроллера.

Так же я вам расскажу, что клонирование чипов не всегда возможно, более того, можно сказать даже по другому, практически всегда клонирование чипов не возможно. Я, так же в конце расскажу, какие бывают способы клонирования, даже если производитель не хочет чтобы клонировали его устройство, производитель устройства, не хочет этого, то есть варианты, есть способы, и о них я расскажу дальше. Так же есть способ о котором многие знают, но даже и не догадываются что они его знают, как можно клонировать устройство со 100% результатом.

О нем, конечно же я расскажу в самом конце, так что если вам интересно — обязательно досмотрите этот ролик до конца.
Первая история. Представим, что я наконец-то доделал своё устройство, которое я никак доделать не могу. И скажем, продаю его примерно за 100 $. Потом у меня кто-то его покупает, Вася допустим, и Вася смышлёный парень, он видит, что этот микроконтроллер стоит 2 $, дисплей — 3 $, кнопочки вообще копейки, пару транзисторов, пару резисторов. Он понимает, что данное устройство стоит максимум 20 $, как я его мог купить за 100 $. И он думает, нужно сделать копии таких устройств (клонировать чипы) и продавать их не за 100 $ как продаёт бедный инженер Аурел, а продавать их за 50$. Вот он считает, что навар 30 $, всё круто, через годик он на машинке будет ездить, через два уже на хорошей машинке и так далее и тому подобное. Такой вариант — кормить нахлебников — он никого не устраивает. Поэтому производители всех микроконтроллеров устанавливают, точнее задают возможность защиты содержимого микроконтроллера от чтения, конечно же эти защиты можно обойти, но как правило, простыми способами этого не сделать.
О способах клонирования чипов я расскажу в самом конце. Всё это приводит к битам защиты, и я на этом сам попался. Принесли отремонтировать плату управления холодильником. Плата работала, индикация работала, единственное что не работало — устройство которое включало компрессор. который гоняет фреон по теплообменнику, который перегоняет тепло из холодильной камеры наружу. Было очень похоже на то, что просто сгорел данный пин микроконтроллера. Был бы у меня исходный код, я бы перекинул управление данным исполнительным устройством на какой-то соседний пин, которых свободных было огромное количество. Но исходного кода естественно у меня не было. Оставался второй вариант — копировать прошивку и залить её в нормальный микроконтроллер, потому что там была, кажется, AtMega8. Естественно у меня этот вариант не получился, потому что стояли биты защиты.
И третий вариант который я попробовал — написать изготовителю и попросить его, чтобы он выслал *.hex файл. Естественно он меня вежливо отшил, сказал что они *. hex не распространяют, никому не отправляют, и если вы хотите — вы можете у нас купить плату. Сказал мне стоимость. Сказал стоимость доставки. Короче, суммы были не маленькие.
То есть вот такая вот реальная ситуация, у меня не получилось это всё сделать. Теперь давайте, все-таки перейдём к самому процессу клонирования чипов. У меня есть плата А, эта плата работает, как вы видите тут меню переключается, всё прекрасно работает. Мне нужно сделать такое же устройство. Устройство сделать просто, у меня плата односторонняя, я вижу трассировку, я просто копирую трассировку, делаю новое устройство, но мне нужно как то сделать чтобы микроконтроллер также функционировал как и микроконтроллер в плате А. То есть для идентичного функционирования мне нужно чтобы fuse биты на обоих контроллерах были идентичные, содержимое flash памяти, там хранится ваша программа, тоже было идентичным, и содержимое eeprom памяти, там могут храниться какие-то важные константы, тоже было идентичным. То есть мне нужно с этого микроконтроллера (микроконтроллер А) считать все три составляющие — fuse, flash, eeprom и в тот микроконтроллер (микроконтроллер В) записать.
Лучше записывать таким образом, чтобы сначала записать flash, потом eeprom, ну или наоборот, ну и самым последним самое главное записать fuse. Потому что, если у вас микроконтроллер в плате имеет какой то кварцевый генератор, и он настроен fus-ами для работы от внешнего тактового сигнала, то при программировании микроконтроллера в панельке без кварца, как только вы переключите микроконтроллер для работы от кварца, он уже не запустится, потому что ему нужен внешний тактовый сигнал, которого нет в панельке. Вам придётся его паять в плату, где есть этот сигал, и потом уже зашивать в него eeprom и flash. Поэтому, сначала пишем eeprom и flash пока микроконтроллер работает от внутреннего генератора, потом переносим содержимое fuse, и если всё хорошо, то микроконтроллер, после конфигурирования fuse, просто перестанет определяться, но этого уже и не требуется, так как вы залили в него прошивку до fuse. Когда вы его вставите в плату, он у вас, так как на ней смонтирован кварц, сразу же и запустится.

Давайте непосредственно попробуем всё считать. Я себе сделал папку, вы видите, что она пустая, и попытаюсь считать с микроконтроллера сначала Flash. Выбираем путь, по которому хотим сохранить файл. Нужно как то назвать hex каким-то говорящим названием. Теперь жмём кнопку «Чтение». Вот как видите, у меня здесь появился файл на 9 кБайт.

Также самое читаем и eeprom. У меня конечно же в ней ничего нет, но в вашем случае может быть. Самими последними смотрим fuse. Нажимаем «Чтение», ОК, и fuse можно к примеру ALT+PrtSct и вставить в текстовый документ.

Ну всё, мы скопировали содержимое микроконтроллера.
Теперь я беру и подключаю сюда другой микроконтроллер (микроконтроллер В). У меня другой платы нет, я сделаю вот так — «Стереть всё». Кристалл чист, но для того, чтобы вы видели, что у меня другое устройство, я разверну провод))).

Я беру второе устройство, вставляю его в компьютер, подключаю программатор, устройство абсолютно чистое, ничего у нас не работает, теперь мне нужно сюда залить eeprom, hex, и в конце fuse. То есть я точно также выбираю hex, жму «Программирование», ОК.

Дальше мне нужна eeprom, также выбираю и жму «Программирование». И также мне нужны fuse. То есть я беру сначала читаю то, что у меня установлено, и затем сверяю с тем, что мне нужно. При необходимости их корректирую. У меня всё установлено так как нужно. Ну всё, я вас поздравляю, у вас устройство и чип клонированы, оно работает, и всё классно.

Но это слишком просто, так не бывает. Дело в том, что у любого микроконтроллера есть вот такие два fuse защиты. У других микроконтроллеров механизмы защиты могут быть другими, но все они имеют механизмы защиты. К примеру, я беру и удаляю данные два fuse, я их не то что удалил, я их установил. Они равны значению всегда установленного бита SPIEN. И теперь я хочу сделать всё тоже самое что я делал до этого.

Я создам другой файл, допустим, с окончанием LOCK, и прочту в него.

Как видите всё читается, казалось бы никаких проблем нет, то есть чтение у нас не запрещено, всё классно, НО, если мы сейчас эти два файла откроем в текстовом редакторе.
Смотрите. Они разные.

Даже в первой строчке, видим, что здесь 028D, а в этом уже 0F00, то есть программатор считал не нужную информацию, а у микроконтроллера словно включается какой то генератор случайных чисел и он просто плюёт ерундой. Давайте убедимся, что мы считали не то, что нужно, давайте запрограммируем микроконтроллер hex файлом с окончанием LOCK. Убедимся что у нас дисплей не включится. Всё ОК, прошло программирование, прошло верификацию, но дисплей не включается. Чтобы вы не делали, у вас ничего не получится. И я думаю, что многие начинающие сразу подумают, что что-то не так с микроконтроллером, либо программатор не работает, либо ещё что-то. Потому что всё считалось. Поэтому просто берём, читаем у микроконтроллера, который мы хотим клонировать, fuse, и если установлены fuse защиты, то ни flash ни eeprom не имеет никакого смысла читать дальше.
Теперь о том, как же можно считать с залоченного чипа информацию? Скажу сразу, если всё хорошо, то считать её либо не реально, либо сама процедура считывания будет стоить на много дороже чем написание нового софта. Какие бывают варианты обхода битов защиты?
Ну первое — это ошибка, ошибка разработчиков данного чипа. Может быть такое, что разработчики где то ошиблись, и эту защиту как-то можно просто обойти. Такое бывает, но это редкость.
Второе — берут, и на специальном оборудовании, микрон за микроном снимают слоями данный компаунд, и добираются до кристалла. Затем находят область памяти, это тоже какая то ПЗУ (постоянное запоминающее устройство) где хранятся биты конфигурации. И каким то способом, либо лазером, либо электромагнитным импульсом направленным, пытаются изменить состояние бита защиты, затем читают программатором с микроконтроллера прошивку. Естественно что для того, чтобы это сделать, нужно знать топологию микроконтроллера, нужно знать где что находится, где какой бит, возможно также нужно будет испортить огромное кол-во работающих устройство для исследование методом проб и ошибок. Более того, снятие послойное компаунда, для этого нужно иметь супер точное оборудование, это всё стоит огромных денег.

Третий вариант, который у вас всегда будет работать, который я и обещал показать, который 100% работает на всех микроконтроллерах, это изучить, как работает ваше устройство, и не клонировать его чип, а сделать своё новое устройство, которое по функционалу не будет отличаться от данного устройства. Так же будет отвечать на ваши кнопки, на все ваши нажатия. Да, я понимаю, вы чувствуете, что я вас обманул, но не обманывайте и вы себя, потому что простыми способами сделать копию устройства не получится. Потому что никто, ни разработчики, естественно, раз разработчики этого не хотят, то и производители микроконтроллеров никак не допустят того, чтобы кто-то мог взять и спокойно сделать копию микроконтроллера с прошивкой (клонирование чипа).

14 комментария

Стиль написания это просто пиздец . Складывается впечатление что все ваше образование — это два класса церковно- приходской школы. Читать просто невозможно

Да, Вы правы, статьи никуда не годятся. Это не совсем статьи, это текст из видео практически без изменений. Я выставляю его для поисковиков, чтобы для них сайт не был пустым. (Ну на крайний случай, для пользователей с очень плохим интернетом) Для людей есть видео, оно первично, хотя и оно не лишено недостатков, но видео ещё нормально смотрится, так как там больше интереса представляет картинка, а мои комментарии просто дополнения. Вам спасибо за критику, которая заставляет расти, а не стоять на месте.

Отличный ролик и хорошее описание . А критиков не слушай. Кто такой Вася? Если слишком умный пусть на сайтах для профессионалов критикует.

Спасибо за видео! Всё ясно и понятно, а главное очень интересно! Что касается стиля — пусть Вася читает художественную литературу, там со стилем всё ОК!

В настоящее время, все больше людей, интересующихся электроникой, и конструирующих самостоятельно различные устройства, собирают устройства с применением микроконтроллеров. Даже начинающие, рано или поздно приходят к мысли, о необходимости их изучения, потому — что за ними будущее. Из наиболее широко распространенных, и относительно простых для изучения, по крайней мере, относительно других МК, могу назвать микроконтроллеры PIC и AVR.

По микроконтроллерам AVR, семейств Mega и Tiny, есть много информации в интернете, и огромное количество готовых схем и прошивок для них. Выбравшие для изучения AVR микроконтроллеры (МК), думаю, чаще всего собирают себе, сперва для прошивания МК Программатор Громова. Это очень легкий в сборке программатор, не содержит дефицитных деталей, не требует наладки, и собрать его может даже школьник. Главным недостатком его является то, что для его подключения к компьютеру необходим СОМ порт, который часто отсутствует на современных компьютерах. Я являюсь обладателем относительно современного системного блока, на материнской плате которого производители оставили СОМ порт, и разумеется, собрал себе Программатор Громова, начав свое знакомство с МК AVR.

Выбор оболочек работающих с этим программатором не велик, наиболее распространенные, это Ponyprog и Uniprof. Испробовав в работе обе из них, понял, что к Ponyprog, у меня почему-то душа не лежит, зато Uniprof меня полностью устроила. Так выглядит её рабочее окно:

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

Разберем подробнее основные пиктограммы, используемые при работе с оболочкой.

  • READ. Считать прошивку с микроконтроллера. Кликнув по этой иконке, мы считываем записанную ранее прошивку, с чипа микроконтроллера в буфер программы.
  • PROG. Записать прошивку в микроконтроллер. С помощью этой иконки мы записываем прошивку, из буфера программы в память чипа, или прошиваем МК.
  • TEST. Сверка прошивки, записанной в память чипа, с прошивкой в буфере программы.
  • FUSE. Выставление фьюзов. Установка фьюз битов, задающих параметры работы микроконтроллера. О них ниже поговорим отдельно.
  • ERASE. Стереть прошивку микроконтроллера. Перед тем, как залить в чип новую прошивку, мы должны удалить старую из его памяти. С помощью этой иконки, мы и осуществляем стирание.
  • HEX Загрузить прошивку в буфер, (иконка папки). Перед тем как прошить микроконтроллер, мы должны загрузить прошивку в буфер программы, сделать это можно с помощью этой иконки.
  • HEX Сохранить прошивку из буфера (иконка дискеты). Служит для сохранения на компьютере прошивки, снятой с чипа микроконтроллера, и загруженной в буфер. Сохранить прошивку можно, только если микроконтроллер не был защищен от копирования его прошивки, с помощью выставления определенных фьюз битов.

Рассмотрим что это такое, фьюз биты. Такое окно появляется, если мы кликнем на иконку Фьюзы:

У некоторых типов микроконтроллеров, часть фьюзов представленных на скрине может отсутствовать, у других наоборот, могут быть дополнительные фьюзы, которых нет на этом рисунке. Фьюзы делятся на несколько групп: Перечислим их так, как они идут на рисунке, слева направо, это Lock Байт, установка lock битов, защищает прошивку от копирования, Low Байт, это Младший байт. High Байт, это Старший байт. Ext Байт, это Дополнительный байт.

Узнать, для чего нужны каждые из этих битов, можно скачав Даташит на данный микроконтроллер. Либо можно воспользоваться Онлайн калькулятором фьюзов, там будет приведено краткое пояснение, для некоторых из фьюз битов. Для того чтобы перейти на эту страницу, нужно набрать Онлайн калькулятор фьюзов в поисковом запросе.

При выставлении фьюзов, нужно быть очень внимательным, потому что ошибочное выставление некоторых из них, приведет к тому, что микроконтроллер залочится, и перепрошить его через последовательный интерфейс (SPI) будет невозможно. В таком случае если вы все же напутали с выставлением фьюзов, поищите среди своих знакомых радиолюбителя, с параллельным (высоковольтным) программатором или Реаниматором МК AVR. Также, если вы случайно выставили тактирование, не от внутреннего генератора МК, а от внешнего кварца, и микроконтроллер перестал быть “виден” при прошивании, нужно будет подключить кварц и 2 конденсатора в соответствии со схемой и распиновкой из даташита.

Выше на рисунке, обведены красным те фьюзы, которые изменять не нужно, иначе микроконтроллер залочится. Это RSTDISABLE, выбор этого бита, отключает работу вывода RESET, и превращает его в еще один вывод порта микроконтроллера. SPIEN, этот бит, собственно и включает последовательное программирование. В некоторых программах-оболочках стоит защита от его изменения. DWEN, это бит служащий для отладки микроконтроллера, если его изменить, МК будет также недоступен для программирования по SPI. Также нужно обратить внимание, что в некоторых программах-оболочках, фьюз биты выставляются инверсно, Uniprof относиться именно к таким программам. То есть в одних, наличие галочки означает, что бит не запрограммирован, а в других наоборот. Для того что не ошибиться, можно ориентироваться по биту Spien, есть на нем галочка или нет, так как если микроконтроллер виден, бит Spien запрограммирован, этот бит бывает установлен по умолчанию. В программе-оболочке Ponyprog, галочки ставятся инверсно относительно Uniprof. Автор статьи — AKV.

Ответы на часто задаваемые вопросы:

1. Для кого предназначен этот FAQ?

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

2. Для чего и от кого делается защита микроконтроллеров?

Многие производители электронных устройств стараются защитить свое устройство от возможности простого копирования его другим производителем. Им навстречу пошли производители микроконтроллеров, введя в функционал своих изделий защиту от копирования программы (микропрограммы) содержащийся в памяти микроконтроллера. Используя эту защиту от чтения микропрограммы (прошивки) производители электронных устройств могут защитить свой продукт от простого копирования другим производителем.

3. Что представляет собой защита от копирования в микроконтроллере, и почему я сам не могу считать защищенную микропрограмму (прошивку)?

Обычно защита от копирования устанавливается во время программирования микроконтроллера путем установки специального бита защиты или нескольких бит в слове конфигурации микроконтроллера. Физически эти биты располагаются в специальных ячейках памяти на кристалле микроконтроллера. Иногда используются другие методы защиты, например защита паролем, но принцип сохраняется. Чтобы снять защиту обычно необходимо изменить значение этого бита или нескольких битов, хотя часто могут использоваться и другие методы считывания содержимого памяти программы микроконтроллера. Обычными методами, например программатором, это сделать не удастся, необходимо сложное дорогостоящее оборудования, которого обычный разработчик электронных устройств не имеет. Поэтому мы, имея необходимое оборудование, знания и опыт, специализируемся на предоставлении подобного рода услуг.

4. Что дает мне снятие защиты от чтения микропрограммы (прошивки)?

Допустим, у Вас есть устройство, которое Вы приобрели у одного из производителей электронных устройств и Вы хотите производить такое же, но модифицированное устройство. Но исходников микропрограммы или готовой прошивки у Вас естественно нет, и Вам будет необходимо полностью с нуля разрабатывать и отлаживать микропрограмму. На это, по сравнению с копированием электронной составляющей устройства (схемы), придется потратить много денег и времени. Пользуясь нашими профессиональными услугами, Вы сэкономите и деньги и время на разработку устройства. При наличии устройства или его электрической схемы мы можем восстановить полностью алгоритм его работы и текст микропрограммы на языке программирования Си или Ассемблер.

5. Какова законность таких действий с точки зрения законодательства?

Все микропрограммы (прошивки) мы считываем по заказу клиента с целью ремонта его устройства, либо для ознакомления с алгоритмом работы микропрограммы. Вся дальнейшая ответственность за незаконное распространение микропрограммы или иные действия с ней или с её помощью ложится полностью на заказчика.

Наша компания работает на территории РФ, поэтому ниже приведем цитату из закона. Законодательство других стран декларирует аналогичную позицию.

Статья 1280 ГК РФ. “Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ”.

2. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения изучать, исследовать или испытывать функционирование такой программы в целях определения идей и принципов, лежащих в основе любого элемента программы для ЭВМ, путем осуществления действий, предусмотренных подпунктом 1 пункта 1 настоящей статьи.

3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой.

6. Что представляет собой дополнительная защита от чтения и почему она лучше обычной?

Дополнительная трёхуровневая защита предназначена для создания условий невозможности чтения микропрограммы (прошивки) известными методами. Она может включать в себя от одного до трёх уровней защиты: защита от вскрытия корпуса, скрытый внутрикорпусной обрыв ножки используемой программатором для чтения, скрытое внутрикристальное удаление логики управления ножкой используемой для чтения.

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

Второй уровень делает невозможной процедуру считывания программатором без специальных дорогостоящих инструментов.

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

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

7. Я хочу установить дополнительную защиту, но я боюсь, что вы считаете мою суперсекретную программу перед установкой защиты. Есть ли какой-то способ установить дополнительную защиту на микросхему, перед тем как я ее окончательно запрограммирую?

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

8. Я боюсь, что после считывания моя программа может быть передана или использована третьими лицами.

Это исключено, мы никогда никому не передаем считанные микропрограммы и восстановленные исходники, не храним и не используем их сами в своих целях.

Вытаскиваем ПО из запароленного микроконтроллера Renesas M16C / Хабр

Есть у меня знакомый, который занимается ремонтом автомобильного железа. Он как-то принес мне микроконтроллер, выпаянный из блока управления автономного отопителя. Сказал, что его программатор это не берет, а ему хотелось бы иметь возможность переливать прошивки туда-сюда, т.к. блоков много, в железе они часто одинаковые, а вот агрегаты, которыми они управляют отличаются. И вроде и блок есть взамен неисправного, но ПО разное и заменить просто так нельзя. Так как задачка была интересной, решил покопаться. Если тема интересна и вам, прошу под кат…

Подопытным оказался M306N5FCTFP. Это микроконтроллер группы M16C/6N5. Ядро M16C/60 разработано Mitsubishi, а т.к. преемником этой компании по части МК с 2003 года является Renesas, то сейчас эти микроконтроллеры известны именно под этим брендом.

Немного о самом микроконтроллере

Камешек представляет собой 16-разрядный микроконтроллер в 100-выводном QFP корпусе. Ядро имеет 1 МБайт адресного пространства, тактовая частота 20МГц для автомобильного  исполнения. Набор периферии так же весьма обширный: два 16-разрядных таймера и возможность генерации 3-фазного ШИМ для управления моторами, всякие UART, SPI, I2C естественно, 2 канала DMA, имеется встроенный CAN2.0B контроллер, а также PLL. На мой взгляд очень неплохо для старичка. Вот обзорная схемка из документации:

Так как моя задача выдрать ПО, то так же весьма интересует память. Данный МК выпускался в двух вариантах: масочном и Flash. Ко мне попал, как выше уже упоминалось, M306N5FCTFP. Про него в описании сказано следующее:

  • Flash memory version
  • 128 KBytes + 4K (дополнительные 4K — так называемый блок А в подарок пользователю для хранения данных, но может хранить и программу)
  • V-ver. (автомобильное исполнение с диапазоном +125°C)

Как вытащить из устройства то, что разработчики втащили

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

Как видно из картинки выше, память разбита на 2 части: пользовательская область, и область загрузчика. Во второй как раз с завода залит загрузчик по умолчанию, который умеет писать, читать, стирать пользовательскую память и общается через асинхронный, синхронный, либо CAN-интерфейс. Указано, что он может быть переписан на свой, а может быть и не переписан. В конце концов это легко проверяется попыткой постучаться к стандартному загрузчику хотя-бы через UART… Забегая вперед: производитель отопителя не стал заморачиваться своим загрузчиком, поэтом копать дальше можно в этом направлении. Сразу оговорюсь, что есть еще способ параллельного программирования, но т.к. программатора для этого у меня не было, я не рассматривал этот вариант.

Вход в режим работы загрузчика обеспечивается определенной комбинацией на входах CNVSS, P5_0, P5_5 во время аппаратного сброса. Дальше либо написать свою утилиту для копирования содержимого памяти, либо использовать готовую. Renesas предоставляет свою утилиту, которая называется «M16C Flash Starter», но функция чтения у нее урезана. Она не сохраняет прочитанное на диск, а сравнивает его с файлом с диска. Т.е. по сути это не чтение, а верификация. Однако есть немецкая свободная утилитка с названием M16C-Flasher, которая вычитывать прошивку умеет. В общем начальный инструментарий подобрался.

О защите от считывания

Все бы было совсем просто, если бы в загрузчике не была предусмотрена защита от несанкционированного доступа. Я просто приведу очень вольный перевод из мануала.

Функция проверки идентификатора

Используется в последовательном и CAN режимах обмена. Идентификатор, переданный программатором, сравнивается с идентификатором, записанным во flash памяти. Если идентификаторы не совпадают, команды, отправляемые программатором, не принимаются. Однако, если 4 байта вектора сброса равны FFFFFFFFh, идентификаторы не сравниваются, позволяя всем командам выполняться. Идентификатор — это 7 байт, сохраненных последовательно, начиная с первого байта, по адресам 0FFFDFh, 0FFFE3h, 0FFFEBh, 0FFFEFh, 0FFFF3h, 0FFFF7h, и 0FFFFBh.

Таким образом, чтобы получить доступ к программе, нужно знать заветные 7 байт. Опять же, забегая вперед, я подключился к МК, используя тот же «M16C Flash Starter» и убедился, что комбинации из нулей и FF не проходят и этот вопрос придется как то решать. Здесь сразу же всплыла мысль с атакой по сторонним каналам. Уже начал прикидывать в голове платку, позволяющую измерять ток в цепи питания, но решил, что интернет большой и большинство велосипедов уже изобретено. Вбив несколько поисковых запросов, довольно быстро нашел на hackaday.io проект Serge ‘q3k’ Bazanski, с названием «Reverse engineering Toshiba R100 BIOS». И в рамках этого проекта автор решал по сути точно такую же задачу: добыча встроенного ПО из МК M306K9FCLR. Более того — на тот момент задача им была уже успешно решена. С одной стороны я немного расстроился — интересная загадка разгадана не мной. С другой — задача превратилась из поиска уязвимости, в ее эксплуатацию, что обещало гораздо более скорое решение.

В двух словах, q3k точно по такой же логике начал изучение с анализа потребляемого тока, в этом плане он был в гораздо более выгодных условиях, т.к. у него был ChipWhisperer, этой штукой я до сих пор не обзавелся. Но т.к. его первый зонд для снятия тока потребления оказался неподходящим и вычленить из шумов что-то полезное у него не получилось, он решил попробовать простенькую атаку на время отклика. Дело в том, что загрузчик во время выполнения команды дергает вывод BUSY, чтобы проинформировать хост о том, занят он, или готов выполнять следующую команду. Вот, по предположению q3k, замер времени от передачи последнего бита идентификатора до снятия флага занятости мог послужить источником информации при переборе. При проверке этого предположения перебором первого байта ключа действительно было обнаружено отклонение по времени только в одном случае — когда первый байт был равен FFh. Для удобства измерения времени автор даже замедлил МК, отключив кварцевый резонатор и подав на тактовый вход меандр 666кГц, для упрощения процедуры измерений. После чего идентификатор был успешно подобран и ПО было извлечено.

Первый блин — граблями

Ха! Подумал я… Сейчас я быстренько наклепаю программку к имевшейся у меня STM32VLDiscovery c STM32F100 на борту, которая будет отправлять код и измерять время отклика, а в терминал выплевывать результаты измерений. Т.к. макетная плата с целевым контроллером до этого подключалась к ПК через переходник USB-UART, то, дабы ничего не менять на макетке, работать будем в асинхронном режиме.

Когда при старте загрузчика вход CLK1 притянут к земле, он понимает, что от него хотят асинхронного общения. Собственно потому я его и использовал — подтяжка была уже припаяна и я просто соединил проводами две платы: Discovery и макетку с целевым M306.

Заметка по согласованию уровней:

Т.к. M16 имеет TTL-уровни на выводах, а STM32 — LVTTL (упрощенно, в даташите подробнее), то необходимо согласование уровней. Т.к. это не устройство, которое, как известная батарейка, должно работать, работать и работать, а по сути подключается разок на столе, то с трансляторами уровней я не заморачивался: выходные уровни от STM32 пятивольтовый МК переварил, в смысле 3 вольта как «1» воспринимает, выходы от М16 подаем на 5V tolerant входы STM32 дабы ему не поплохело, а ногу, которая дергает RESET M16 не забываем перевести в режим выхода с открытым стоком. Я вот забыл, и это еще +2ч в копилку упущенного времени.
Этого минимума достаточно, чтобы железки друг друга поняли.

Логика атакующего ПО следующая:

  1. Устанавливаем соединение с контроллером. Для этого необходимо дождаться, пока завершится сброс, затем передать 16 нулевых символов с интервалом более, чем 20 мс. Это для того, чтобы отработал алгоритм автоопределения скорости обмена, т.к. интерфейс асинхронный, а МК о своей частоте ничего не знает. Стартовая скорость передатчика должна быть 9600 бод, именно на эту скорость рассчитывает загрузчик. После этого при желании можно запросить другую скорость обмена из пяти доступных в диапазоне 9600-115200 (правда в моем случае на 115200 загрузчик работать отказался). Мне скорость менять не нужно, поэтому я для контроля синхронизации просто запрашивал версию загрузчика. Передаем FBh, загрузчик отвечает строкой вроде «VER.1.01».
  2. Отправляем команду «unlock», которая содержит текущую итерацию ключа, и замеряем время до снятия флага занятости.

    Команда состоит из кода F5h, трех байт адреса, где начинается область идентификатора (в моем случае, для ядра M16C, это 0FFFDFh), длина (07h), и сам идентификатор.
  3. Измеряем время между передачей последнего бита идентификатора и снятием флага занятости.
  4. Увеличиваем перебираемый байт ключа (KEY1 на начальном этапе), возвращаемся к шагу 2 до тех пор, пока не переберем все 255 значений текущего байта.
  5. Сбрасываем статистику на терминал (ну или выполняем анализ «на борту»).

Для общения с целевым МК я использовал USART в STM32, для измерения времени — таймер в режиме Input Capture. Единственное, для простоты я измерял время не между последним битом ключа и снятием флага, а между началом передачи и флагом. Причиной было то, что последний бит может меняться, а в асинхронном режиме прицепить вход захвата особо не к чему. В то же время UART аппаратный и время передачи в принципе идентично и ощутимых погрешностей набегать не должно.

В итоге, для всех значений результаты были идентичны. Полностью идентичны. Тактовая частота таймера у меня была 24Мгц, соответственно разрешение по времени — 41,6 нс. Ну ок, попробовал замедлить целевой МК. Ничего не поменялось. Здесь в голове родился вопрос: что я делаю не так, как это делал q3k? После сравнения разница нашлась: он использует синхронный интерфейс обмена (SPI), а я асинхронный (UART). И где-то вот здесь я обратил внимание на тот момент, который упустил вначале. Даже на схемах подключения для синхронного и асинхронного режимов загрузчика вывод готовности назван по-разному:

В синхронном это «BUSY», в асинхронном это «Monitor». Смотрим в таблицу «Функции выводов в режиме Standart Serial I/O»:


«Семён Семёныч…»

Упущенная вначале мелочь завела не туда. Собственно, если в синхронном режиме это именно флаг занятости загрузчика, то в асинхронном (тот, который serial I/O mode 2) — просто «мигалка» для индикации работы. Возможно вообще аппаратный сигнал готовности приемопередатчика, оттого и удивительная точность его поднятия.

В общем перепаиваем резистор на выводе SCLK с земли на VCC, припаиваем туда провод, цепляем все это к SPI и начинаем сначала…

Успех!

В синхронном режиме все почти так же, только не требуется никакой предварительной процедуры установки соединения, упрощается синхронизация и захват времени можно выполнить точнее. Если бы сразу выбрал этот режим сохранил бы время… Я снова не стал усложнять и измерять время именно от последнего бита, а запускал таймер перед началом передачи последнего байта ключа, т.е. включаем таймер и отправляем в передатчик KEY7 (на скриншоте выше, из логического анализатора, видно расстояние между курсорами. Это и есть отсчитываемый отрезок времени).

Этого оказалось более чем достаточно для успешной идентификации. Вот так выглядит перебор одного байта:

По оси абсцисс у нас количество дискрет счетчика, по оси ординат, соответственно, передаваемое значение ключа. Отношение сигнал/шум такое, что даже никаких фильтров не требуется, прямо как в школе на уроке информатики: находим максимум в массиве и переходим в подбору следующего байта. Первые 6 байт подбираются легко и быстро, чуть сложнее с последним: там просто наглый перебор не проходит, нужен сброс «жертвы» перед каждой попыткой. В итоге на каждую попытку уходит что-то около 400 мс,  и перебор идет в худшем случае в районе полутора минут. Но это в худшем. После каждой попытки запрашиваем статус и, как только угадали, останавливаемся. Я вначале вообще просто быстренько ручками перебрал идентификатор, вставляя в excel вывод консоли и строя график, тем более, что это была разовая задача, но уже для статьи решил дописать автоматический перебор, ради красивой консольки…

Конечно, если бы разработчик затер загрузчик (заменил своим), так просто выкрутиться не получилось бы, но в автомобильной электронике частенько МК вообще не закрыты. В частности в блоке управления с другого отопителя, в котором был установлен V850 того же Renesas все решилось подпайкой пары проводов и копированием прошивки штатной утилитой. Это в мире ЭБУ двигателем целые криптовойны. Видимо не нравится производителям явление чип-тюнинга и других видов вмешательства… Хотя это как гонка брони и снаряда — железки круче, дороже, но победителя нет…

Ссылки:

  1. https://www.dataman.com/media/datasheet/Renesas/M16C6N5Group.pdf
  2. https://hackaday.io/project/723-reverse-engineering-toshiba-r100-bios/log/51302-ec-firmware-dumped
  3. https://q3k.org/slides-recon-2018.pdf

Клонирование чипов. |


Привет друзья.
Меня попросили рассказать о клонировании микроконтроллеров. Просили — выполняю!
Кратко о чём я хочу рассказать в данном видео:
Я расскажу две коротенькие истории, чтобы вы лучше поняли, что такое клонирование и как всё происходит.
Второе — я сделаю клон данного устройства, точнее сделаю клон микроконтроллера.

Так же я вам расскажу, что клонирование чипов не всегда возможно, более того, можно сказать даже по другому, практически всегда клонирование чипов не возможно. Я, так же в конце расскажу, какие бывают способы клонирования, даже если производитель не хочет чтобы клонировали его устройство, производитель устройства, не хочет этого, то есть варианты, есть способы, и о них я расскажу дальше. Так же есть способ о котором многие знают, но даже и не догадываются что они его знают, как можно клонировать устройство со 100% результатом. О нем, конечно же я расскажу в самом конце, так что если вам интересно — обязательно досмотрите этот ролик до конца.
Первая история. Представим, что я наконец-то доделал своё устройство, которое я никак доделать не могу. И скажем, продаю его примерно за 100 $. Потом у меня кто-то его покупает, Вася допустим, и Вася смышлёный парень, он видит, что этот микроконтроллер стоит 2 $, дисплей — 3 $, кнопочки вообще копейки, пару транзисторов, пару резисторов. Он понимает, что данное устройство стоит максимум 20 $, как я его мог купить за 100 $. И он думает, нужно сделать копии таких устройств (клонировать чипы) и продавать их не за 100 $ как продаёт бедный инженер Аурел, а продавать их за 50$. Вот он считает, что навар 30 $, всё круто, через годик он на машинке будет ездить, через два уже на хорошей машинке и так далее и тому подобное. Такой вариант — кормить нахлебников — он никого не устраивает. Поэтому производители всех микроконтроллеров устанавливают, точнее задают возможность защиты содержимого микроконтроллера от чтения, конечно же эти защиты можно обойти, но как правило, простыми способами этого не сделать. О способах клонирования чипов я расскажу в самом конце. Всё это приводит к битам защиты, и я на этом сам попался. Принесли отремонтировать плату управления холодильником. Плата работала, индикация работала, единственное что не работало — устройство которое включало компрессор. который гоняет фреон по теплообменнику, который перегоняет тепло из холодильной камеры наружу. Было очень похоже на то, что просто сгорел данный пин микроконтроллера. Был бы у меня исходный код, я бы перекинул управление данным исполнительным устройством на какой-то соседний пин, которых свободных было огромное количество. Но исходного кода естественно у меня не было. Оставался второй вариант — копировать прошивку и залить её в нормальный микроконтроллер, потому что там была, кажется, AtMega8. Естественно у меня этот вариант не получился, потому что стояли биты защиты.
И третий вариант который я попробовал — написать изготовителю и попросить его, чтобы он выслал *.hex файл. Естественно он меня вежливо отшил, сказал что они *.hex не распространяют, никому не отправляют, и если вы хотите — вы можете у нас купить плату. Сказал мне стоимость. Сказал стоимость доставки. Короче, суммы были не маленькие.
То есть вот такая вот реальная ситуация, у меня не получилось это всё сделать. Теперь давайте, все-таки перейдём к самому процессу клонирования чипов. У меня есть плата А, эта плата работает, как вы видите тут меню переключается, всё прекрасно работает. Мне нужно сделать такое же устройство. Устройство сделать просто, у меня плата односторонняя, я вижу трассировку, я просто копирую трассировку, делаю новое устройство, но мне нужно как то сделать чтобы микроконтроллер также функционировал как и микроконтроллер в плате А. То есть для идентичного функционирования мне нужно чтобы fuse биты на обоих контроллерах были идентичные, содержимое flash памяти, там хранится ваша программа, тоже было идентичным, и содержимое eeprom памяти, там могут храниться какие-то важные константы, тоже было идентичным. То есть мне нужно с этого микроконтроллера (микроконтроллер А) считать все три составляющие — fuse, flash, eeprom и в тот микроконтроллер (микроконтроллер В) записать. Лучше записывать таким образом, чтобы сначала записать flash, потом eeprom, ну или наоборот, ну и самым последним самое главное записать fuse. Потому что, если у вас микроконтроллер в плате имеет какой то кварцевый генератор, и он настроен fus-ами для работы от внешнего тактового сигнала, то при программировании микроконтроллера в панельке без кварца, как только вы переключите микроконтроллер для работы от кварца, он уже не запустится, потому что ему нужен внешний тактовый сигнал, которого нет в панельке. Вам придётся его паять в плату, где есть этот сигал, и потом уже зашивать в него eeprom и flash. Поэтому, сначала пишем eeprom и flash пока микроконтроллер работает от внутреннего генератора, потом переносим содержимое fuse, и если всё хорошо, то микроконтроллер, после конфигурирования fuse, просто перестанет определяться, но этого уже и не требуется, так как вы залили в него прошивку до fuse. Когда вы его вставите в плату, он у вас, так как на ней смонтирован кварц, сразу же и запустится.
Давайте непосредственно попробуем всё считать. Я себе сделал папку, вы видите, что она пустая, и попытаюсь считать с микроконтроллера сначала Flash. Выбираем путь, по которому хотим сохранить файл. Нужно как то назвать hex каким-то говорящим названием. Теперь жмём кнопку «Чтение». Вот как видите, у меня здесь появился файл на 9 кБайт.

Также самое читаем и eeprom. У меня конечно же в ней ничего нет, но в вашем случае может быть. Самими последними смотрим fuse. Нажимаем «Чтение», ОК, и fuse можно к примеру ALT+PrtSct и вставить в текстовый документ.

Ну всё, мы скопировали содержимое микроконтроллера.
Теперь я беру и подключаю сюда другой микроконтроллер (микроконтроллер В). У меня другой платы нет, я сделаю вот так — «Стереть всё». Кристалл чист, но для того, чтобы вы видели, что у меня другое устройство, я разверну провод))).

Я беру второе устройство, вставляю его в компьютер, подключаю программатор, устройство абсолютно чистое, ничего у нас не работает, теперь мне нужно сюда залить eeprom, hex, и в конце fuse. То есть я точно также выбираю hex, жму «Программирование», ОК.

Дальше мне нужна eeprom, также выбираю и жму «Программирование». И также мне нужны fuse. То есть я беру сначала читаю то, что у меня установлено, и затем сверяю с тем, что мне нужно. При необходимости их корректирую. У меня всё установлено так как нужно. Ну всё, я вас поздравляю, у вас устройство и чип клонированы, оно работает, и всё классно.

Но это слишком просто, так не бывает. Дело в том, что у любого микроконтроллера есть вот такие два fuse защиты. У других микроконтроллеров механизмы защиты могут быть другими, но все они имеют механизмы защиты. К примеру, я беру и удаляю данные два fuse, я их не то что удалил, я их установил. Они равны значению всегда установленного бита SPIEN. И теперь я хочу сделать всё тоже самое что я делал до этого.

Я создам другой файл, допустим, с окончанием LOCK, и прочту в него.

Как видите всё читается, казалось бы никаких проблем нет, то есть чтение у нас не запрещено, всё классно, НО, если мы сейчас эти два файла откроем в текстовом редакторе. Смотрите. Они разные.

Даже в первой строчке, видим, что здесь 028D, а в этом уже 0F00, то есть программатор считал не нужную информацию, а у микроконтроллера словно включается какой то генератор случайных чисел и он просто плюёт ерундой. Давайте убедимся, что мы считали не то, что нужно, давайте запрограммируем микроконтроллер hex файлом с окончанием LOCK. Убедимся что у нас дисплей не включится. Всё ОК, прошло программирование, прошло верификацию, но дисплей не включается. Чтобы вы не делали, у вас ничего не получится. И я думаю, что многие начинающие сразу подумают, что что-то не так с микроконтроллером, либо программатор не работает, либо ещё что-то. Потому что всё считалось. Поэтому просто берём, читаем у микроконтроллера, который мы хотим клонировать, fuse, и если установлены fuse защиты, то ни flash ни eeprom не имеет никакого смысла читать дальше.
Теперь о том, как же можно считать с залоченного чипа информацию? Скажу сразу, если всё хорошо, то считать её либо не реально, либо сама процедура считывания будет стоить на много дороже чем написание нового софта. Какие бывают варианты обхода битов защиты?
Ну первое — это ошибка, ошибка разработчиков данного чипа. Может быть такое, что разработчики где то ошиблись, и эту защиту как-то можно просто обойти. Такое бывает, но это редкость.
Второе — берут, и на специальном оборудовании, микрон за микроном снимают слоями данный компаунд, и добираются до кристалла. Затем находят область памяти, это тоже какая то ПЗУ (постоянное запоминающее устройство) где хранятся биты конфигурации. И каким то способом, либо лазером, либо электромагнитным импульсом направленным, пытаются изменить состояние бита защиты, затем читают программатором с микроконтроллера прошивку. Естественно что для того, чтобы это сделать, нужно знать топологию микроконтроллера, нужно знать где что находится, где какой бит, возможно также нужно будет испортить огромное кол-во работающих устройство для исследование методом проб и ошибок. Более того, снятие послойное компаунда, для этого нужно иметь супер точное оборудование, это всё стоит огромных денег.
Третий вариант, который у вас всегда будет работать, который я и обещал показать, который 100% работает на всех микроконтроллерах, это изучить, как работает ваше устройство, и не клонировать его чип, а сделать своё новое устройство, которое по функционалу не будет отличаться от данного устройства. Так же будет отвечать на ваши кнопки, на все ваши нажатия. Да, я понимаю, вы чувствуете, что я вас обманул, но не обманывайте и вы себя, потому что простыми способами сделать копию устройства не получится. Потому что никто, ни разработчики, естественно, раз разработчики этого не хотят, то и производители микроконтроллеров никак не допустят того, чтобы кто-то мог взять и спокойно сделать копию микроконтроллера с прошивкой (клонирование чипа).

Рубрики: Радиолюбительская технология | Тэги: AtMega8, AVR, клонирование чипов, Микроконтроллер, программатор avr usb | Ссылка

Обход защиты от считывания • CHIPTUNER.RU

Обход защиты от считывания на Январь 5.1.х/7.2/VS5.1

Рекомендации данного раздела относятся к случаю установленной защиты FLASH контроллера через блокирование внутрисхемной процедуры микроконтроллера Bootstrap Loader – в данном случае программатор не может связаться с контроллером для выполнения чтения и записи программ и не распространяются на случаи защиты самих прошивок FLASH, которые, как правило, выполняются путем их привязки к паспортным данным конкретного контроллера. В этом случае прошивка может быть считана с одного контроллера и перезаписана в другой, но двигатель может не запуститься. 

Механизм защиты описан в User’s Manual Siemens C509 раздел 10.2.1.
В ячейки 6000 – 6009 или C000-C009 заносится следующая информация:

#6000 (#C000) – 23h
#6001 (#C001) – 03h
#6002 (#C002) – 33h
#6003 (#C003) – 13h
#6004 (#C004) – старт. адрес программы, к вып. которой надо перейти (старший байт)
#6005 (#C005) – старт. адрес программы, к вып. которой надо перейти (младший байт)
#6006 (#C006) – длина программы (включая ячейки 6000 – 6009 или C000-C009), к выполнению которой надо перейти (старший байт)
#6007 (#C007) – длина программы (включая ячейки 6000 – 6009 или C000-C009), к выполнению которой надо перейти (младший байт)
#6008,#6009 (#C008,#C009) ‑2 байта контрольной суммы.

Программа размещается в ячейках, начиная с #600A (#C00A).  Очевидно, эта программа должна обеспечить запись/чтение во внешнюю флэш. Для обхода защиты достаточно изменить информацию в любой из ячеек программы.

Для того, чтобы прочитать программу из защищенного от Bootstrap Loader контроллера «ЯНВАРЬ‑5» («МИКАС‑7») или обновить ее, необходимо: 

  • вскрыть контроллер.
  • подсоединить его к программатору.
  • замкнуть на общий вывод (массу), например, пинцетом, один из адресных контактов (2…12, 23, 25…29) микросхемы FLASH (на плате контроллера это квадратная 32 – контактная микросхема, нумерация контактов на микросхеме от точки на микросхеме против часовой стрелки).
  • установить связь с блоком.
  • после входа контроллера в режим программирования убрать адресную перемычку на микросхеме FLASH.

Применительно к контроллерам VS5.1 – процедура полностью аналогична. Замыкать можно контакты 1…8, 18…24, 48. Если расположить ЭБУ разъемом вверх, 1‑й контакт будет верхний в левом ряду (на м/сх обозначен точкой-углублением).

Для исключения повреждения аппаратной части контроллера замыкание и размыкание контактов микросхемы FLASH необходимо выполнять с особой осторожностью. 

Для того, чтобы убрать защиту с программы защищенного от Bootstrap Loader контроллера необходимо «Обнулить» в файле или во FLASH контроллера ячейки #6000 и #C000, но при этом программа контроллера в процессе работы будет формировать соответствующий код «Ошибка ПЗУ контроллера». 

1. Январь 5.хх  

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


2. VS5.1 

Все точно так же как и в Январе 5 (естественно), только удобнее – точки располагаются ближе. 

Восстановление доступа к заблокированным ЭБУ

Январь 5.1

Если ЭБУ отказывается программироваться, необходимо разобрать ЭБУ и попробовать на время установки соединения перемкнуть между собой контакты, выделенные зеленым цветом. В примере на рисунке производится замыкание на массу одного из подходящих для этой цели адресных контактов 3 – 12, 23). Сразу после установки соединения убрать перемычку.

 

 

VS5.1 и Январь 7.2

Необходимо разобрать ЭБУ и попробовать на время установки соединения перемкнуть между собой контакты, выделенные зеленым цветом. В примере на рисунке производится замыкание на массу одного из подходящих для этой цели адресных контактов 1 – 8, 18 – 25, 48). Сразу после установки соединения убрать перемычку.

 

 

Обратите внимание:

необходимо соблюдать особую осторожность при проведении вышеуказанных действий! Замыкание между собой других элементов схемы ЭБУ может привести к выходу его из строя!

 

Наука и жизнь в России » Архив сайта » Reverse ingeneering взлом микроконтроллеров

Информацией по этой теме я хотел поделиться давно, но как и многие другие проекты, он долго ждал своего часа. Когда лучше делиться чем-то новым? — я думаю что как можно раньше, информация устаревает, а через много времени даже делается ненужной. Но тогда я не мог.

Я думаю, что был одним из тех, кто пытался слить прошивку из микроконтроллера, получить из нее исходный код и переделать под свои задачи. Сам термин Reverse ingeneering подразумевает обратную разработку проекта с целью завладеть чужими интеллектуальными данными. Во многих случаях бывает сложнее написать программу с нуля, чем переделать готовую, а в некоторых случаях вообще невозможно понять алгоритм работы устройства без наличия кода микроконтроллера. Можно также просто клонировать чужую интеллектуальную разработку с целью наживы.

В советские годы наши ученые уделяли достаточно внимания изучению и копированию зарубежных микросхем с целью выпуска отечественных аналогов. В специализированных лабораториях удалялся корпус, защищающий кристалл, и потом послойно фотографировалась маска полупроводников на кристалле — таким образом считывалась вся структура кристалла.

С тех далеких времен много воды в реке утекло, простые микросхемы заменили микроконтроллеры, ПЛИСы и другие программируемые устройства. Теперь не требовалось изготавливать для каждой отдельной задачи новую матрицу, а для реализации задачи достаточно стало написать программу и занести ее в память микросхемы. Это удешевляло производство, ускоряло процесс разработки, но позволяло копировать чужую интеллетуальную собственность. Для избежания этого разработчики программируемых устройств придумали защиты от копирования — биты защиты или более сложные.

Мне приходилось иметь дело с микроконтроллерами семейств PIC, AVR, MSP430, где результат меня порадовал. А также holtek и  XMEGA от Atmel, где результат получался половинчатый или вовсе отсутствовал.

Давайте рассмотрим на  примере. Мы купили дорогое электронное устройство, разбираем. Находим программируемую микросхему(их может быть несколько), скачиваем datasheet на нее. Мне надо получить с нее прошивку и переделать алгоритм работы. Итак, что нас ждет: практически любой производитель товара защищает микроконтроллер от считывания, поэтому, будьте уверены, что в микроконтроллере установлен как минимум бит защиты.

Для более сложной защиты микроконтроллера используется кодирование данных с ключом шифрования. В каждом отдельном чипе производителем устанавливается свой ключ шифрования. При заливке прошивки, прошивка преобразуется по определенному алгоритму через этот ключ шифрования. В результате в памяти микроконтроллера хранится набор цифр. Даже при считывании прошивки, ее не получится раскодировать. Одним из представителей является семейство XMEGA от Atmel. Но технологии не стоят на месте, и то, что было невозможно три года назад, может быть вполне возможно сейчас.

Если микросхема затерта, и не удается определить ее название, рисуем электрическую схему подключения микроконтроллера, по его выводам питания и размерам корпуса практически всегда можно однозначно определить семейство. В свое время я перелопатил горы datasheets, но нашел нужный микроконтроллер.

Пытаемся считать прошивку и fuses с помощью программатора. Если микросхема имеет какую-либо защиту, не сильно расстраиваемся.

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

Но чаще применяется декапсуляция (получение прямого доступа к кристаллу химическим травлением, механической обработкой, воздействием температуры) в паре со следующим:  после декапсуляции напаивается или удаляется какая-либо перемычка или происходит облучение ультрафиолетом отдельной области битов защиты.

Практический пример декапсуляции можно посмотреть тут http://geektimes.ru/post/127281/. Декапсуляция и все эти способы требуют дорогостоящего оборудования и обширных знаний для каждой отдельной микросхемы (то есть горы убитых на практике микросхем). Благо, что есть фирмы, которые занимаются этим делом. Большинство из них находятся в Китае, цены в них значительно ниже чем в других фирмах, значит с ними мы и будем работать. Сайт, указанный выше, дает ссылку на  http://www.mefas.com/. Лично я пользовался услугами другой фирмы — http://www.mikahk.com или http://www.break-ic.com/faq.asp — это одна и та же фирма, имеющая разные доменные имена сайта. Заходим на http://www.mikahk.com и смотрим, какие микросхемы они умеют взламывать…. Там очень большой список различных производителей, и еще больший микросхем. Я не буду его здесь приводить, перейдите по ссылке.

Итак, микросхема PIC16F914 в далеком 2012 году обошлась в 170 долларов. MSP430F415 в 800 долларов. С тех пор цены выросли в полтора раза. Люди в этой фирме умные, переписываться с ними легко на английском языке. Я отправил письмо им на mail типа «I need the Hex file from chip PIC16F914». Они сразу написали стоимость, вероятность считывания почти 100 процентная. Присылать чип только по EMS (дешевле) или DHL почте на адрес: Mikatech Innovative Limited 24E, Lily Silver International Building, Buji, Shenzhen, Guangdong, China 518112. Оплату производил в Сбербанке : перевод за границу без открытия счета в долларах.

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

Итак, у нас есть hex (или bin) файл, полученный таким образом или скачанный из интернета без исходного кода. Заливаем его в другой такой же контроллер и смотрим, всё ли работает. Если всё работает, дизассемблируем его. Производителями микроконтроллеров в большом количестве выпускаются различные компиляторы ассемблерного и си кода, но обратный процесс преобразования из машинного кода в язык, на котором пишут программы, разработчикам микроконтроллеров не нужен. И как следствие — это программы сторонних производителей. Их весьма не много.

А если их нет — преобразование можно производить и вручную — например, взяв datasheet на микроконтроллер, можно найти его набор ассемблерных команд и их интерпретацию компилятором. Команды бывают различной размерности, это надо учитывать, чтобы не допустить ошибок при декодировании. Было бы совсем не сложно и написать свою собственную программу дизассемблирования. Но мне ничего этого не потребовалось, для работы с PIC16 есть Picdisasm106.zip, для всех других производителей и семейств я использовал IDA PRO (в 2012году у меня был образ ida61fix.iso). К нему я так же нашел Hex-Rays decompiler — это плагин, позволяющий получить из ассемблерного кода программы код на си. В то время с помощью него я занимался созданием си кода компьютерных программ на платформе x86, но си код для микроконтроллеров он делать не мог (не знаю, может быть, сейчас всё изменилось).

К тому же не все типы микроконтроллеров, выпущенные разработчиками, были в IDA PRO. Это означает, что некоторые регистры микроконтроллера при дизассемблировании будут иметь другое имя, отличное от стандартного и потребуется вручную его переименовывать. Я же создавал новый файл шаблона регистров для микроконтроллера на примере существующих, отсутствующего в списках, называл его нужным именем. Потом у меня появлялся в списках отсутствующий микроконтроллер в IDA PRO. То есть, вы можете добавить микроконтроллер любого производителя, отсутствующего в списках, что не может не радовать. После получения кода из этой программы, код надо адаптировать под среду ассемблера, в которой вы работаете (написать необходимые директивы препроцессора), также, не исключено, что в коде будут ошибки. Под исправленный код создаем проект и компилируем. Полученный hex файл и исходный сравниваем через программу сравнения файлов WinMerge. Находим отличия, и подгоняем так ассемблерный текст, чтобы после компилирования hex файлы стали одинаковы.

Далее в симуляторе (программном или аппаратном) в ходе пошаговой отладки пытаемся понять алгоритм текста, пишем комментарии и после понимания переписываем код на си — и заливаем в микроконтроллер. Переписывание кода на Си самый длительный процесс во всем этом, поэтому рекомендую исправлять код ассемблера без переделки на Си. При исправлении ассемблерного кода обратите внимание, по каким адресам будут располагаться данные во flash и ОЗУ, дело в том что они начнут смещаться относительно исходных и в случае косвенной адресации будет сбой. А косвенная адресация используется всегда, поэтому создавайте метки и указывайте конкретно адреса, с которых начинается каждый кусок подпрограммы.

На самом деле это не сложно. Вот и всё, если будут вопросы — спрашивайте).

Взлом прошивок USB-устройств | Securelist

В этой статье я хочу продемонстрировать извлечение прошивки из защищенного USB-устройства, работающего на микроконтроллере Cortex M0.

Кто взламывает игровые приставки?

Производство пиратских, нелицензированных изделий — многомиллиардная индустрия и на рынке можно найти аксессуары практически для всех когда-либо вышедших игровых приставок. Здесь и устройства, позволяющие воспроизведение копий лицензионных игр из «бэкапов» с произвольных носителей, и контрафактные геймпады, и различные адаптеры для игровых контроллеров (в том числе дающие преимущество перед другим игроками), и гаджеты для применения читов в офлайн- и онлайн-играх. Разумеется, все эти устройства продаются вопреки желанию производителей игровых приставок.

Игровые консоли, как и двадцать лет назад, представляют собой проприетарные системы, производители которых навязывают свои правила миллионам пользователей: приставка должна исполнять только подписанный код, на ней можно играть только в легально приобретенные (и лицензионные) игры, и только «официальными» аксессуарами. В некоторых странах, взлом собственной приставки является нарушением закона.

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

Защита геймпада DualShock 4

Те читатели, которые следят за моим аккаунтом в Twitter, знают, что я давно увлекаюсь игровыми приставками, их реверсом, а также всем, что связано с консолями, в том числе, неофициальными игровыми устройствами. В первые дни существования PlayStation 4 публично известная уязвимость в ядре FreeBSD, на котором основано ядро этой приставки, позволила мне (и многим другим исследователям) приобщиться к архитектуре и принципам работы консоли Sony. Я провел множество исследований, в том числе, изучил принципы аутентификации игровой периферии и то, как PS4 отличает лицензированные устройства от нелегальных. Ранее я проводил подобные исследования других приставок, и авторизация периферийных устройств у PS4 оказалась хоть и проще чем у Xbox 360, но не менее эффективна.


Схема авторизации USB-аксессуаров PlayStation 4

PS4 посылает 0x100 случайных данных, в ответ на которые DualShock 4 генерирует подпись RSASSA-PSS SHA-256 и присылает её вместе с криптографическими константами N и E (публичный ключ), которые нужны для верификации этой подписи. Эти константы уникальны для каждого выпущенного геймпада. Также геймпад посылает подпись для верификации N и E, алгоритм тот же — RSASSA-PSS SHA-256, но криптографические константы едины для всех приставок и хранятся в ядре приставки.

Таким образом, чтобы авторизовать свое устройство недостаточно взломать ядро приставки — нужно иметь приватный ключ геймпада. И если кто-то всё-таки взломает геймпад и получит его, то у Sony остается возможность заблокировать ключ с обновлением прошивки. Также, если в течении 8 минут приставка не получает авторизационное сообщение от геймпада, то она прекращает «общение» с ним, и чтобы продолжить использование устройства нужно отключить его от консоли и подключить заново. Симуляция этого процесса очень раздражала владельцев первых нелегальных геймпадов.

Слухи о суперподделке DualShock 4

Схему аутентификации DualShock 4 не могли взломать довольно долго. Но в какой-то момент я услышал, что на рынке появились поддельные геймпады, которые выглядят и работают в точности, как оригинальные. Мне захотелось посмотреть на них своими глазами и, оформив несколько заказов на китайских торговых площадках, я стал ждать.

Время ожидания было решено скрасить поиском подробной информации о подделках. После некоторого количества поисковых запросов, я наткнулся на контроллер Gator Claw.


Неавторизированный геймпад Gator Claw

Интересным в нем было то, что, судя по обсуждению контроллера на Reddit, сначала он работал, как и другие неавторизованные геймпады — по 8 минут, но разработчики смогли это исправить в обновлении прошивки. На сайте магазина была доступна ссылка на файл обновления и руководство по его установке, которые я и скачал.


Инструкция по обновлению геймпада Gator Claw

Основы анализа embedded прошивок

Первым делом я решил взглянуть на секцию ресурсов программы, устанавливающей обновление прошивки и сразу сделал несколько интересных открытий.


Прошивка, найденная в ресурсах программы обновления Gator Claw

Читатели, знакомые с программированием embedded-устройств, наверняка узнают этот формат. Это файловый формат Intel HEX который часто применяется для программирования микроконтроллеров и многие компиляторы, например, GNU Compiler, могут выводить скомпилированную программу в таком формате. Также мы можем видеть, что начало этой прошивки не имеет большой энтропии и последовательности байтов легко различимы, что означает отсутствие шифрования или сжатия. После декодирования Intel HEX стрима и загрузки в редактор (010 Editor умеет открывать файлы прямо в таком формате) мы можем взглянуть на прошивку. Что это за архитектура? ARM Cortex-M настолько распространен что я различаю его с первого взгляда.


Прошивка Gator Claw (слева) и векторная таблица ARM Cortex-M (справа)

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

Помимо этого, в ресурсах был найден файл конфигурации с описанием различных микроконтроллеров. Скорее всего, разработчики программы для обновления задействовали некий общедоступный код от производителя микроконтроллера и наиболее вероятно, что этот файл конфигурации шел вместе с этим публичным кодом.


Файл конфигурации с описанием различных микроконтроллеров

После поиска идентификаторов из файла конфигурации мы находим сайт производителя этих микроконтроллеров – Nuvoton. Продуктовая линейка, техническая документация и SDK свободно доступны на сайте, и, более того, для их скачивания не нужно принимать какое-либо соглашение.


Сайт производителя микроконтроллеров Nuvoton

Благодаря этому у нас есть прошивка, мы знаем архитектуру и производителя микроконтроллера, у нас есть сведения о базовом адресе, вершине стека и точке входа. Доступной информации более чем достаточно, чтобы загрузить прошивку в IDA Pro и приступить к анализу.

В процессорах ARM поддерживаются два режима исполнения кода с различными инструкциями: ARM (32-битные инструкции) и Thumb (16-битные инструкции, дополненные Thumb-2 32-битными инструкциями). Cortex-M0 поддерживает только режим Thumb, поэтому мы установим переключатель в Processor options – Edit ARM architecture options – Set ARM instructions на NO во время загрузки прошивки.

Мы видим, что прошивка хорошо загрузилась по базовому адресу 0, автоматический анализ распознал практически все функции. И теперь встает вопрос – как правильно анализировать прошивки?


Одна из функций, присутствующих в прошивке

Если изучить эту прошивку, то мы увидим, что она совершает большое количество операций чтения и записи к памяти с базовым адресом 0x40000000. Это базовый адрес где находится память, отведенная под ввод-вывод (memory mapped input output — MMIO). Через эти адреса предоставляется доступ ко всем периферийным компонентам, которые есть у микроконтроллера. Все что делает прошивка происходит через доступ к MMIO-регистрам.


Схема адресов периферийных устройств

Найдя в документации адрес 0x40000000 мы узнаем, что этот микроконтроллер серии M451. Зная семейство микроконтроллера, можем скачать SDK и образцы кода для этой платформы. Внутри SDK мы находим заголовочный файл с объявлением всех MMIO-адресов, всех битовых полей и структур. Так же мы можем скомпилировать образцы кода и все библиотеки, а затем сравнить их с функциями в нашей IDB, или мы можем просто искать имена MMIO адресов в исходном коде и сравнивать их с нашим ассемблерным кодом. Это превращает процесс обратной разработки прошивки в простой и легкий процесс. Анализ был бы намного сложнее если бы у нас не было информации об архитектуре и модели микроконтроллера, и MMIO-регистрах. К слову, именно поэтому многие производители делятся SDK только после подписи NDA.


Процесс нахождения библиотечных функций в коде прошивки

Но что по-настоящему заинтересовало меня в этой прошивке — одна неиспользуемая строка с именем крупного производителя электроники (наиболее известного своими логическими анализаторами, но, как оказалось, имеющего и игровое подразделение). Судя по всему, она должны была быть частью USB Device Descriptor, но этот дескриптор не был использован.

В тени гиганта

Мне удалось найти магазин с огромным ассортиментом игровых аксессуаров, продаваемых под единой торговой маркой. Среди продаваемых аксессуаров числились два десятка различных адаптеров для подключения геймпадов одной приставки к другой. К примеру, отдельный продукт для подключения геймпада Xbox 360 к приставке PS4, отдельный продукт для подключения геймпада PS3 к приставке Xbox One, и многие другие, включая «все в одном». Также ассортимент продукции включает адаптеры для подключения клавиатуры и мыши к консолям PS4, Xbox One и Nintendo Switch, различные игровые геймпады и печатные платы для создания своих аркадных контроллеров для приставок. Все продукты шли с обновлениями, аналогичными тому, которое шло с Gator Claw, но с существенным отличием – все прошивки были зашифрованы.


Пример инструкции и зашифрованной прошивки из ресурсов программы обновления к одному из продуктов

Теперь попробуем найти фотографии печатных плат аркадных контроллеров, что позволит оценить схему устройства, не покупая и не разбирая его. Скорее всего их дизайн идентичен дизайну Gator Claw. На найденных фотографиях мы можем видеть два микроконтроллера: один из них должен быть Nuvoton M451, а другой – вспомогательный, для секретов: производители понимают, что конкуренты могут изучить их прошивку, и чтобы предотвратить это используют второй микроконтроллер. Забегая вперед, скажу, что в нашем случае он тоже присутствовал. Данные для аутентификации передаются в него по протоколу I2C и после получения отправляются обратно на приставку.

Поскольку все дорожки идут к микроконтроллеру под черной эпоксидной смолой, мы можем заключить, что это главный микроконтроллер. А микроконтроллер с четырьмя желтыми ножками соответствует требованиям для работы по протоколу I2C и является вспомогательным.


Примеры внутреннего дизайна выпускаемой продукции

Внутри контроллера

К этому моменту я наконец получил посылку из Шэньчжэня, и надо сказать, что контрафактный гаджет очень сложно отличить от оригинального DualShock 4: геймпад выполнен из качественных материалов, touchpad работает, динамик и гарнитура тоже.


Контрафактный DualShock 4 (вид снаружи)

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


Контрафактный DualShock 4 (вид на главную плату)

Я припаял провода к отладочным площадкам и подключил программатор. Программатор определил устройство, но security lock был установлен.


Программатор определил микроконтроллер и включенный Security Lock

Метод взлома прошивок USB-устройств

Дизайн USB-протокола определяет две сущности — хост и остальные устройства, которые подключаются к нему. Они, в свою очередь, разделяются на классы: hub, human interface, printer, imaging, mass storage device и другие.


Схема подключения USB устройств

Общение между устройствами и хостом происходит посредством односторонних и двухсторонних каналов. Под каналом мы подразумеваем передачу данных между программой на хосте и конкретным «конечной точкой» на устройстве. Таких точек может быть несколько для передачи различных данных.


Схема типов передачи данных

Существует четыре типа передачи данных:

  • Control Transfers (используется для конфигурации)
  • Bulk Data Transfers (большие количества последовательных данных)
  • Interrupt Data Transfers (используются для своевременной и точной передачи данных)
  • Isochronous Data Transfers (беспрерывный поток данных)

Все USB-устройства должны иметь особый канал на нулевой конечной точке, зарезервированный для конфигурации устройства.

Эти типы передачи данных осуществляются посредством пакетов, представленных на рисунке ниже:


Пакеты, задействованные в протоколе USB

По факту, USB-протокол — это машина состояния, и в этой статье мы не будем останавливаться на каждом из этих пакетов. Ниже представлен пример осуществления Control Transfer:


Control Transfer

Устройства могут содержать уязвимости в каждом из четырех типов передачи данных, но эти типы опциональны, к тому же их наличие и применение будет сильно отличаться от устройства к устройству. Но все устройства поддерживают Control Transfers и формат, по большей части, един для всех устройств, что делает данный тип передачи данных наиболее интересным для анализа на наличие уязвимостей.

Диаграмма ниже изображает формат SETUP-пакета, который используется для выполнения Control Transfer.


Формат SETUP-пакета

SETUP-пакет занимает 8 байт и может предоставлять различные данные в зависимости от типа запроса. Некоторые из них едины для всех устройств (например, дескрипторы), другие зависят от класса устройства или желания производителя. Размер передаваемых/получаемых данных задается 16-битным словом и также передается в SETUP-пакете.


Примеры запросов

Подводя итог: Control Transfers используют простой протокол, поддерживаемый всеми USB-устройствами, которые могут иметь множество дополнительных команд, и мы контролируем размер данных. Все это делает Control Transfers идеальной целью для фаззинга и глитчинга.

Эксплуатация

Для взлома поддельного геймпада мне не пришлось прибегать к фаззингу т.к. я нашел баги еще во время просмотра кода прошивки Gator Claw.


Уязвимый код в обработчике HID реквестов

Функция HID_ClassRequest() написана для симуляции работы оригинального геймпада DualShock 4, и поддерживает минимум необходимых запросов для работы с приставкой PlayStation 4. USBD_GetSetupPacket() получает SETUP-пакет и в зависимости от типа переданного репорта либо получит, либо отправит данные функциями USBD_PrepareCntrlIn() и USBD_PrepareCntrlOut(). Как можно заметить, запрошенный размер данных не проверяется и это должно дать нам возможность читать часть внутренней памяти, где хранится прошивка, а также читать и писать в начало SRAM-памяти.


Переполнение буфера в процессе Control Transfer

Размер DATA-пакета задается в USB Device Descriptor (который также получается с помощью Control Transfer) но, похоже, что остается не учтен тот факт, что этот размер указывает на размер одного пакета, а их может быть сколько угодно в зависимости от размера, заданного в SETUP-пакете.

Примечательно, что образцы кода, размещенные на сайте Nuvoton, также не содержат проверок на размер и могут привести к большему количеству багов в различных проектах из-за копирования этого кода.


Эксплуатация переполнения буфера в SRAM памяти

SRAM (Static random access memory) — это оперативная память, в которой помимо прочего находится стек. Очень часто SRAM также является исполняемой памятью (настраивается), обычно это делается для улучшения производительности – основная прошивка может скопировать в SRAM часто вызываемый код, например, код Real-Time Operating System. Нет гарантий, что вершина стека будет находиться в достижимых пределах переполнения буфера, но вероятность этого велика.

Неожиданно, но главным препятствием на пути к эксплуатации уязвимостей в прошивках USB-устройств являются операционные системы. Нижеперечисленное характерно для Windows, но думаю, что актуально и для Linux-based систем без специальных исправлений.

Во-первых, ОС не позволяет прочесть больше 4 килобайт во время передачи данных Control Transfer. Во-вторых, по моему опыту ОС не позволяет записать больше одного пакета с данными во время Control Transfer. В-третьих, USB-устройство может использовать «скрытые» запросы, которые ОС откажется посылать.

Это легко продемонстрировать на примере устройств HID (Human Interface Device), к которым относится геймпад. У них есть дополнительные дескрипторы: HID Descriptor, Report Descriptor, Physical Descriptor. Второй из списка отличается от каких-либо других дескрипторов и состоит из программных единиц, описывающих доступные репорты. Если запрос не описан в Report Descriptor, то в таком случае ОС откажется его выполнить даже если он обрабатывается в устройстве. Все это противодействует нахождению и эксплуатации уязвимостей.

Чтобы решить эту проблему без необходимости разбираться и перекомпилировать ядро Linux, я воспользовался low end инструментами которые были у меня под рукой: плата Arduino Mega + USB Host Shield (общая стоимость — менее 30 $).


Схема подключения устройств

После подключения устройств по представленной выше схеме, я воспользовался Arduino для выполнения Control Transfer без каких-либо вмешательств со стороны операционной системы.


Arduino Mega + USB Host Shield

Поддельный геймпад содержал те же уязвимости что и Gator Claw, и первое что я сделал — «сдампил» часть прошивки.


«Сдампленная» часть прошивки

Для нахождения базового адреса дампа нашей прошивки достаточно найти структуру с указателями на известные данные. После этого мы можем посчитать дельту и загрузить полученную часть прошивки в IDA Pro.


Структура с указателями на известные данные

Дамп прошивки позволил нам узнать адрес функции printf(), которая выводит в UART информацию, необходимую для контроля качества. Также анализ дампа позволили найти аналог функции hexdump(), что полностью освобождает нас от необходимости написания шеллкода.


Нахождение функций, облегчающих эксплуатацию

После нахождения контактов UART на плате геймпада, припаивания проводов и подключения их к TTL2USB адаптеру мы видим вывод в терминале.


Стандартный UART вывод при включении геймпада

Стандартная библиотека для микроконтроллеров Nuvoton идет с очень удобным обработчиком Hard Fault исключений, который выводит дамп регистров. Это сильно облегчает эксплуатацию и позволяет отлаживать эксплойт.


Вывод в UART при Hard Fault исключении, вызванным перезаписью стека

Финальный эксплойт для дампа прошивки:


Эксплойт и шеллкод для получения дампа прошивки по UART

Но этот способ дампа нельзя считать полноценным, поскольку серия микроконтроллеров Nuvoton M451 позволяет использовать две различные прошивки: основную (APROM) и мини-прошивку для DFU-обновлений (LDROM).


Схема Flash и системной памяти Nuvoton M451 в различных режимах исполнения

Эти прошивки транслируются на одни и те же адреса памяти, поэтому в зависимости от текущего режима можно прочесть только одну из них. Для того, чтобы получить дамп прошивки LDROM, нам нужно отключить security lock и прочитать Flash-память с помощью программатора.


Шеллкод, снимающий security lock

Криптофейл

Изучение прошивки обновлений (LDROM) показало, что это стандартный код от Nuvoton, но с добавленным шифрованием обновлений прошивок.


Схема криптографического алгоритма шифрования обновлений прошивок

Шифрование представляет собой кастомный блочный алгоритм, выполненный в режиме сцепления блоков шифротекста, длина которых составляет всего 32 бита. В этот алгоритм предоставляются ключ, который является текстовым (ASCII) идентификатором продукта, и массив инструкций, которые определяют, какое преобразование сделать с текущим блоком. После достижения конца ключа и массива, их позиция устанавливается на начальную. Список преобразований включает в себя шесть операций: xor, subtraction, subtraction (reverse), и повтор этих преобразований с переустановкой байт. Так как в прошивках присутствуют большие области, состоящие из нулевых байт, это позволяет с легкостью посчитать секретные составляющие этого алгоритма.


Раскрытие ключа шифрования обновления прошивки

Применение алгоритма, извлеченного из прошивки контрафактного геймпада, ко всем прошивкам аксессуаров, доступных на сайте OEM-производителя, показало, что они все используют этот алгоритм шифрования. Это позволяет высчитать ключи шифрования для всех устройств и расшифровать все представленные прошивки. Таким образом, алгоритм, вложенный в контрафактный продукт поставил под угрозу безопасность всех продуктов производителя.

Заключение

Пост получился очень большим, но я хотел подготовить его для наиболее широкой аудитории. В этой статье я продемонстрировал полный процесс анализа embedded-прошивок, поиска и эксплуатации уязвимости для получения дампа, исполнения произвольного кода на USB-устройстве. Хоть глитчинг-атаки не вошли в статью, они тоже очень эффективны при взломе USB-устройств. Для желающих узнать об этом больше рекомендую ознакомиться с этим видео. А тем, кто задался вопросом, как пираты получили ключи и алогритм из DualShock 4, советую почитать этот материал.

Что касается тайны со вспомогательным микроконтроллером, то оказалось, что, во-первых, он присутствует не во всех устройствах, а во-вторых, добавлен всего лишь для запутывания и не хранит никаких секретов, выполняя лишь операции SHA1 и SHA256. Контроллер Nuvoton M451, может быть объектом для дальнейших исследований т.к. во время этого исследования он продемонстрировал некоторые признаки, которые могут свидетельствовать о наличии архитектурных уязвимостей.

Покупателей контрафактных геймпадов не ждет ничего хорошего: Sony заблокирует нелегально используемые ключи, и пользователи останутся без рабочего контроллера.

Программы для радиолюбителей.

1) Atmel Studio
Производитель Atmel, приложение служит в качестве среды разработки приложений для устройств ARM, AVR и контроллеров Cortex-M. Программа распространяется бесплатно.

 

 

 

 

 

 

 Скачать программу вы можете с официального сайта Atmel Studio.

2) AVRDUDE

Интерфейс программы консольный, предназначена, чтобы изменять и записывать данные в памяти устройств c AVR архитектурой. В программе применяется технология программирования непосредственно в самой схеме. Приложение на английском, но существуют русификаторы. Распространение свободное.

 

 

 

 

 

Скачат программу AVRDUDE.

 

3)WinAVR
Исходный код программы открыт и свободен для редактирования – это позволяет подправить ее под свои потребности. Служит для прошивки Atmel контроллеров серии AVR. Распространяется свободно и бесплатно.

 

 

 

 

  

Скачат программу WinAVR.

4)BascomAVR

Выполняет роль среды написания кода к Atmel устройствам AVR серии. Язык написания кодов программы, похож на Бэйсик. Доступ к ней ограничен, но есть и свободная версия, без ряда функций и максимальным кодом в 4 килобайта.

 

 

 

 

 

 Скачат программу BascomAVR.

 

5)CodeVisionAVR
Программа проста в освоении и способна работать со всеми контроллерами AVR от IDE. В результате получается короткий и емкий код, но не слишком изящный, зато работает. Доступ к ней платный, есть свободная пробная версия, с максимальным кодом в 4 килобайта.

 

 

 

 

 

  

Скачать программу CodeVisionAVR.

6)VM LAB

Комплекс утилит для создания и настройки кода программы, на ряду с этим создает модель работы устройства с контроллерами AVR серии. Софт распространяется свободно.

 

 

 

 

 

   

Скачать программу VM LAB.

7)MPLAB
Работает с продукцией компании Microchip как среда для интеграции кода непосредственно в чип. Бесплатная в распространении.

 

 

 

 

 

 

Скачать программу MPLAB.

 

8)WinPic800
Служит для перепрошивания контролирующих компонентов из серии контроллеров PIC. Комплект в свободном онлайн доступе. Есть русификаторы.

 

 

 

 

 

 

Скачать программу WinPic800.

9) PICPgm
Очень качественный продукт с высоким качеством работы и скоростью написания кода, стабильно работающий. Служит для перепрошивки PIC-микроконтроллеров. Свободно распространяется.

 

 

 

 

 

  

Скачать программу PICPgm.

10) CooCoxCoIDE
Работает с устройствами в чью архитектуру заложен ARM, как программная среда с высокой степенью интеграции.

 

 

 

 

 

 

Скачать программу CooCoxCoIDE.

11) Keil uVision
Целый комплект программ утилит для прохождения всех по написанию управляющего софта для микроконтроллеров всех производителей. Этот комплект не бесплатный, но, чтобы ознакомиться есть демо-версия, в которой код ограничен 32 килобайтами и еще несколькими параметрами.

 

 

 

 

 

 

Скачать программу Keil uVision.

 

12) IAREmbedded
Программирование происходит на популярных языках программирования C, а также C++, и на ассемблере. Работает с разными производителями и семействами контроллеров. Распространение продукта платное, также доступна и версия свободного доступа, но с урезанным размером кода.

 

 

 

 

 

 

Скачать программу I AR Embedded.

 

13) Flow Сode
Один из самых известных графически оформленных инструментов для создания ПО к микроконтроллерам. Возможно приобретение русской версии. Распространяется за деньги, но доступна и свободная версия, ограничивающая серию PIC.

 

 

 

 

 

 

 

Скачать программу Flow Сode.

 

15) AlgorithmBuilder
Имеет оформленную визуальную оболочку и работает с AVR устройствами от отечественного производителя. Распространяется бесплатно.

 

 

 

 

 

 

 

 

Скачать программу AlgorithmBuilder.

 

16) MikroC
Пакет инструментов с редакторами кода, библиотеками с готовыми функциями, отладчиками и компилллирующими пакетами. Распространяется за деньги, но есть и бесплатная версия, только ограниченная.

 

 

 

 

 

 

Скачать программу MikroC.

17) ICProgramm
Один из популярнейших механизмов с оболочкой для создания к микроконтроллерам программного обеспечения всех видов и производителей. Русифицированная версия. Распространяется без ограничений.

 

 

 

 

 

 

 

Скачать программу ICProgramm.

18)PonyProgramm 2000
Программатор для работы с устройствами памяти и микроконтроллерами многих фирм через последовательный доступ. Много встроенных функций и простота в использовании. Распространяется бесплатно.

 

 

 

 

 

 

Скачать программу PonyProgramm 2000.

19) Sina Programm
Это графическая рубашка для консольного проекта AVRdude, со встроенным и удобным fust счетчиком переключателей. Распространяется бесплатно.

 

 

 

 

 

 

 

Скачать программу Sina Programm.

  20) UniProf
Очень прост в использовании, распространяется абсолютно свободно и работает со всеми устройствами серии AVR.

 

 

 

 

 

 

Скачать программу UniProf.

21) Code Composer Studio
Это мощная комплекс программного обеспечения для программирования и прошивки от производителя TexInstInc. Для использования нужно купить. Есть пробная версия с ограничениями со свободным доступом.

 

 

 

 

 

 

 

Скачать программу Code Composer Studio.

22) Tiva Ware
Очень хорошие и удобные специально под TIVA написанные библиотеки для контроллеров от техасского производителя. Пакет бесплатный.

 

 

 

 

 

Скачать программу Tiva Ware.

 

23) FastAVR
Работает на воьмибитных контроллерах серии AVR. Удобен, так как компилируется язык, похожий на Бэйсик.

 

 

 

 

 

 

 

 Скачать программу FastAVR.

24)Sourcery CodeBench
Служит чтобы создавать приложения под ARM, Cold Fire и целый ряд других. Работает на C, а также C++. Стоимость составляет четыреста долларов (есть пробная версия на месяц).

 

 

 

 

 

 

Скачать программу Sourcery CodeBench.

 

25) Code System
Целый комплект программ и инструментов для через который удобно работать с промышленным оборудованием, ориентированным на рутинную работу. Есть полностью русская версия. Распространяется свободно и без ограничений.

 

 

 

 

 

 

 

Скачать программу Code System

26) FlashMagic
Распространение этого продукта свободное, утилита направлена на программирование продукта именно от NXP – S.

 

 

 

 

 

 

 

Скачать программу FlashMagic.

 

27) STEPSEVEN-Micro/WIN
Создан специально чтобы работать с устройствами SIMATIC, производимыми Siemens. Бесплатной версии нет.

 

 

 

 

 

 

 

Скачать программу STEPSEVEN-Micro/WIN.

 

28) 4DWorkshopIDE
Работает с ориентированными на графику контроллерами и с дисплейными модулями от 4D Systems. Абсолютно бесплатная.

 

 

 

 

 

 

 

Скачать программу 4DWorkshopIDE. 

Comments are now closed for this entry

Микроконтроллер клонирования

| Копировать Microchip & ATMEL

PIC-CONTROL обеспечивает клонирование микросхемы микроконтроллера (MCU) для документации и производственного использования.

Многие из наших клиентов не имеют исходного кода проекта (прошивки) для своей печатной платы микроконтроллера. Документация не хранилась должным образом и теряется при переходе, когда их ключевой разработчик покинул компанию.

PIC-CONTROL предоставляет услуги по копированию печатных плат, обратному проектированию электроники и разработке микропрограмм, чтобы помочь вам восстановить и защитить документацию по вашему продукту.

Объяснение микросхемы клонирования микроконтроллера

Процесс клонирования чипа не так уж и сложен. Идея клонирования или копирования микросхемы микроконтроллера состоит в том, чтобы извлечь машинный код из исходного микроконтроллера и записать те же коды в новую микросхему микроконтроллера. Машинный код также иногда называют шестнадцатеричным кодом. Обычно он загружается как файл формата с расширением «* .hex». Ожидается некоторая детективная работа, особенно если не разглашается бренд чипа и номер детали.Наличие опыта помогает ускорить детективную работу.

Первый шаг – определить производителя микросхемы и номер детали микроконтроллера. Иногда также важен номер производственной партии или номер версии чипа. Машинный код, используемый для старой версии чипа, может работать некорректно при загрузке на новый чип. Поэтому важно принять к сведению версию. В сегодняшнем контексте это не столь важно.

Для извлечения машинного кода требуется программное обеспечение и программист.Прежде чем мы даже будем использовать эти инструменты, нам также нужно понять, как еще можно клонировать микроконтроллер. Техническое описание микроконтроллера можно получить у производителя микросхемы. Изучите микросхему на предмет ее распиновки. Знайте, где находятся контакты питания и программирования. Разработайте и сконструируйте схему для микроконтроллера, чтобы программист мог связать его с программным обеспечением на вашем компьютере.

С помощью программного обеспечения мы можем извлечь и загрузить машинный код в файл *.шестнадцатеричный файл на нашем компьютере. Этот * .hex будет машинным кодом, который потребуется для будущего производства микроконтроллера.

  • Проверьте производителя, номер детали и версию партии.
  • Изучение таблицы данных микроконтроллера.
  • Постройте и сконструируйте схему интерфейса программатора.
  • Подключите программное обеспечение и программатор для процесса извлечения.
  • Извлечение машинных кодов (шестнадцатеричный код) путем считывания из микросхемы микроконтроллера.
  • Заархивируйте машинный код в формате *.шестнадцатеричный файл.
  • Загрузка машинного кода на новую микросхему микроконтроллера.
  • Чтение EEPROM микроконтроллера (флэш-память) для проверки данных.
  • Кодовый защищенный микроконтроллер.

Общие вопросы

Некоторые вопросы, которые люди могут задать или которые будут беспокоить,

  • Это то же самое?
  • Будет ли надежно?
  • Будет ли оригинальный чип поврежден в процессе клонирования?

Клонирование микросхемы микроконтроллера будет полностью таким же, как ваша оригинальная версия.Он будет таким же надежным, как и ваша оригинальная версия, потому что чип от того же производителя чипа. Если есть проблема, обычно это дефект производителя, возможно, он был клонирован на неправильный чип или другую пакетную версию чипа.

Обращайтесь с чипом осторожно. Сообщите нам, является ли микросхема, которую нужно клонировать, единственной доступной частью.

Клонирование может потерпеть неудачу

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

Альтернативным решением будет проведение обратного проектирования и повторная разработка проекта печатной платы.

Microchip Микроконтроллер OTP Chip Series

Типичный микроконтроллер с микрочипом поставляется с 2 сериями. Один из них – PICxxFxxx, а другой – PICxxCxxx.

Буква «F» обозначает микроконтроллер серии EEPROM или Flash с возможностью перепрограммирования, что позволяет многократно перепрограммировать микросхему.

Буква «C» обозначает микроконтроллер OTP (одноразовое программирование, EPROM), который позволяет загружать микропрограммное обеспечение только один раз. Большинство этих микросхем серии «C» устаревают.

Программатор

PICkit3 не поддерживает эти микросхемы серии «C». Программисту требуется более высокое напряжение и ток для программирования микросхемы. Хорошей новостью является то, что обычно существует микросхема серии «F», которая может быть прямой заменой микросхемы серии «C».

Изменение или улучшение прошивки микроконтроллера

Улучшение существующего микропрограммного обеспечения микроконтроллера невозможно без наличия исходного кода.Исходный код – это алгоритм, написанный для работы микросхемы микроконтроллера.

Клонирование микросхемы ИС считывает только машинные коды, хранящиеся в микросхеме. Затем коды записываются в новый чип. Хотя нет ничего невозможного в редактировании машинного кода, это, вероятно, потребует много времени и усилий. Все это приведет к более высоким инженерным затратам.

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

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

Ознакомьтесь с нашими услугами по программированию прошивки микросхем микроконтроллера для

Услуги клонирования и дублирования EEPROM

PIC-CONTROL предоставляет услуги клонирования и дублирования микросхем для микроконтроллеров Microchip и ATMEL.

Microchip Микроконтроллер Арт.

Микроконтроллер ATMEL Арт.

  • ATtiny44A
  • ATmega328
  • ATmega16U2
  • ATmega32U4
  • узнать больше о микроконтроллерах ATMEL…

Что вам нужно для нас

Ниже приводится информация, которая нам понадобится для оценки вашего проекта клонирования микроконтроллера,

.
  1. Микроконтроллер , каталожный номер микросхемы
  2. Фотографии печатной платы , управляемой микроконтроллером.
  3. A подробное описание приложения , управляемого этим микроконтроллером.

*** Мы не сможем помочь, если какая-либо из вышеуказанной информации будет предоставлена ​​недостаточно.

Обычная стоимость клонирования составляет около 300 долларов, если он НЕ защищен . Чаще всего чип защищен. Мы не сможем клонировать защищенный чип. Альтернативный способ – перепроектировать вашу электронную схему. В зависимости от сложности вашей схемы стоимость реверс-инжиниринга может варьироваться от 500 долларов до более 30 тысяч долларов .Посетите нашу страницу обратного проектирования для получения дополнительной информации о процессе.

Свяжитесь с PIC-CONTROL, чтобы клонировать и скопировать микросхемы микроконтроллера сегодня.

PIC-CONTROL также предоставляет услуги по копированию печатных плат и обратному инжинирингу.

Щелкните соответствующие ссылки, чтобы получить более подробную информацию о том, как мы можем помочь вам клонировать вашу электронную плату.

PIC-CONTROL предоставляет услуги электронного инжиниринга нашему клиенту в Сингапуре.

Посетите наш веб-сайт для получения более подробной информации.

Внутрисхемное считывание и программирование электронных запоминающих устройств и микроконтроллеров

Внутрисхемное считывание и программирование электронных запоминающих устройств и микроконтроллеров Во многих случаях желательно работать с 8-контактным последовательным EEPROM или микроконтроллером Motorola, пока он остается подключенным к сборке схемы. Менее желательная задача – полностью отпаять деталь от платы, чтобы ее можно было прикрепить к программатору, – с гораздо большей вероятностью вызовет проблемы.Такие проблемы, как повреждение микросхемы из-за нагрева, поднятие следов на плате или смещение близко расположенных компонентов для поверхностного монтажа, делают удаление микросхемы гораздо более рискованным процессом. Очистка штифтов микросхемы и прикрепление зажима или датчиков к внутрисхемной части позволяет выполнить более быструю и безопасную процедуру с гораздо меньшим риском повреждения сборки. ПРОБЛЕМЫ СХЕМЫ ЧТЕНИЯ И ПРОГРАММИРОВАНИЯ
Внутрисхемный доступ к 8-контактному последовательному EEPROM или микроконтроллеру представляет собой проблему для разработчиков продукта, поскольку деталь не только припаивается к сборке схемы, но также подключается к существующим компонентам на самой сборке.Задача состоит в том, чтобы деталь выглядела для инструмента программирования как неподключенное устройство. Другими словами, сделайте так, чтобы деталь, которая уже подключена к другим компонентам, выглядела так, как будто это не так.
Продукты Andromeda Research предназначены для работы с электронными платами и микроконтроллерами внутри схемы. Инструмент программирования AR-32A при использовании с адаптерами, специально разработанными для внутрисхемной работы, обеспечивает наилучшую возможность для успешного обмена данными без снятия с сборки.Компания Andromeda Research известна тем, что предоставляет отличное решение для считывания и программирования внутри схемы для приложений, в которых отпайка детали из печатной сборки не является желательным подходом. (прочтите комментарий клиента) ПРЕПЯТСТВИЯ ДЛЯ УСПЕХА – Есть два основных препятствия или условия, которые могут помешать успешной внутрисхемной работе EEPROM. Это нагрузка существующего контура и активность существующего контура.

НАГРУЗКА СУЩЕСТВУЮЩЕЙ ЦЕПИ – Деталь, показанная на фотографии справа, представляет собой серийный EEPROM 95320.Подсвеченные (желтые) контуры схемы показывают, как деталь соединяется с другими компонентами сборки. Когда инструмент для программирования прикреплен к детали и получает команду считывать данные, должны возникать два основных условия. Во-первых, для работы к части должно быть подано питание. Во-вторых, каждый вывод на части, которая требуется для успешного обмена данными, должен быть переведен на допустимый логический уровень во время чтения части. Логический уровень – это напряжение, необходимое для того, чтобы часть интерпретировала подаваемый сигнал как логический 0 (низкий) или логическую 1 (высокий).Если часть не видит допустимого логического уровня на всех выводах, необходимых для связи, то часть не отвечает. Инструмент программирования должен иметь достаточную мощность привода, чтобы преодолевать нагрузку, создаваемую существующей схемой модуля (желтые линии), чтобы обеспечить применение допустимых логических уровней.

ДЕЙСТВИЕ СУЩЕСТВУЮЩЕЙ ЦЕПИ – Второе условие, которое влияет на успешное внутрисхемное программирование, вызвано обратной подачей питания в схемную сборку.Обратное питание происходит из-за того, что выводы питания на микросхеме, к которой подключен блок программирования, также подключены к общей шине питания, которая питает весь узел схемы модуля. Если мощность (напряжение), подаваемое на микросхему eeprom, соответствует уровню рабочего напряжения стандартной сборки, то весь модуль включится и станет активным (см. Фото справа). Когда это произойдет, процессор (микроконтроллер) начнет связываться с EEPROM в то же самое время, когда инструмент программирования пытается считать данные с чипа.Возникающий конфликт данных приводит к тому, что прибор программирования считывает неверные или неверные данные. Кроме того, в некоторых случаях конфликт может вызвать повреждение данных в самой EEPROM, поскольку чип пытается обрабатывать и отвечать на команды из двух разных источников (процессора и программатора).

РАЗРЕШЕНИЕ НА ПРЕПЯТСТВИЯ В ЦЕПИ

ЦЕПНАЯ НАГРУЗКА – Проблема загрузки схемы решается путем включения схемы драйвера двухтактного штыря в инструмент программирования и адаптеры.Драйвер двухтактного вывода работает, заставляя ток течь в обоих направлениях (внутрь и наружу) относительно целевого вывода и желаемого логического уровня. Схема драйвера включает в себя двухтранзисторный выходной каскад, где верхний транзистор будет подавать (проталкивать) положительный ток на вывод устройства для логической 1 (высокий уровень). При логическом 0 нижний транзистор будет проводить и (поглощать или вытягивать) ток с вывода устройства, переводя его на низкий уровень напряжения. Поскольку существуют отдельные транзисторы, предназначенные для управления выводом устройства на каждом логическом уровне, двухтактный драйвер предоставляет наилучшую возможность преодолеть нагрузку на вывод из-за того, что вывод подключен к существующим компонентам в сборке.Кроме того, из-за конструкции двухтактной схемы драйвер ограничивает ток, подаваемый на вывод, до уровня, который предотвращает повреждение подключенной схемы и блока программирования.

АКТИВНОСТЬ ЦЕПИ – Проблема обратной подачи питания в схему, которая вызывает активацию всего узла, решается с помощью специального адаптера, который включает в себя переключатель мощности с регулируемым напряжением. Встроенный последовательный адаптер EEPROM ASERSM1A позволяет снизить напряжение, подаваемое на узел, при чтении или программировании EEPROM.Это достигается с помощью двух переключателей; НАПРЯЖЕНИЕ (LV-5V) и ДИАПАЗОН НН (3,0-3,6-4,2). Уменьшение рабочего напряжения сборки имеет два эффекта. Во-первых, другие компоненты сборки, даже если они активны, будут представлять меньшую нагрузку. Это связано с тем, что имеется меньший ток, который мешает чтению и программированию внутрисхемной EEPROM, что позволяет двухтактному драйверу быть более эффективным. Во-вторых, микроконтроллер (процессор), который обычно начинает доступ к EEPROM при подаче питания на сборку, не запускается при пониженном напряжении.Это означает, что недопустимые данные, возникшие в результате вмешательства процессора, не возникают. Использование метода снижения напряжения обеспечивает отличные результаты при чтении или программировании электронных запоминающих устройств внутри схемы.

РАБОТА С МИКРОКОНТРОЛЛЕРАМИ В СХЕМЕ – Микроконтроллеры представляют аналогичную, но несколько иную задачу по сравнению с внутрисхемной работой с eeprom. Во-первых, в отличие от eeprom, микроконтроллеры не могут работать при пониженном напряжении. Для правильной работы микроконтроллер должен работать при заданном напряжении (обычно 5 В).В нормальном рабочем режиме микроконтроллер выполняет функции, на которые он был запрограммирован (модуль подушки безопасности, цифровой кластер, иммобилайзер и т. Д.). Это программа, которая запускается при запуске модуля. Когда требуется внутрисхемное считывание и программирование микроконтроллера, микроконтроллер НЕ должен запускать свою стандартную программу. Он должен запустить другую программу (специальная связь) или войти в режим, который позволит устройству программирования взаимодействовать с самим микроконтроллером. Это очень похоже на модемное соединение между двумя компьютерами, за исключением того, что в данном случае оно находится между инструментом программирования и микроконтроллером.Чтобы микроконтроллер перешел в специальный режим связи, определенные контакты (номера контактов) на самой микросхеме должны быть предварительно настроены на определенные логические уровни или уровни напряжения. Как только предустановленные уровни будут установлены, микроконтроллер будет сброшен прибором программирования. Когда микроконтроллер выходит из состояния сброса, он проверяет логическое состояние на выводах. На основе логических уровней выводов микроконтроллер либо запустит свою стандартную программу, либо войдет в специальный режим связи. На рисунке справа показан микроконтроллер Motorola 68HC11E9.На верхнем рисунке вы можете видеть выводы питания (1 и 26), выводы связи (20 и 21), вывод сброса (17), вывод входа часов (7) и выводы режима (2 и 3). Логические уровни на выводах режима определяют, какую программу микроконтроллер будет запускать после сброса детали. На нижнем фото показаны датчики, физически подключенные к детали. В большинстве случаев для подключения к микроконтроллеру достаточно просто прикрепить правильные щупы к соответствующим контактам на детали. Если, однако, вывод на детали не может быть доведен до необходимого логического уровня, микроконтроллер не будет запускать программу связи или входить в режим связи.

СОВЕТЫ И ИНСТРУМЕНТЫ ДЛЯ РАБОТЫ С МИКРОКОНТРОЛЛЕРОМ В СХЕМЕ
Штыревые соединения микроконтроллера подвержены тем же условиям нагрузки, которые влияют на eeproms при работе в цепи. Адаптер микроконтроллера (ACOM2) разработан с двухтактными драйверами, которые предоставляют наилучшие возможности для успешной внутрисхемной работы. Условие, которое может возникнуть с микроконтроллером, заключается в том, что вывод, который определяет режим работы микросхемы (стандартная программа или коммуникационная программа), может быть присоединен к сборочной шине питания (непосредственно к дорожке питания).Если инженер-конструктор модуля решил подключить вывод непосредственно к источнику питания, чтобы представить желаемый логический уровень для детали, но для входа в режим связи необходимо применить противоположный логический уровень, возможно, что «короткое замыкание» приведет к. Другими словами, если для работы стандартной программы требуется логическая 1 (5 вольт), а для режима связи требуется логический 0 (земля), когда вы подключаете датчик, который вынуждает логический 0 на контакте, вы подключаете землю к 5 вольт, что создает короткое замыкание.Это не повредит инструмент программирования или деталь, но, очевидно, не позволит детали работать. В этом случае неисправный штифт должен быть изолирован от схемы сборки (отсоединен от платы), чтобы внутрисхемная работа была успешной. Существует два метода изоляции (отключения) вывода микроконтроллера, который не может быть приведен в действие или принудительно приведен к необходимому логическому уровню. Первый – нагреть штырь паяльником малой мощности (верхнее фото) до тех пор, пока припой не расплавится.Как только припой расплавится, поместите острый предмет, например зубочистку (вторая фотография) или лезвие ножа x-acto, за штифт и осторожно поднимите его (примерно на 45 градусов) или до тех пор, пока не откроется соединение между штифтом и монтажной площадкой. Когда штифт освободится, подключите зонд и приступайте к работе. После того, как вы закончите, согните штырь вниз, пока он не коснется площадки, затем подайте тепло от паяльника. Возможно, вам понадобится нанести небольшое количество припоя. Второй способ – отрезать дорожку, которая соединяется со штифтом.Это работает, только если штифт подключен к одной дорожке. Если трек продолжается под чипом, это не сработает. Чтобы разрезать дорожку, используйте x-acto нож или другой острый предмет и очень осторожно разрежьте дорожку по всей ширине, пока в проводнике не появится четкое отверстие. Вы можете убедиться, что дорожка разомкнута, используя омметр или LP-1 (см. Ниже). После того, как вы выполнили свою работу, осторожно соскребите паяльную маску с каждой стороны разреза, затем нанесите небольшое количество припоя на разрез, чтобы создать паяльный мостик.Это восстанавливает соединение. ЛОГИЧЕСКИЙ / ТЕСТОВЫЙ ЗОНД – Пробник логики / тестирования LP-1 – это инструмент, предназначенный для выявления проблем внутрисхемного программирования до того, как возникнут проблемы со связью. LP-1 позволяет вам определить, можно ли перевести вывод на целевом устройстве на допустимые логические уровни, прежде чем вы подключите инструмент программирования. Это не только экономит время, но и избавляет от необходимости угадывать, какой штифт поднять, если связь не удалась. Использование LP-1 также предотвращает возможность заземления вывода режима, что может привести к короткому замыканию в цепи питания.LP-1 работает, вводя тот же управляющий сигнал на вывод целевого устройства (микроконтроллер или EEPROM), который используется прибором программирования. Если LP-1 не может ввести штифт, светодиодный индикатор на датчике перестанет мигать и зафиксируется на одном уровне. Это указывает на то, что штифт должен быть поднят. LP-1 также будет работать (тестовый режим) как стандартный логический пробник. В этом режиме датчик будет указывать логический уровень (высокий или низкий) на определенном выводе. (Информация о LP-1 здесь)

Как работают микроконтроллеры? | ОРЕЛ

Микроконтроллеры.Посмотрите на мгновение вокруг себя, за пределы экрана вашего ПК. У вас поблизости есть пульт дистанционного управления? Может быть, телевизор в углу вашей комнаты? Микроволновая печь на кухне и припаркованный автомобиль на улице? Вы можете этого не осознавать, но все эти объекты, не похожие на компьютер, с которого вы читаете этот пост в блоге, имеют внутри компьютер. Ваше взаимодействие с компьютерами больше не начинается и не прекращается между тем, как вы садитесь за рабочий стол в течение дня, и тем, когда вы уходите домой. Практически при каждом взаимодействии с этим миром, от ежедневной поездки на автомобиле до приготовления обеда, используется компьютер, который умещается в ладони.

Дорогая, я сжал компьютер!

Так что же это за суперкомпьютер? Это микроконтроллер, также называемый MCU, и он в точности похож на компьютер, который вы используете сейчас, с некоторыми тонкими деталями. Компьютер, который вы знаете, является обычным компьютером. Он может выполнять неограниченное количество задач в зависимости от использования. Однако микроконтроллер – это то, что мы называем специализированным компьютером. Он отлично справляется с одной задачей, не беспокоясь ни о чем другом.

Микроконтроллерам не нужно беспокоиться о картине в целом; они сосредоточены на очень конкретной задаче.

Возьмем, к примеру, вашу машину, стоящую на улице. Скорее всего, внутри него находится микроконтроллер, который будет считывать входные данные с датчиков кислорода и детонации, когда ваша машина работает, а затем контролировать такие вещи, как смесь вашего топлива и время зажигания ваших свечей зажигания. А как насчет микроконтроллера в вашем телевизоре? Он ожидает входов от вашего пульта дистанционного управления, а затем показывает вам различные выходы в виде различных телевизионных каналов и настроек громкости.

Эти два примера – лишь некоторые из неограниченного числа применений микроконтроллеров. Список может быть исчерпывающим, и в основном все, что требует какого-либо цифрового ввода и вывода, скорее всего, использует микроконтроллер за кулисами.

Микроконтроллеры и компьютеры

Мы уже говорили, что микроконтроллер точно такой же, как компьютер, которым вы сейчас пользуетесь, только меньше по размеру. Но что именно это означает? На первый взгляд компьютеры все выглядят по-разному, с разными размерами мониторов, клавиатур и даже с внутренними характеристиками.Но именно аппаратное обеспечение, работающее внутри компьютера, показывает нам, как много у него общего с микроконтроллером, в том числе:

  • Способ обработки вещей – Микроконтроллеру нужен способ выполнения программ и задач через центральный процессор (ЦП), как и ваш компьютер.
  • Способ хранения вещей – Микроконтроллеру также необходим способ загрузки программ и хранения данных с использованием оперативной памяти (RAM).
  • Способ взаимодействия – Вам также нужен способ связи с микроконтроллером, и вместо физической клавиатуры и мыши вы можете использовать светодиоды, реле, датчики и другие устройства.
  • Способ оставаться на верном пути – Микроконтроллеру нужен способ контролировать скорость своего процессора, и он делает это с помощью генератора или часов, которые действуют как двигатель для управления вашим MCU.

Конечно, размер всех этих аппаратных средств намного меньше, чем у традиционного компьютера.Я могу открыть корпус на своем настольном компьютере и вытащить оперативную память и процессор, но в микроконтроллере все уложено в один маленький черный ящик. Именно из-за этого размера микроконтроллеры встраиваются в более крупные устройства.

Видите черную прямоугольную рамку на этой Arduino? Это микроконтроллер ATmega 328. (Источник изображения)

Возьмем для примера стиральную машину. Существует масса механических частей, составляющих физическую структуру этого устройства, и в этот механический мир встроен микроконтроллер, выполняющий всю цифровую работу.В этом случае встроенный микроконтроллер позволит вам управлять определенными функциями и действиями стиральной машины.

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

Малый размер, небольшие затраты

Использование микроконтроллера в определенных приложениях, таких как моя стиральная машина, вместо традиционной компьютерной системы дает некоторые преимущества, а именно:

  • Экономия денег – За счет интеграции памяти, вычислительной мощности и периферийных устройств на одном кристалле вы получаете готовую печатную плату, для которой требуется гораздо меньше собираемых микросхем, что помогает сэкономить труд и общие затраты.
  • Платы меньшего размера – Поскольку вы можете разместить все необходимое для работы компьютера на одной микросхеме, вы также можете значительно уменьшить объем места и количество проводов, необходимых на печатной плате, которая могла быть занята кучей отдельных компонентов .
  • Специализированные задачи – Поскольку микроконтроллеры работают только со специализированными приложениями, у вас есть преимущество, заключающееся в том, что для работы этих микроконтроллеров не требуется максимальная мощность или производительность памяти, что делает вычисления доступными за небольшую часть стоимости традиционного компьютера.

Мы также не можем забывать, что многие из этих микроконтроллеров предназначены для работы в довольно агрессивных средах. Например, микроконтроллер, работающий в вашем автомобиле, вероятно, будет иметь дело с температурами от -30 ° F зимой на Аляске до чего-то такого же, как знойная жара в 134 ° F в Долине Смерти в разгар лета.

Кристалл 16-битного микроконтроллера производства Texas Instruments, посмотрите на все эти плотно упакованные следы! (Источник изображения)

Микроконтроллеры в действии

Как микроконтроллер начинает работать, преобразуя такие входные данные, как температура и свет, в какое-то полезное действие? Как и в случае с традиционным компьютером, микроконтроллер использует несколько функций для выполнения своих вычислительных действий, в том числе:

RAM

Как и в компьютере, ОЗУ будет использоваться в микроконтроллере для хранения данных и других результатов, которые создаются во время работы вашего микроконтроллера.А когда вы отключаете питание микроконтроллера, память в вашей оперативной памяти стирается.

В ОЗУ микроконтроллера также есть так называемый регистр специальных функций (SFR). Эта память предварительно настроена производителем вашего микроконтроллера и управляет поведением определенных схем, таких как аналого-цифровой преобразователь, последовательная связь и многое другое.

ПЗУ

Специализированная задача, которую микроконтроллер выполняет в форме программы, будет храниться в его постоянной памяти и, как правило, никогда не изменится.ПЗУ – это то, что позволяет микроконтроллеру в вашем телевизоре всегда знать, что нажатие кнопки переключения канала на пульте дистанционного управления должно изменить то, что отображается на вашем экране.

Размер программы, которая может храниться в ПЗУ, полностью зависит от ее размера. Некоторые микроконтроллеры поставляются со встроенным ПЗУ, в то время как другие могут принимать ПЗУ, добавленное в качестве внешнего чипа. Это зависит от каждого микроконтроллера.

Счетчик программ

Еще одна функция, встроенная в микроконтроллер, – это счетчик программ, который позволяет вашему мини-компьютеру выполнять программу на основе серии запрограммированных инструкций.Этот счетчик увеличивается на 1 каждый раз, когда выполняется строка инструкций, что помогает ему отслеживать свое место в вашей строке кода.

Входы и выходы

В отличие от вашего компьютера, с которым вы, скорее всего, будете взаимодействовать с помощью клавиатуры и мыши, у большинства микроконтроллеров есть другие способы взаимодействия с ними людей. Типичные устройства ввода и вывода на микроконтроллерах могут включать переключатели, светодиодные дисплеи и даже датчики, которые могут измерять температуру, влажность, уровень освещенности и т. Д.

Вы можете прикрепить что-то вроде этого фоторезистора к макету, а затем подключить его к микроконтроллеру для измерения уровня освещенности. (Источник изображения)

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

Некоторые контакты GPIO на Raspberry PI, которые позволяют ему взаимодействовать с нашим физическим миром. (Источник изображения)

Например, у вас может быть один вывод на микроконтроллере, настроенный как вход, который действует как датчик температуры. Другой вывод может быть настроен как выход и подключен к термостату, который включает обогреватель или кондиционер в зависимости от определенного диапазона входных температур, который вы запрограммировали. Как видите, эта динамика ввода и вывода осуществляется исключительно от машины к машине, не требуя прямого взаимодействия с человеком каждый раз, когда она принимает решение.

Работа в реальном времени

Микроконтроллеры

также могут в реальном времени реагировать на события при запуске в более крупной встроенной системе. Взять, к примеру, нашу стиральную машину. Когда происходит событие, сигнализирующее о том, что уровень воды достиг требуемой высоты, это вызывает то, что называется прерыванием. Это прерывание отправит сигнал процессору в вашем микроконтроллере, чтобы прекратить выполнение его текущего действия, которое должно было бы остановить поток воды.

Этот процесс изменения действий микроконтроллера «на лету» по мере прохождения определенной последовательности называется процедурой обслуживания прерывания или ISR. Эти ISR могут быть разных форм и размеров, и на самом деле это просто зависит от устройства, на котором используется микроконтроллер. Вы обнаружите, что ISR используются для таких событий, как переполнение внутреннего таймера, завершение аналого-цифрового преобразования или даже запуск серии событий при нажатии кнопки.

Организация микроконтроллеров

При работе с микроконтроллерами над собственными проектами электроники вы обнаружите, что они разделены на несколько категорий.Все эти категории основаны на нескольких переменных, включая количество бит, объем и тип памяти, тип набора команд и используемую архитектуру памяти. Вот несколько примеров:

  • 8051 Микроконтроллеры – Эта категория была впервые произведена в 1985 году корпорацией Intel и остается наиболее популярным выбором как для любителей, так и для профессионалов и включает в себя различные возможности RAM и ROM.
  • Контроллер периферийного интерфейса (PIC) Микроконтроллеры – Эта категория очень популярна среди любителей и промышленников и известна своей доступностью, низкой стоимостью и 3 вариантами архитектуры – 8-битной, 16-битной и 32-битной.
  • Микроконтроллеры AVR – Эта категория основана на гарвардской 8-битной архитектуре и была изобретена в 1966 году компанией Atmel, а также является одним из первых микроконтроллеров, использующих встроенную флэш-память для хранения программ.
  • ARM Микроконтроллеры – Эта категория включает 32-битную архитектуру и специально разработана для таких микроконтроллеров, как ваш смартфон, что делает ее одной из самых мощных категорий микроконтроллеров, но также и самой сложной в использовании.

После прочтения этих категорий вы можете спросить, как узнать, какой микроконтроллер выбрать для вашего собственного проекта? Этот процесс выбора требует рассмотрения ряда критериев и включает в себя такие вещи, как знание того, с каким оборудованием вам нужно взаимодействовать, сколько памяти вам нужно, какая архитектура вам нужна и сколько вы готовы платить. Все эти и многие другие соображения суммированы в сообществе ARM в его сообщении в блоге «10 шагов к выбору микроконтроллера».

На ладони

Микроконтроллеры повсюду, они служат невидимыми компьютерами в наш век цифровой электроники и неустанно работают за кулисами во всех сферах нашей жизни. Можете ли вы сосчитать все устройства в вашем непосредственном окружении, на которые вы полагаетесь, которые могут иметь внутри микроконтроллер? Вы можете быть удивлены тем, что найдете. Эти компьютеры открыли мир возможностей для нового взаимодействия и интеллекта в обычных и повседневных объектах, таких как стиральные машины, пульты дистанционного управления, электроинструменты, игрушки и многое другое.Без микроконтроллеров мир, который мы знаем сегодня, был бы невозможен.

Хотите работать с микроконтроллером в своем собственном электронном проекте? Autodesk EAGLE включает в себя массу готовых к использованию библиотек микроконтроллеров совершенно бесплатно! Попробуйте Autodesk EAGLE бесплатно сегодня, чтобы начать работу.

Как читать таблицы микроконтроллеров? 5 советов для начинающих!

Если вы новичок, при первой загрузке таблицы данных используемого вами микроконтроллера вам будет предоставлен документ от 1000 до 2000 страниц, что, мягко говоря, вызовет у вас дискомфорт.У меня был такой же опыт, и в этом посте я собираюсь помочь вам понять причину огромных размеров таблицы и дать вам несколько советов и приемов, чтобы вы не тратили слишком много времени на ее чтение!

Итак, приступим!

Причина огромных размеров

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

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

Техническое описание служит той же цели.Единственная разница в том, что таблица более техническая, поскольку конечный пользователь – такой же инженер, как и вы!

В ваших часах микроконтроллер имеет периферийные устройства, а не детали, а вместо кнопок используются регистры. Чтобы вы могли взаимодействовать с периферийными устройствами, вам необходимо установить и сбросить биты определенных регистров. Итак, в основном, если вам нужно включить конкретный вывод GPIO, таблица данных сообщит вам, какой бит установить в каком регистре, чтобы включить этот конкретный вывод GPIO.

Ваше электронное устройство, вероятно, имеет от 2 до 4 частей и, возможно, 4 кнопки, но микроконтроллер будет иметь от 20 до 40 периферийных устройств и, возможно, 5 регистров для каждого периферийного устройства, что составляет примерно от 100 до 200 регистров каждый с 8 до 16 бит / переключатели. ! Это основная причина огромных размеров таблиц!

Затем давайте рассмотрим несколько советов и приемов, которые помогут вам найти нужные сведения в таблицах данных.

Совет №1: просто внимательно прочтите первые несколько вводных страниц таблицы данных

Если вы только что приобрели микроконтроллер для своего проекта, или, может быть, если вы ищете микроконтроллер, который подойдет вашему проекту, то лучшее место для начала – это вводный раздел таблицы.

Для начала необходимо ознакомиться с микроконтроллером. Для этого производители обычно предоставляют вводный раздел в начале таблицы. Этот раздел будет содержать необходимую информацию в сжатом формате, и его объем обычно составляет максимум 5 страниц.

Совет № 2: Начните создавать прототипы на платах для разработки с использованием программного обеспечения, предоставленного производителем.

Если вы только начинаете свой проект, обычно считается хорошей идеей начать разработку проекта на плате для разработки, а не на пользовательском оборудовании.Платы для разработки служат трем целям

  1. Обычно они поставляются с большим количеством примеров, и, следовательно, ваш первый прототип может быть построен на основе этих примеров
  2. Они протестированы, и, следовательно, у вас не должно быть этих сомнений. Обратите внимание, если конкретный источник ошибки находится в аппаратном обеспечении или в программном обеспечении, и
  3. Вы можете получить лучшее представление, чтобы решить, можно ли разработать идею, которую вы имеете в виду, с помощью этой платы разработки или нет, поскольку фаза мозгового штурма.

Причина, которая нас интересует, – это причина №1, то есть примеры, предоставленные с ней. В наши дни почти все производители предоставляют уровень аппаратной абстракции, или, другими словами, они предоставляют драйверы, необходимые для взаимодействия с различными периферийными устройствами. Все, что вам нужно сделать, это написать свое приложение поверх этого.

Эти драйверы обычно не содержат ошибок, и поэтому вы потенциально можете создавать целые проекты, не глядя на таблицу данных, поскольку драйверы периферийных устройств уже предоставлены нам!

Так что вперед и изучите примеры и библиотеку драйверов производителя, используя сначала плату для разработки, а не писать свои собственные драйверы.После того, как вы сможете создать прототип поверх платы для разработки, все, что вам нужно сделать, это внести некоторые незначительные изменения в программное обеспечение, чтобы оно работало на специальной плате!

Совет № 3: Используйте подходящую программу для чтения PDF-файлов

Документы в формате PDF обычно разбиты на несколько глав и подразделов, поэтому я рекомендую не читать их через браузер, а использовать специальную программу для чтения PDF-файлов, такую ​​как Adobe или Foxit, или использовать Предварительный просмотр, если вы пользователь Mac, чтобы вы могли легко перейти к нужной части на боковой панели с содержимым вместо того, чтобы прокручивать вверх и вниз весь день!

Как вы можете видеть на картинке выше, если вы хотите сказать, взгляните на раздел SPI, все, что вам нужно сделать, это открыть боковую панель и щелкнуть раздел SPI и вуаля, вы там!

Вы также можете выполнить поиск в pdf по ключевым словам, если не можете найти то, что ищете в содержании.

Совет №4: разберитесь с организацией регистров периферийного устройства

Обычно регистры делятся на 2 основных типа:

  • регистры состояния и
  • регистры управления

Каждый интерфейс будет иметь вход и выход. Например, ваши смартфоны имеют сенсорный экран и кнопки питания в качестве входа, дисплея и звука в качестве выходов.

Вы можете рассматривать регистры состояния как просто выходы ваших микроконтроллеров, где вы можете считывать состояние определенного периферийного устройства, например, включен или выключен конкретный вход GPIO.

Регистры управления, с другой стороны, действуют как входы для периферийных устройств, если вам нужно включить вывод GPIO, тогда вы должны записать в регистр управления этого вывода GPIO!

Совет №5: Если вы чего-то не понимаете, сначала изучите основы периферийного устройства!

Иногда информация из таблицы может сбивать с толку. В таких случаях лучше вернуться и заново изучить основы конкретного рассматриваемого периферийного устройства, чтобы, как только вы вернетесь к таблице данных, ваш мозг автоматически соединит точки, и эта конкретная часть станет более ясной!

Хорошо, я остановлюсь на этом.Надеюсь, вы, ребята, узнали здесь что-то ценное!

Вы можете написать нам по электронной почте или связаться с нами по этой ссылке, если у вас есть какие-либо вопросы или предложения.

Если вам понравился пост, не стесняйтесь поделиться им со своими друзьями и коллегами!

Соответствующие статьи

Таймеры микроконтроллеров, их типы и применения
Описание 9 основных периферийных устройств микроконтроллера
8 типов памяти, о которых должен знать каждый разработчик встраиваемых систем!

Загрузка программы – обзор

10.4.1 Оборудование BASE

Схема базовой платы показана на рисунке 10.5 (проект VSM BASE2). Схема построена на базе 16F877A, с портами A и E, подключенными к линейному разъему для схем внешнего интерфейса. Порт D назначен последовательному ЖК-дисплею, а порт C взаимодействует с последовательной памятью и драйвером RS232. Контакты для программирования порта B выведены на разъем ICD, а оставшиеся контакты портов B и C используются для клавиатуры, светодиодного индикатора и зуммера. Программа тестирования (см. Ниже) будет проверять все основные функции и позволяет сначала проверить конструкцию путем моделирования.

Рисунок 10.5. Схема модуля BASE.

10.4.1.1 Сброс

Ручной сброс включен, так что программы могут быть перезапущены, когда плата работает независимо. Если кажется, что программа работает неправильно, аппаратный сброс обычно является первым решением. Таймеры сброса в PIC MCU должны обеспечивать надежный запуск при включении без необходимости ручного сброса, но если меры предосторожности по отключению питания не включены в прошивку, это может быть полезно.

10.4.1.2 Часы

Используется стандартная кварцевая схема, работающая на частоте 4 МГц.Это дает время выполнения инструкции 1 мкс, что удобно для анализа времени программы. Кристалл должен физически находиться рядом с микроконтроллером, чтобы дополнительная емкость дорожки не мешала кристаллу колебаться и не влияла на резонансную частоту. Максимально возможная частота составляет 20 МГц, что дает цикл команд 200 нс или 5 миллионов циклов команд в секунду. На этой скорости кристалл XT должен быть заменен на кристалл HS (High Speed).

10.4.1.3 ICD

Контакты MCU ICD выведены на разъем для модуля программатора, который обеспечивает загрузку программы и окончательную отладку на оборудовании.Создание программы рассматривается позже, но ее основная цель – создать файл машинного кода для загрузки в чип в VSM. Однако мы должны вернуться к MPLAB для загрузки прошивки. Интерфейс ICD позволяет выполнять внутрисхемную отладку в целевом оборудовании с использованием тех же методов отладки, что и при начальном имитационном тестировании.

10.4.1.4 Пользовательский ввод / вывод

Порты A и E подключаются к разъему для внешнего аналогового или цифрового ввода / вывода. RA3 используется для опорного напряжения АЦП, 2.56 В для 8-битного преобразования. Если требуется 10-битное преобразование, можно заменить опорное напряжение 4,096 В, как показано в главе 6. Регулируемое испытательное напряжение подключается к AN0; во время выполнения тестовой программы ее значение будет отображаться на ЖК-дисплее (0,00–2,50 В). В тестовой программе светодиод «Run» мигает во время моделирования, а зуммер издает звуковой сигнал при нажатии кнопки на клавиатуре.

10.4.1.5 Клавиатура

Интерфейс клавиатуры подробно описан в главе 4. 12-кнопочная клавиатура подключается к контактам в портах B и C.В тестовой программе все выходы строк (ABCD) и входы столбцов (123) изначально имеют высокий уровень. По очереди берутся нижние строки, а столбцы проверяются на 0. При обнаружении кнопки возвращается и обрабатывается соответствующий код ASCII. Обратите внимание, что при моделировании может быть задержка между «нажатием» кнопки и замыканием контакта, чтобы имитировать дребезг переключателя, что может вызвать путаницу в пошаговом режиме.

10.4.1.6 ЖК-дисплей

Работа ЖК-дисплея 16 × 2 также подробно описана в главе 4.Он настроен в 4-битном режиме, то есть коды ASCII подаются на него в два этапа (старший полубайт, затем младший полубайт) через четыре линии данных, подключенных к старшим битам порта D. Младшие биты того же порта обеспечивают линии управления RS (Выбрать регистр) и E (Включить). Линия RW (чтение / запись) имеет низкий уровень аппаратно для записи – нет необходимости использовать квитирование ЖК-дисплея, которое потребовало бы изменения направления данных и усложнило бы программное обеспечение.

10.4.1.7 Последовательная память

Доступ к ячейкам микросхемы памяти осуществляется через последовательный интерфейс I 2 C (RC3, RC4), как описано в главе 8.Данные передаются однобайтовыми пакетами по SDA, которым предшествуют байты адресации для выбора чипа и местоположения. SCK выдает тактовый импульс с каждым битом, чтобы зафиксировать его в устройстве назначения. Контакты аппаратного адреса подключены к низкому уровню, чтобы назначить адрес по умолчанию 0. WP (защита от записи) позволяет отключить запись микросхемы для предотвращения случайной перезаписи важных данных, но здесь он не подключен. Последовательная память используется в тестовой программе путем сохранения аналогового входного напряжения после его отображения.Это можно увидеть в режиме моделирования, отобразив содержимое последовательной памяти.

10.4.1.7.1 Порт RS232

Порт RS232 подключается к 9-контактному разъему D-типа через стандартную микросхему MAX232. Это преобразует уровень сигнала между биполярным напряжением около 18 В (± 9 В) для связи с хост-системой или другим периферийным устройством через длинное соединение и уровнями TTL для MCU. Линейное напряжение генерируется внутренним зарядным насосом от единственного источника питания 5 В с использованием установленных снаружи конденсаторов.Линии аппаратного подтверждения связи (RTS, CTS) не реализованы.

Работа интерфейса RS232 более подробно описана в главе 8. Для связи с главным компьютером может потребоваться внешний USB-преобразователь. Для связи с беспроводным трансивером микросхему MAX232 можно исключить. Если для связи требуется порт MSSP, можно не использовать последовательную память или создать отдельный адрес для порта связи на шине I 2 C. Если должен использоваться SPI, RD0 доступен как выход выбора оборудования.

10.4.1.8 Источник питания

Стандартная микросхема линейного регулятора 5 В, 1 А является выбором по умолчанию для небольшой платы PIC и подходит для платы BASE. Любые мощные нагрузки, подключенные к плате, такие как двигатели, могут использовать нерегулируемый источник питания (12 В). Стандартные линейные регуляторы IC обеспечивают напряжение + 5 В ± 0,25 В с низким уровнем шума и пульсаций. В качестве альтернативы, бортовой источник постоянного тока. к постоянному току преобразованный может быть использован для большей эффективности.

Программирование микроконтроллеров PIC со связью Bluetooth

Можно передавать байтовые данные (серийно) по bluetooth с микроконтроллеров PIC с помощью микрочипов HC-05 bluetooth модуль.Последовательная связь осуществляется с помощью модуля EUSART, который имеется во многих микроконтроллерах PIC. я предпочитаю чтобы использовать простейший микроконтроллер PIC с этой функцией, PIC16F690. Для начала можно запрограммируйте PIC16F690 с помощью следующей тестовой программы.

Программирование микроконтроллера PIC sertestBT.asm – это простая тестовая программа для PIC16F690, написанная на ассемблере для тестирования. Последовательная передача данных по Bluetooth. Программа отправляет байт через модуль EUSART в HC-05 для последовательной передачи.Программа задерживается примерно на 1/4 секунды, затем увеличивает байт на 1 и отправляет увеличенный байт. Данные перенесенный начинается с 0 и увеличивается до 255, затем снова проходит цикл и т. д. Один раз также можно запрограммировать чип в C или другом компиляторе для микрочипа. Микроконтроллер подключен к HC-05, как показано на рисунке. ниже:
Примечание. В этой настройке HC-05 находится в режиме по умолчанию как ведомый. Чтение последовательных данных, отправленных с HC-05 Использование сотового телефона:
Чтобы проверить правильность работы микроконтроллера PIC и модуля HC-05 отправляя данные, их можно прочитать с помощью мобильного телефона.Установите один из различных бесплатных приложений доступен в магазине Google Play, который может считывать передачу Bluetooth, например, Blue Terminal. Затем подключитесь к HC-05 с паролем по умолчанию 1234. После подключения прочтите данные в формате HEX. Вы должны увидеть, как данные HEX увеличиваются на одно число каждые 1/4 секунды. если ты Если вы можете читать HEX-данные, значит, вы знаете, что соединение HC-05 работает.

Чтение данных с ПК в Linux:
Для меня лучший способ связи через Bluetooth с HC-05 – использовать последовательную передачу данных. с драйвером / dev / rfcomm0.Самый простой способ установить драйвер – это установить “Bluetooth Manager”, например blueman. Запустите диспетчер Bluetooth, чтобы найти устройства Bluetooth, доступные для подключиться к. Затем выберите hc-05 и подключитесь. Менеджер сделает доступным файл serial / dev / rfcommx использовать. Первое подключение устройства Bluetooth будет / dev / rfcomm0. Следующее подключенное устройство будет / dev / rfcomm1 и т. д. Насколько я понимаю, можно использовать / dev / rfcomm0 так же, как / dev / ttyUSB0. для передачи через последовательный порт USB.Ниже приведены некоторые примеры чтения последовательных данных из PIC16F690 код sertestBT.asm, после того, как / dev / rfcomm0 находится в вашем корне каталог:

  • Использование Nodejs : это, вероятно, самый простой способ передачи последовательных данных с HC-05 на ПК. Вот пример программы: bluetest.js. Запускаем программу в корне набрав sudo node bluetest.js . Программа запросит количество байтов для чтения. Ничего не будет напечатано, пока не будут прочитаны все байты.Затем, после того, как байты были прочитаны, они распечатываются на экране и сохраняются в файле dataout.txt. Я считаю, что когда-то программа запускается, буфер последовательного порта очищается. Тогда первый отправленный байт будет первым записанным байтом.
  • Использование C (gcc) в Linux : пример программы для передачи последовательных данных в linux gcc: rfcommserial3.c. Чтобы скомпилировать код, введите gcc rfcommserial3.c -lm . Чтобы запустить исполняемый файл, введите sudo ./a.out , поскольку вам нужно находиться в режиме суперпользователя для доступа к / dev / rfcomm0 файл.Поскольку код настроен сейчас, сначала очищается буфер. Затем код читается 256 байт. После получения всех байтов значения выводятся на экран.
  • Чтение данных непосредственно из rfcomm0 : Можно также просто прочитать файл rfcomm0 напрямую. Пример кода rfreadch.c считывает последовательные байтовые данные напрямую. Код настройку для чтения 20 точек данных и печати значений на экране. Сначала он считывает данные, хранящиеся в буфер последовательного порта (т.е. буфер не очищается).Если в списке меньше 20 значений буфер данные будут считываться и распечатываться по мере их получения.
Домашняя страница Сигела

Физический факультет | Колледж наук

IC Unlock | Что такое IC Unlock | Как разблокировать IC

1. Программная атака
Технология, которая обычно атакует ИС, используя интерфейсы связи процессора и использует протоколы, криптографические алгоритмы или дыры в безопасности в этих алгоритмах. Типичным примером программной атаки была атака на раннее семейство микроконтроллеров ATMELAT89C.Злоумышленник воспользовался лазейками во временном дизайне операции стирания серии микроконтроллеров: с помощью собственной программы остановил следующий этап стирания данных памяти программы после стирания бита блокировки шифрования. Программа стала незашифрованной, а затем программист просто прочитал встроенную программу.

Также возможно использовать методы шифрования для атаки на ИС, основанные на разработке новых атакующих устройств, с некоторым программным обеспечением для программных атак.Недавно в Китае появилось атакующее устройство под названием оборудование для дешифрования чипа Kai Ke Di Technology 51 (разработанное компанией IC, атакующей Pro из Чэнду, Китай), это устройство разблокирует ИС в основном через SyncMos.Winbond из-за лазеек в процессе производства ИС. . Метод заключается в использовании некоторых программистов для поиска вставленных байтов. С помощью этого метода можно определить, есть ли в микросхеме непрерывный слот (найти непрерывные байты FFFF микросхемы). Вставленные байты могут выполнять инструкцию для отправки внутренней программы, а затем использовать устройство дешифрования для перешифрования, чтобы получить программу.

2. Электронное обнаружение атак:
Эта технология обычно отслеживает аналоговые характеристики процессора для всех подключений питания и интерфейсов во время нормальной работы с высоким временным разрешением и атак, отслеживая характеристики его электромагнитного излучения. Поскольку микроконтроллер является активным электронным устройством, соответствующая потребляемая мощность изменяется при выполнении различных инструкций. Это позволяет злоумышленнику получить конкретную важную информацию в микроконтроллере, анализируя и обнаруживая эти изменения с помощью специальных электронных измерительных приборов и математической статистики.Поскольку программист RF может напрямую читать старую модель программы MCU шифрования, чтобы использовать этот принцип.

3. Технология атак с генерацией ошибок:
Технология использует ненормальные рабочие условия, чтобы вызвать ошибки процессора, а затем процессор предоставляет дополнительный доступ для включения атак. Наиболее широко используемые технологии генерации ошибок включают напряжение и тактовые импульсы. Атаки низкого и высокого напряжения могут использоваться для отключения защиты цепи или для принудительного выполнения процессором некорректных операций.Тактовый переход может сбросить схему защиты без нарушения защищенной информации. Переходы питания и тактовой частоты могут влиять на декодирование и выполнение отдельной инструкции в некоторых процессорах.

4. Технология датчика:
Технология заключается в том, чтобы напрямую обнажить внутренние соединения микросхемы, а затем наблюдать, манипулировать, вмешиваться в работу микроконтроллера для достижения цели атаки.

5. Метод УФ-атаки:
УФ-атака заключается в применении ультрафиолетового излучения на чипе и преобразовании зашифрованного чипа в незашифрованный чип, а затем использование программатора для непосредственного чтения программы.Этот метод подходит для чипов OTP, инженеры, разрабатывающие микроконтроллеры, знают, что чипы OTP можно стереть только УФ-светом. Итак, чтобы стереть шифрование, нужно использовать UV. В настоящее время с помощью этого метода можно расшифровать большинство чипов OTP, производимых на Тайване. Половина керамического корпуса чипа OTP будет иметь кварцевое окно. Такие ИС можно облучать непосредственно ультрафиолетовым светом. Если это пластиковая упаковка, нам нужно сначала открыть чип, пластина может подвергаться воздействию ультрафиолета. Из-за того, что шифрование с помощью этого чипа является относительно плохим, базовое дешифрование не требует никаких затрат, поэтому рыночная цена дешифрования чипа очень низкая, т.е.g Расшифровка SONIX SN8P2511, расшифровка Infineon SCM.

6. Бреши в микросхеме:
Многие микросхемы имеют криптографические уязвимости во время разработки. Такие микросхемы могут использовать уязвимости для атаки на микросхему для считывания кода в памяти, например, использование кода микросхемы, упомянутого в другой нашей статье: если мы сможем найти непрерывный код FF, в который можно вставлять байты, мы могли бы отменить программа. Или, если какой-то поисковый код содержит специальный байт, если такой байт есть, мы можем использовать этот байт для отмены программы.Такие микросхемы, как микроконтроллеры Winbond или Shimao, например, расшифровка W78E516, расшифровка N79E825, расшифровка ATMEL 51 серии AT89C51 должны использовать байтовые лазейки в коде для атаки.

Кроме того, в чипе есть некоторые очевидные лазейки, например, штырь в шифровании станет незашифрованным чипом при добавлении электронного сигнала. Поскольку в атакующей технологии участвует китайский производитель микроконтроллеров, мы не будем здесь перечислять модели. Все устройства для дешифрования микросхем, которые сегодня можно увидеть на рынке, используют лазейки в микросхеме или программе для разблокировки ИС.Однако подходы, которые могут быть куплены / распространены извне, в основном могут разблокировать только очень ограниченное количество моделей, поскольку подробные подходы к атаке являются строго конфиденциальными для каждой лаборатории или компаний. В Fast PCB Studio мы разработали собственное дешифровальное оборудование только для внутреннего использования. У нас есть технология с нашими разработанными инструментами, которые можно разблокировать, например MS9S09AW32 или устройство, которое может специально разблокировать LPC2119LPC2368 и другие подобные ARM IC. Результаты будут очень надежными при использовании специализированных подходов и инструментов для конкретного каталога IC.

7. Метод предохранителя шифрования восстановления FIB:
Этот метод подходит для многих микросхем с предохранительным шифрованием, наиболее типичным примером является разблокировка MSP430 от TI. Поскольку шифрование MSP430 должно сжечь предохранитель, до тех пор, пока предохранитель может быть восстановлен, IC переходит на незашифрованные чипы. Больше моделей, таких как MSP430F1101A, MSP430F149, MSP430F425 и так далее. Обычно мы используем зонд для повторного подключения предохранителя. Если оборудования нет, это все еще возможно, модифицируя линии по контракту с компаниями, производящими модификацию полупроводников.Обычно он может использовать оборудование FIB (сфокусированный ионный пучок) для подключения линии или со специальной лазерной модификацией оборудования для восстановления линии. Этот подход не является предпочтительным решением из-за потребности в оборудовании и расходных материалах, что увеличивает затраты клиентов на работу по разблокировке микросхем. Мы воспользуемся этой технологией, если не будет лучшего метода.

8. Изменение схемы шифрования:
В настоящее время на рынке конструкция микросхем CPLD и DSP является сложной, с высокой производительностью шифрования, с использованием вышеуказанного метода дешифрование затруднительно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *