Electronics Engineering BLOG

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

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

| комментариев 16


Привет друзья.
Меня попросили рассказать о клонировании микроконтроллеров. Просили — выполняю!
Кратко о чём я хочу рассказать в данном видео:
Я расскажу две коротенькие истории, чтобы вы лучше поняли, что такое клонирование и как всё происходит.
Второе — я сделаю клон данного устройства, точнее сделаю клон микроконтроллера.
Клонирование-чипов_копирование-прошивки-из-микроконтроллера
Так же я вам расскажу, что клонирование чипов не всегда возможно, более того, можно сказать даже по другому, практически всегда клонирование чипов не возможно. Я, так же в конце расскажу, какие бывают способы клонирования, даже если производитель не хочет чтобы клонировали его устройство, производитель устройства, не хочет этого, то есть варианты, есть способы, и о них я расскажу дальше. Так же есть способ о котором многие знают, но даже и не догадываются что они его знают, как можно клонировать устройство со 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 кБайт.
Клонирование-чипов_копирование-прошивки-из-Flash
Также самое читаем и eeprom. У меня конечно же в ней ничего нет, но в вашем случае может быть. Самими последними смотрим fuse. Нажимаем «Чтение», ОК, и fuse можно к примеру ALT+PrtSct и вставить в текстовый документ.
Клонирование-чипов_копирование-fuse
Ну всё, мы скопировали содержимое микроконтроллера.
Теперь я беру и подключаю сюда другой микроконтроллер (микроконтроллер В). У меня другой платы нет, я сделаю вот так — «Стереть всё». Кристалл чист, но для того, чтобы вы видели, что у меня другое устройство, я разверну провод))).
Клонирование-чипов_Очищаем-содержимое-микроконтроллера.
Я беру второе устройство, вставляю его в компьютер, подключаю программатор, устройство абсолютно чистое, ничего у нас не работает, теперь мне нужно сюда залить eeprom, hex, и в конце fuse. То есть я точно также выбираю hex, жму «Программирование», ОК.
Клонирование-чипов_Программируем-Flash
Дальше мне нужна eeprom, также выбираю и жму «Программирование». И также мне нужны fuse. То есть я беру сначала читаю то, что у меня установлено, и затем сверяю с тем, что мне нужно. При необходимости их корректирую. У меня всё установлено так как нужно. Ну всё, я вас поздравляю, у вас устройство и чип клонированы, оно работает, и всё классно.
Клонирование-чипов_клонированный-микроконтроллер-работает
Но это слишком просто, так не бывает. Дело в том, что у любого микроконтроллера есть вот такие два fuse защиты. У других микроконтроллеров механизмы защиты могут быть другими, но все они имеют механизмы защиты. К примеру, я беру и удаляю данные два fuse, я их не то что удалил, я их установил. Они равны значению всегда установленного бита SPIEN. И теперь я хочу сделать всё тоже самое что я делал до этого.
Клонирование-чипов_fuse-биты-защиты-от-копирования-прошивки
Я создам другой файл, допустим, с окончанием LOCK, и прочту в него.
Клонирование-чипов_клонирование-чипа-с-защитой-от-копирования
Как видите всё читается, казалось бы никаких проблем нет, то есть чтение у нас не запрещено, всё классно, НО, если мы сейчас эти два файла откроем в текстовом редакторе. Смотрите. Они разные.
Клонирование-чипов_копирование-прошивки-невозможно
Даже в первой строчке, видим, что здесь 028D, а в этом уже 0F00, то есть программатор считал не нужную информацию, а у микроконтроллера словно включается какой то генератор случайных чисел и он просто плюёт ерундой. Давайте убедимся, что мы считали не то, что нужно, давайте запрограммируем микроконтроллер hex файлом с окончанием LOCK. Убедимся что у нас дисплей не включится. Всё ОК, прошло программирование, прошло верификацию, но дисплей не включается. Чтобы вы не делали, у вас ничего не получится. И я думаю, что многие начинающие сразу подумают, что что-то не так с микроконтроллером, либо программатор не работает, либо ещё что-то. Потому что всё считалось. Поэтому просто берём, читаем у микроконтроллера, который мы хотим клонировать, fuse, и если установлены fuse защиты, то ни flash ни eeprom не имеет никакого смысла читать дальше.
Теперь о том, как же можно считать с залоченного чипа информацию? Скажу сразу, если всё хорошо, то считать её либо не реально, либо сама процедура считывания будет стоить на много дороже чем написание нового софта. Какие бывают варианты обхода битов защиты?
Ну первое — это ошибка, ошибка разработчиков данного чипа. Может быть такое, что разработчики где то ошиблись, и эту защиту как-то можно просто обойти. Такое бывает, но это редкость.
Второе — берут, и на специальном оборудовании, микрон за микроном снимают слоями данный компаунд, и добираются до кристалла. Затем находят область памяти, это тоже какая то ПЗУ (постоянное запоминающее устройство) где хранятся биты конфигурации. И каким то способом, либо лазером, либо электромагнитным импульсом направленным, пытаются изменить состояние бита защиты, затем читают программатором с микроконтроллера прошивку. Естественно что для того, чтобы это сделать, нужно знать топологию микроконтроллера, нужно знать где что находится, где какой бит, возможно также нужно будет испортить огромное кол-во работающих устройство для исследование методом проб и ошибок. Более того, снятие послойное компаунда, для этого нужно иметь супер точное оборудование, это всё стоит огромных денег.
Третий вариант, который у вас всегда будет работать, который я и обещал показать, который 100% работает на всех микроконтроллерах, это изучить, как работает ваше устройство, и не клонировать его чип, а сделать своё новое устройство, которое по функционалу не будет отличаться от данного устройства. Так же будет отвечать на ваши кнопки, на все ваши нажатия. Да, я понимаю, вы чувствуете, что я вас обманул, но не обманывайте и вы себя, потому что простыми способами сделать копию устройства не получится. Потому что никто, ни разработчики, естественно, раз разработчики этого не хотят, то и производители микроконтроллеров никак не допустят того, чтобы кто-то мог взять и спокойно сделать копию микроконтроллера с прошивкой (клонирование чипа).

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

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

Обязательные поля отмечены *.