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

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

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

О компании MikaTech

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

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

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

Глава 2

 

Часть 4 – Проверка программатора USBTiny и сборка первой схемы для программирования

К этому моменту вы завершили две основные подготовительные задачи для работы с микроконтроллером ATmega32: полную установку всех необходимых средств разработки и ручную сборку специализированной адаптерной платы SPI, создающей стабильные сигнальные пути между вашим USB-программатором и целевой микросхемой. Многие новички игнорируют важные шаги настройки безопасности на этом этапе, такие как конфигурация значений блокировки и запись защищённых перемычек для блокировки несанкционированных попыток считывания ещё до компиляции первого кода. Если вы оставите встроенную блокировку микросхемы отключённой после каждого сеанса программирования, физические злоумышленники смогут использовать дешёвое зондирующее оборудование для запуска операции дампа флэш и извлечения всей вашей пользовательской логики, что затем позволит выполнить полное извлечение прошивки, восстановление кода и глубокую обратную разработку для создания функционального дублирующего устройства. Прежде чем переходить к сборке аппаратной схемы, вы должны полностью понимать, что незащищённые разделы EEPROM также становятся лёгкой целью для отдельных операций дампа, как только злоумышленники находят способ разблокировать микроконтроллер с помощью глитчинга или инвазивной декапсуляции. Для этого практического лабораторного сегмента вам понадобятся стандартные макетные платы с печатными обозначениями строк и столбцов для упрощения трассировки, один светодиодный компонент и токоограничивающий резистор, соответствующий номинальному напряжению и силе тока вашего светодиода. В этой главе мы рассмотрим две основные учебные цели: полную проверку совместимости драйверов и программного обеспечения вашего программатора USBTiny, а также основы теории цепей, охватывающие правила работы светодиодов и практическое применение закона Ома для расчёта безопасных значений сопротивления для любой нагрузки светодиода, подключённой к выводам GPIO МК.

 

Наиболее надёжный способ убедиться, что ваш инструментарий WinAVR и аппаратное обеспечение USB-программатора работают совместно, — запустить встроенную утилиту командной строки avrdude, которая служит основным инструментом передачи скомпилированной двоичной логики во внутреннюю флэш-память микроконтроллера. Каждый проект на C или C++, который вы напишете, будет скомпилирован в стандартные файлы формата Intel HEX, и этот универсальный формат содержит весь исполняемый код, который аппаратное обеспечение МК может декодировать и выполнять непрерывно после циклов питания. Если avrdude не сможет установить канал связи с подключённой микросхемой, все последующие задачи дампа флэш, загрузки программы или считывания EEPROM будут полностью провалены, что делает этот шаг проверки обязательным как для любительского прототипирования, так и для коммерческой разработки. Разработчики-любители, пропускающие эту проверку, часто тратят часы на устранение неисправностей проводки, которые можно было бы выявить за минуты с помощью простого тестирования командной строки. Ниже приведены все чёткие шаги для запуска avrdude и проверки полной связи между вашим компьютером, программатором USBTinyISP и целевым микроконтроллером ATmega32:

  • Откройте командную строку Windows, нажав значок меню «Пуск» и введя cmd.exe в поле поиска системы. Старая операционная система DOS служила интерфейсом управления файлами для ранних персональных компьютеров, и её командная строка остаётся лёгкой средой для запуска автономных двоичных инструментов, таких как avrdude, без открытия тяжёлых IDE. Мигающий текстовый курсор на экране указывает на место ввода команд, а пути к каталогам файлов разделяются обратными слэшами для различения вложенных папок на локальных жёстких дисках.
  • После загрузки окна терминала введите точную строку команды avrdude -c usbtiny -p m32 и нажмите Enter, чтобы запустить последовательность аппаратного рукопожатия. Параметр -c определяет, с каким аппаратным программатором будет общаться ваша система, а флаг -p задаёт идентификатор модели целевого микроконтроллера, соответствующий архитектуре кремния на вашем МК. Если вы замените ATmega32 на другой вариант, например ATmega2560 или ATTiny13, вы должны заменить тег m32 на официальный код устройства, поддерживаемый avrdude; универсальные службы взлома микроконтроллеров используют ту же структуру команд для инициирования операций дампа после разблокировки микросхем с помощью декапсуляции или модификации перемычек.
  • Когда вы закончите все тесты подключения и захотите закрыть окно командной строки, просто введите ключевое слово exit и нажмите Enter, чтобы мгновенно завершить сеанс DOS. Эта лёгкая среда также позволяет пользователям вручную отправлять команды считывания в целевые области EEPROM и флэш-памяти, если на подключённом микроконтроллере не полностью активированы слои безопасности блокировки.

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

 

Аббревиатура LED расшифровывается как Light Emitting Diode — светоизлучающий диод, поляризованный полупроводниковый компонент с двумя металлическими выводными клеммами, регулирующими однонаправленный поток электрического тока. Электрические сигналы поступают в светодиод через более длинный анодный вывод и выходят через более короткий катодный вывод, отмеченный плоской пластиковой выемкой на внешнем корпусе компонента. Каждый светодиод имеет строгие фиксированные номиналы напряжения и тока, которых разработчики должны придерживаться при разводке; пропуск нерегулируемого тока через диод приведёт к перегоранию его внутреннего полупроводникового перехода и сделает компонент непригодным для использования. Работа светодиода ниже его номинального тока снижает яркость свечения, а чрезмерный ток резко сокращает срок службы детали. Токоограничивающий резистор, включённый последовательно со светодиодом, решает эту проблему, рассеивая избыточное напряжение, и в этом уроке приводится полный математический расчёт для выбора точного значения сопротивления для вашей схемы на 5В с ATmega32. Если вы хотите пропустить ручную арифметику для быстрой сборки прототипа, резистор на 1 кОм подходит как универсальный запасной вариант, хотя он будет давать заметно тусклое свечение светодиода во время работы.

 

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

 

Сопротивление = Вольт / Ток

 

Разработчики повсеместно упрощают эту основную формулу до сжатой алгебраической записи R = V / I для быстрых расчётов на бумаге. Чтобы подставить точные числа в уравнение, вы сначала определяете номинальное прямое напряжение и безопасный рабочий ток вашего светодиода из его технического описания. Стандартные зелёные светодиоды имеют прямое напряжение 2В, в то время как белые и синие сверхъяркие светодиоды требуют разности потенциалов 4В, как указано в справочных материалах по электронике. В этом уроке для расчётов безопасности используется консервативное максимальное значение тока 10 мА; меньшие значения тока соответствуют большим значениям сопротивления, что создаёт «запас» для предотвращения случайного повреждения компонентов от незначительных колебаний напряжения питания. Вам также необходимо учитывать разницу напряжений между шиной питания МК 5В и прямым падением напряжения на светодиоде для уточнения окончательной формулы расчёта сопротивления.

 

R = (Напряжение питания - Напряжение светодиода) / I

 

Для нашего стандартного зелёного светодиода, подключённого к микроконтроллеру ATmega32 с питанием от стабильного источника 5В, подстановка известных значений даёт R = (5В - 2В) / 0,01А = 300 Ом общего сопротивления. Критический шаг преобразования единиц не должен быть упущен: все номиналы тока в миллиамперах необходимо разделить на тысячу для перевода в амперы, совместимые с арифметикой закона Ома. Полученное значение сопротивления 300 Ом представляет собой точный последовательный резистор, необходимый для поддержания безопасной, стабильной яркости светодиода без преждевременного выхода компонента из строя.

 

Многие начинающие электронщики не найдут точных резисторов на 300 Ом в стандартных смешанных наборах, продаваемых онлайн или в местных магазинах. Эта небольшая проблема имеет простое решение: выберите следующий доступный номинал с большим сопротивлением, что не создаёт риска перегорания светодиода и лишь слегка уменьшает его светоотдачу. Углеродные резисторы на 330 Ом служат идеальной заменой почти во всех схемах с МК на 5В и широко представлены в дешёвых ассортиментах резисторов, извлечённых из бытовой электроники.

 

Теперь мы переходим к практической сборке схемы на макетной плате — самой простой практической задаче в этом сегменте урока. Весь предыдущий математический анализ составляет теоретическую основу для этого простого проекта по соединению компонентов, так что теперь вы можете сосредоточиться исключительно на физической логике соединений. Аппаратная безопасность исследования заключается в улучшении общей безопасности. Мы будем использовать вывод PORTB0 (пин 0 порта B) на ATmega32 в качестве выделенного управляющего вывода для светодиода, что физически соответствует первому контакту в 40-выводном DIP-корпусе микросхемы. После завершения монтажа этой базовой схемы мы сможем написать компактный код на C для переключения состояния выходного напряжения на этом выводе и активации свечения светодиода. Стоит отметить, что открытые дорожки сигналов PORT на незащищённой PCB создают уязвимость; злоумышленники, проводящие декапсуляцию или поверхностное зондирование, могут использовать эти линии для перехвата внутренних сигналов МК и получения подсказок для обхода активных механизмов блокировки перед запуском полной операции считывания дампа флэш.

 

Следуйте этому упорядоченному процессу подключения, чтобы собрать полностью функциональную тестовую схему со светодиодом на вашей макетной плате: Сначала вставьте один вывод последовательного резистора на 330 Ом в ряд макетной платы, соединённый с PORTB0 (вывод 1 микроконтроллера ATmega32). Затем подключите второй вывод резистора к анодной клемме вашего светодиода — более длинному металлическому выводу, выходящему из пластикового корпуса диода. Наконец, соедините более короткий катодный вывод светодиода с любой общей шиной GND на распределительной полосе питания макетной платы. Ваш программатор USBTinyISP также останется подключённым к шести выводам SPI для подачи стабильного питания 5В на МК во время каждого цикла загрузки кода и этапов тестирования. Все этапы сборки визуально показаны в сопроводительных видеоуроках для учащихся, предпочитающих визуальное руководство пошаговым текстовым инструкциям.

 

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

 

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

 

 

Часть 5 – Написание первой программы для включения светодиода и передача программы в микроконтроллер

Вы завершили длинную последовательность критической подготовительной работы, ведущей к написанию вашего первого пользовательского файла исходного кода для МК, и каждое предыдущее лабораторное упражнение закладывает необходимые фундаментальные знания для долгосрочной работы по разработке встроенных систем. Давайте кратко вспомним все этапы, которые вы прошли до этого этапа кодирования: Вы нашли и приобрели полный комплект разработки на базе AVR с микроконтроллером ATmega32, рекомендованным в каталогах SparkFun. Вы изучили основы аппаратного обеспечения микроконтроллеров, охватывающие архитектуру ЦП, внутренние разделы флэш и EEPROM, программируемые перемычки и функции безопасности блокировки, предотвращающие несанкционированный дамп флэш и попытки обратной разработки. Вы собрали специальную плату адаптера SPI для стабилизации передачи сигналов программирования между вашим программатором USBTinyISP и целевыми отладочными выводами МК. Вы загрузили, распаковали и модифицировали соответствующие драйверы, совместимые с 32-битными и 64-битными версиями Windows, для обеспечения надёжной связи через USB. Вы полностью установили интегрированную среду разработки WinAVR, включающую компиляторы, отладочные инструменты и утилиту загрузки avrdude, необходимую для извлечения прошивки и загрузки кода. Вы проверили подключение программатора с помощью командной строки avrdude, чтобы исключить неисправности драйверов или кабелей. Вы рассчитали правильные значения токоограничивающих резисторов и собрали полную тестовую схему со светодиодом на нумерованной макетной плате, готовую к приёму управляющих сигналов с PORTB0 вашего ATmega32. Каждый из этих шагов устраняет потенциальные препятствия, которые могли бы задержать вашу первую успешную загрузку программы, так что теперь вы можете полностью сосредоточиться на изучении базового синтаксиса встроенного C без отвлекающих факторов устранения неисправностей оборудования.

 

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

 

Новички естественно задаются вопросом, как простой текстовый исходный код может управлять физическим выводом микроконтроллера, чтобы выдавать стабильный высокий логический уровень 5В. Основная концепция основана на регистрах периферии с отображением в память, встроенных в конструкцию каждого кремния AVR. Каждый порт GPIO имеет два основных управляющих регистра: регистр направления данных, определяющий каждый вывод как вход или выход, и регистр данных порта, устанавливающий логический уровень напряжения (5В высокий / 0В низкий) для всех выводов, настроенных как выходы. Если мы установим PORTB0 в режим вывода и присвоим биту данных этого вывода логическую 1, аппаратное обеспечение ATmega32 будет непрерывно подавать 5В на провод, подключённый к анодному выводу нашего светодиода, вызывая свечение диода. Каждый вывод GPIO поддерживает только два рабочих состояния, будучи назначенным как выход: полный потенциал 5В или нулевое напряжение земли. При настройке как входа аппаратура пассивно прослушивает внешние сигналы напряжения от подключённых датчиков или внешних шин МК. Освоение конфигурации регистров также позволяет вам идентифицировать адреса памяти блокировки и перемычек во время авторизованного анализа дампа, если вы проводите легитимный аудит безопасности вашей встроенной прошивки.

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

 

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

 

Двоичная числовая нотация, используемая для присваивания регистра DDR, кодирует состояние ввода/вывода для всех восьми выводов порта в одной восьмибитной последовательности. Каждая цифра в двоичном числе соответствует одному физическому выводу на порту, причём логическое значение 1 помечает вывод как выходной драйвер, а логическое значение 0 устанавливает его как пассивный канал входного сигнала. Когда мы настраиваем DDRB = 0b00000001 в нашем исходном файле, только PORTB0 переключается в режим вывода, а все остальные семь выводов PORTB по умолчанию остаются в состоянии входа.

DDRB = 0b00000001;
// Устанавливаем вывод pin0 как выход, остальные как входы

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

PORTB = 0b00000001;
// Устанавливаем вывод pin0 в 5 вольт

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

int main(void)
{
}

Все имена регистров периферии AVR, такие как DDRB и PORTB, определены в стандартном заголовочном файле avr/io.h, поставляемом с компиляторным инструментарием WinAVR. Добавление этой директивы include в начало каждого исходного файла даёт компилятору доступ к предопределённым адресам аппаратной памяти для всех внутренних периферийных устройств МК, устраняя необходимость вручную записывать сырые шестнадцатеричные смещения в вашем исходном коде.

#include <avr/io.h>
int main(void)
{
}

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

#include <avr/io.h>
int main(void)
{
DDRB = 0b00000001; // Устанавливаем вывод pin0 как выход, остальные как входы
PORTB = 0b00000001; // Устанавливаем вывод pin0 в 5 вольт
}

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

#include <avr/io.h>
int main(void)
{
DDRB = 0b00000001; // Устанавливаем вывод pin0 как выход, остальные как входы
PORTB = 0b00000001; // Устанавливаем вывод pin0 в 5 вольт
while(1)
{
// Здесь был бы код, если бы его нужно было выполнять снова и снова ... бесконечно
}
}

В синтаксисе C любое целое число, отличное от нуля, переданное как условие цикла while, вычисляется как логическое истинное утверждение, которое вызывает бесконечную итерацию цикла. Использование константы 1 гарантирует, что бесконечный цикл никогда не завершится сам по себе, удерживая МК в активном состоянии обработки для сохранения выходного сигнала 5В, управляющего светодиодом. Злоумышленники, анализирующие извлечённый из дампа код во время обратной разработки, часто нацеливаются на логику бесконечного главного цикла для выявления основных функциональных рабочих процессов украденной дублирующей прошивки.

 

После компиляции этого минимального исходного кода и загрузки сгенерированного HEX-файла через avrdude с помощью вашего программатора USBTiny светодиод на макетной плате будет гореть постоянно, пока МК получает стабильное питание 5В. Это простое достижение знаменует вашу первую полностью функциональную встроенную программу, работающую на физическом аппаратном обеспечении микроконтроллера, и каждый последующий урок будет добавлять новые уровни сложности к этой базовой структуре кода. Следующий сегмент обучения познакомит с логикой задержек внутри бесконечного цикла while для создания видимого эффекта мигания светодиода, а также мы рассмотрим критически важные методы безопасности, такие как программирование постоянных перемычек и активация блокировки для блокировки несанкционированного считывания дампа флэш, попыток разблокировки на основе декапсуляции и нелегального клонирования оборудования, нацеленного на вашу пользовательскую прошивку МК.

 

 

 

 

 

 

 

 

 

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

 

 

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


  • Безопасно ли отправлять оплату в 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 +