Обратная разработка MCU

Разблокировка микроконтроллеров — MikaTech

Наши ценности и цели

О компании MikaTech

Время пролетело незаметно: с того дня, когда мы в 1998 году выполнили наш первый проект по обратной разработке MCU 8051, до момента создания нашей миллионной лаборатории обратной разработки в 2012 году прошло 14 лет. Теперь мы начинаем новый бизнес по разработке встроенных систем визуализации и надеемся прослужить ещё 10 лет.

подпись Питер Ли Соучредитель и генеральный директор

Учебник для начинающих по микроконтроллеру ATmega32 AVR и настройке SPI, часть 7

Глава 7

 

Часть 19 – Изготовление удобных разъёмов для прототипирования – использование стандартных штыревых разъёмов

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

 

Стандартные штыревые разъёмы служат совместимой с макетной платой частью наших самодельных кабелей, а ответные гнездовые корпуса подходят для непосредственного подключения к выводам микроконтроллера ATmega32. Готовые перемычки из магазина часто имеют тонкую хрупкую изоляцию и слабые паяные соединения, которые ломаются после десятков циклов подключения/отключения, поэтому изготовление собственных разъёмов обеспечивает больший срок службы и постоянное электрическое сопротивление контакта, критически важное для малошумящих аналоговых сигналов, поступающих на АЦП МК. При проектировании самодельных кабелей для защищённых прототипов можно также разделить сигнальные дорожки отладки и основные линии питания, чтобы блокировать несанкционированное считывание данных EEPROM и блокировки через открытые проводники кабелей.

Изготовление надёжного и функционального штыревого разъёма:

Секрет виброустойчивых штыревых соединений заключается в сочетании механического обжатия с пайкой; чисто паяные соединения без механической фиксации могут разрушиться при небольшом натяжении и создать обрывы, которые испортят тесты измерения напряжения АЦП. Каждый стандартный штыревой вывод имеет короткий металлический стержень с минимальной площадью поверхности для пайки, поэтому ручная обмотка оголённых жил вокруг контакта создаёт дополнительную поверхность для укрепления соединения перед нанесением припоя. Мы используем плоский шлейф 24 или 26 AWG для таких самодельных кабелей, поскольку тонкие провода аккуратно размещаются рядом с выводами разъёма без громоздкой изоляции, которая может вызвать перекрёстные помехи между соседними сигнальными линиями на вашей схеме МК.

 

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

 

После пайки каждого соединения провода с контактом разъёма наденьте термоусадочную трубку на каждое отдельное соединение и нагрейте её, чтобы она плотно обжала металлический узел. Эта изоляция устраняет риск коротких замыканий между соседними контактами разъёма, которые могут иметь разные уровни напряжения (например, сигналы аналоговых датчиков и шина питания МК). Изолированная проводка также предотвращает перекрёстные помехи, искажающие входные напряжения АЦП и скрывающие тонкие аппаратные дефекты, которые могут открыть точки доступа к перемычкам и памяти блокировки при физическом зондировании схемы для несанкционированного дампа.

 

Изготовление гнездового разъёма:

Гнездовые разъёмы собираются из серийно выпускаемых обжимных контактов и пластиковых корпусов с фиксированным шагом 0,1 дюйма (2,54 мм), универсальным для всех выводов AVR-микроконтроллеров и макетных плат. Профессиональные обжимные клещи обеспечивают равномерное сжатие для надёжного обжима, но любители без специального оборудования могут выполнить обжим с помощью обычных плоскогубцев, как показано во втором демонстрационном видео. Правильно обжатые гнездовые контакты захватывают медные жилы без повреждения внутренних проводов, поддерживая стабильные низкоомные пути сигналов для аналоговых входов АЦП, линий программирования SPI и шин связи для считывания EEPROM на вашем МК.

 

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

Часть 20 – Использование потенциометров и понимание делителя напряжения

Если вам требуется непрерывно регулируемый аналоговый опорный сигнал для проверки периферии АЦП вашего МК, потенциометр является дешёвым и гибким элементом схемы делителя напряжения, идеальным для калибровки прототипов. Прежде чем подключать потенциометр к любому входу АЦП, необходимо полностью понять принцип работы резистивного делителя напряжения; непонимание этого основного аналогового принципа приводит к неправильной настройке тестовых схем, которые выдают неверные уровни напряжения и бессмысленные цифровые результаты преобразования при тестировании считывания. Контактный механизм каждого потенциометра имитирует два последовательно включённых фиксированных резистора, разделённых подвижным ползунковым контактом, что является основой всех схем формирования сигналов аналоговых датчиков, используемых вместе с AVR-микроконтроллерами.

 

По своей сути, потенциометр представляет собой одну непрерывную резистивную дорожку, заключённую в пластиковый корпус с тремя металлическими выводами. Вы можете проверить его полное номинальное сопротивление, установив мультиметр в режим измерения сопротивления и измерив сопротивление между двумя крайними выводами компонента. Измеренное значение будет близко к указанному на корпусе номиналу с допустимым отклонением 5–10%, что редко влияет на базовую калибровку АЦП для любительских проектов. Подвижный средний вывод отличает этот компонент от статичных резисторов, так как вращение ручки смещает точку контакта вдоль резистивной дорожки, разделяя общее сопротивление на две переменные части.

 

Чтобы визуализировать поведение потенциометра как делителя, зафиксируйте ручку в одном положении и измерьте сопротивление сначала между средним выводом и одним крайним, затем между средним и другим крайним. Если ползунок не находится точно в центре дорожки, два измерения будут различаться; каждое значение представляет собой пропорциональную долю от полного сопротивления потенциометра. Сложение двух частичных сопротивлений даёт полное сопротивление компонента, подтверждая структуру последовательного делителя внутри устройства. Это правило деления напряжения управляет каждым аналоговым сигналом датчика, подаваемым на АЦП микроконтроллера, включая термисторы, фоторезисторы и тензодатчики, которые генерируют переменные сигналы напряжения для оцифровки и хранения в EEPROM во время сеансов регистрации данных.

 

Для генерации регулируемого аналогового сигнала для тестирования АЦП подключите один крайний вывод потенциометра к шине GND вашей схемы, а второй крайний вывод — к стабилизированному питанию 5В VCC микроконтроллера. Средний вывод выдает переменное напряжение от 0В (полностью заземлён) до полного напряжения питания вашего МК. Вращение ручки потенциометра плавно изменяет выходное напряжение между этими границами, создавая управляемый тестовый сигнал, который можно измерять мультиметром в режиме напряжения. Чистый, стабильный выход ползунка необходим для предотвращения зашумленных данных АЦП, которые потребовали бы дополнительного фильтрующего кода во флэш-памяти МК, увеличивая размер файла, захватываемого при восстановлении дампа флэш злоумышленниками.

Часть 21 – Введение в аналого-цифровой преобразователь

Встроенный аналого-цифровой преобразователь (АЦП), интегрированный в каждый AVR-микроконтроллер, открывает возможности для измерения окружающей среды, преобразуя непрерывные аналоговые напряжения в дискретные целочисленные значения, которые код микросхемы может обрабатывать, хранить в EEPROM или выводить на отладочные ЖК-экраны. Без модуля АЦП ваш микроконтроллер не сможет интерпретировать реальные физические измерения, такие как сила наклона, скорость вращения, интенсивность света и расстояние до объекта, получаемые от внешних аналоговых датчиков. Широкий спектр датчиков выдает переменные аналоговые напряжения, предназначенные для прямого подключения к АЦП: акселерометры измеряют ускорение, гироскопы отслеживают угловую скорость, фотодиоды определяют яркость, а ультразвуковые и ИК-дальномеры создают пропорциональные расстоянию сигналы для непрерывной дискретизации МК.

 

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

 

Простая метафора упрощает понимание основного процесса преобразования АЦП: представьте себе виртуального обменного агента, встроенного в кремний микроконтроллера, который принимает аналоговое напряжение в качестве «валюты» и обменивает его на фиксированные дискретные числовые значения. Этот агент не может вернуть аналоговое напряжение обратно в схему; все входные аналоговые показания навсегда преобразуются в целочисленные двоичные данные, используемые вашим кодом МК для принятия решений. Критическим ограничением этого процесса является ошибка квантования, создающая незначительные числовые неточности, когда малые разности напряжений отображаются в одинаковые целые значения после дискретизации АЦП.

 

АЦП микроконтроллера ATmega32 поддерживает два основных режима разрешения: 8-битное разрешение с 256 возможными значениями и полное 10-битное разрешение с 1024 уникальными числовыми отсчётами. При использовании стандартного напряжения питания 5В в качестве опорного для АЦП точное входное напряжение 2,5В преобразуется в среднее значение для каждого разрешения: 128 в 8-битном режиме и 512 в 10-битном. Очень малые колебания напряжения, например 2,5002643В, всё равно будут отображаться в то же целое значение, что демонстрирует ошибку квантования, ограничивающую способность АЦП различать тонкие сигналы и требующую аппаратных фильтрующих конденсаторов для подавления шума перед дискретизацией.

 

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

Часть 22 – Написание нашей первой программы АЦП – считывание потенциометра

Даже после правильного подключения делителя напряжения на потенциометре к входу АЦП МК, неотфильтрованный электрический шум на шинах питания макетной платы искажает аналоговые сигналы и вызывает нестабильные выходные значения АЦП, так как внутренняя тактовая схема микроконтроллера генерирует постоянные помехи, известные как шум ядра. Эти фоновые искажения вызывают случайные сдвиги оцифрованных значений вверх или вниз, как если бы агент обмена АЦП получал нестабильные входные напряжения, искажающие числовые результаты. Фильтрующие конденсаторы, включённые параллельно выводу ползунка потенциометра, сглаживают колебания напряжения для стабилизации выборок АЦП — метод снижения шума, который мы реализуем вместе с нашей первой прошивкой для считывания АЦП.

 

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

 

При разработке вашей первой прошивки АЦП вы будете часто обращаться к полному даташиту ATmega32 для поиска адресов регистров АЦП, определений битов и временных спецификаций. Этот документ содержит сотни страниц деталей по отображению регистров, охватывающих АЦП, таймеры, порты, перемычки и ячейки памяти блокировки, доступные через авторизованное считывание или несанкционированный дамп после разблокировки микросхемы. Хотя даташит кажется перегруженным техническими таблицами и диаграммами регистров, в этом руководстве мы разберём каждый критический шаг настройки регистров АЦП, чтобы устранить путаницу при сборке вашей первой программы дискретизации потенциометра.

Часть 23 – Получение полных 10 бит от АЦП

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

 

8-битное преобразование с 256 шагами надёжно работает для простых проектов, требующих только грубого порогового обнаружения напряжения, но точные измерения, такие как регистрация температуры и измерение расстояния, требуют полного 10-битного диапазона с 1024 значениями. Шум макетной платы, нестабильность питания и дребезг контактов потенциометра создают непрерывные возмущения напряжения, которые перегружают способность АЦП различать тонкие градиенты напряжений при работе в высокоразрешающем 10-битном режиме, поэтому большие фильтрующие конденсаторы становятся обязательным компонентом схемы для стабильной дискретизации перед записью данных в EEPROM для последующего считывания и анализа восстановления кода.

 

Для получения полного 10-битного результата АЦП в ОЗУ МК необходимо объединить два отдельных аппаратных регистра результата: ADCL хранит два младших бита результата преобразования, а ADCH содержит восемь старших битов полного 10-битного целого. Когда бит ADLAR в регистре управления ADMUX установлен в 1, два младших бита сдвигаются влево в неиспользуемые позиции старшего байта, изменяя способ объединения ADCH и ADCL с помощью побитовых операций в вашем коде. Освоение этой логики объединения регистров предотвращает неполное сохранение данных датчика во флэш и EEPROM, создающее пробелы при извлечении данных дампа флэш для обратной разработки дублирующего оборудования.

 

При ADLAR = 1 (режим выравнивания влево):

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

бит1бит0------------------------

ADCH содержит восемь старших битов 10-битного значения:

бит9бит8бит7бит6бит5бит4бит3бит2

Чтобы объединить эти два регистра в одну 16-битную целочисленную переменную theTenBitResults, сначала сдвинем ADCL вправо на 6 позиций, чтобы выровнять его два значимых бита в младшие позиции объединённого значения: ADCL >> 6.

------------------------бит1бит0

Объединяем сдвинутый младший байт с 16-битной переменной с помощью побитового ИЛИ: theTenBitResults |= ADCL >> 6;

--------------------------------------------------------бит1бит0

Затем сдвигаем ADCH влево на 2 позиции, чтобы освободить место для двух младших битов ADCL, и объединяем оба регистра в полный 10-битный результат: theTenBitResult |= ADCH << 2 | ADCL >> 6;

------------------------бит9бит8бит7бит6бит5бит4бит3бит2бит1бит0

При ADLAR = 0 (стандартный режим выравнивания вправо) ADCL содержит все восемь младших битов 10-битной выборки, а ADCH — только два старших бита. В этой конфигурации сдвигаем ADCH влево на 8 позиций и выполняем побитовое ИЛИ с ADCL: theTenBitResult |= ADCH << 8 | ADCL;

бит9бит8------------------------бит7бит6бит5бит4бит3бит2бит1бит0

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

 

Полная рабочая программа АЦП с прерываниями, реализующая полную 10-битную дискретизацию и вывод на ЖК-дисплей, с подключением нашего пользовательского заголовочного файла библиотеки MrLCD:

Эта прошивка позволяет автоматически запускать преобразование АЦП по аппаратным прерываниям, устраняя необходимость постоянного опроса выводов в основном бесконечном цикле МК, освобождая такты ЦП для выполнения логики мониторинга безопасности, которая сканирует значения регистров блокировки и перемычек для обнаружения попыток взлома или дампа при декапсуляции во время тестирования прототипа. Все полученные 10-битные целочисленные значения АЦП мгновенно выводятся на отладочный ЖК-экран и могут быть сохранены в EEPROM для длительных сеансов регистрации датчиков.

 

Глава 1 | Глава 2 | Глава 3 | Глава 4 | Глава 5 | Глава 6 | Глава 7 | Глава 8

Общие вопросы об извлечении прошивок микроконтроллеров


  • Безопасно ли отправлять оплату в MikaTech?

    Если бы MikaTech была недобросовестной компанией, в интернете за 28 лет истории можно было бы найти массу негативных отзывов о её услугах

    Итак, ответ: ДА! Мы — хорошие люди.

    Почему выбирают Mikatech, нажмите здесь, чтобы узнать


  • Может ли Mikatech взломать микросхемы, не указанные на этом сайте?

    У разных производителей чипов разные номера деталей, но внутреннее ядро может быть выполнено по одной технологии. Было бы невозможно перечислить все номера деталей, к которым применима наша технология, такие как MYSON, STK, FEELING, ANALOG, FUJITSU, NOVATEK, LG/HYNDAI.

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

  • Будет ли защищена моя конфиденциальность?

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

  • Законно ли пользоваться услугами Mikatech?

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


  • Я отправил вам письмо, почему нет ответа?

    • A. Наш почтовый сервер временно вышел из строя, ваше сообщение не было доставлено в наш почтовый ящик, даже если на экране отображается сообщение об успешной отправке. Пожалуйста, свяжитесь с нами снова.
    • B. Наш email распознаётся как спам вашим почтовым сервером, поэтому наш ответ был отклонён или перенаправлен в папку спама. Пожалуйста, удалите наш адрес из списка спама или проверьте папку спама, или используйте другой email для связи, например Gmail.
    • C. Ваше письмо распознано как спам нашим почтовым сервером и помещено в папку спама. Пожалуйста, используйте другой email для связи.



    Услуги разблокировки MCU


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

    Лет

    28 +
    страны взлома микроконтроллеров

    Стран

    110 +
    клиенты по атакам на микроконтроллеры

    Клиентов

    5000 +
    разблокированные проекты микроконтроллеров

    Проектов

    60000 +