Высказывания и цитаты:

В час суровой беды, испытав верность друга познаешь,
Цену друга познаешь, когда на совсем потеряешь.
Тимур Муцураев

  • 01Фев

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

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

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

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

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

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

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

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

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

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

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

    dec

    Практический пример декапсуляции можно посмотреть тут 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 и ОЗУ, дело в том что они начнут смещаться относительно исходных и в случае косвенной адресации будет сбой. А косвенная адресация используется всегда, поэтому создавайте метки и указывайте конкретно адреса, с которых начинается каждый кусок подпрограммы.

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

10 комментариев

WP_Cloudy
  • Армен пишет:

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

  • Алексей пишет:

    Очень познавательная статья, к сожалению стоимость работ по извлечению прошивок из микроконтроллеров китайскими коллегами непомерно высока. За прошивку из MSP430F196 на сайте http://www.mikahk.com запросили 900USD, что при нынешнем курсе (на 5.01.2016 года)составляет 66000 рублей. Так что обольщаться не стоит.

  • Антон пишет:

    Куда можно обратится по вопросу касаемого логики ATF1508 (слить проект)

  • Александр пишет:

    Здраствуйте! Подскажите куда обратиться по поводу переделки прошивки с персонификацией ( имееться прошивка в hex) в прошивки лишенную ограничения.

  • Тимур пишет:

    Добрый день, к кому обратиться — есть прошивка с STM32, надо бы отреверсить.

  • Алексей пишет:

    Алексей. пишите на dmitry19.sp@mail.ru — сделаем nsp430 дешевле

  • Александр пишет:

    Разводилово это. Не повторяйте наших ошибок. Испытано на себе). Отправил им PIC контроллер. Все нормально, получили. Заплатил вперед, начали работать. Через пять дней говорят, что чип оказался с медными проводниками, а они думали что он с алюминием и поэтому испортили. Ладно, поверили, тем более что согласились переделать бесплатно, только надо еще чип выслать. Выслали еще, на этот раз сразу два (на всякий случай). Посылку получили, через неделю высылают прошивку. УРА, думаем. Прошились — ничего не работает. Мы начали копаться, менять программаторы и т.д. потратили кучу времени и сил, пока точно не убедились что код неправильный. ПОсле претензий они выслали какой-то другой вариант кода, согласившись что они что-то напутали. Мы снова обрадовались, ну, думаем наконец-то! Хрена с два. Ничего не работает. Тогда они попросили выслать им готовый девайс,чтобы они все проверили и если не работает, то вернуть деньги. Мы почесали репу и решили отправить девайс. Они его получили и говорят, микросхема в девайсе работает а ту что до этого мы присылали -не работает, поэтому они и код сняли неправильный! Мы говорм, что все было тщательно проверено, тщательно упаковано в антистатику и т.д., что микросхема была 1000% рабочая, но у них один ответ — дескать мы ломаем микросхемы тысячами и ошибка исключена, поэтому они правы, а мы нет. Ну что сказать -не придерешься, логика железная. И конечно никакого возврата, но зато предложили еще раз заплатить, чтобы они сняли прошивку с исправной микросхемы. Мы предложили сначала снять, потом мы заплатим, мы же заинтересованы в этом, но, как несложно догадаться, мы были мягко посланы. Тут мы окончательно протрезвели и убедились, в том что нас просто разводят, и мы конечно высказали все что о них думаем, конечно же в очень мягкой форме, думаю, они остались довольны). Так что, ребята, думайте сами, надо оно вам это иди нет. 99,9 против 0,1 что такая участь ждет и вас тоже. http://www.mikahk.com — мошенники, http://www.break-ic.com — мошенники. Такое наше мнение. Всем удачи в делах!

  • Susan Tse пишет:

    Answer to above Mr Alexander

    You sent us one 16F886 project, we sent you the code, you tested and said the code was not working, we asked you to send us a working device to test, you did send us the PCB, after testing the PCB, we answerd you: «First, we tested the chip on board, we call it master No.2, and proved it was working.
    Second, we soldered the master chip we had done for you, we call it master No.1, it was not working.
    We compared the inside master No.1 and master No.2, there were slight difference, so our engineer said master No.2 should be a upgraded edition of master No.1, you knew it, right?».

    If the code was not working, you should had sent us same master No.1 on the PCB to us, but you send us a PCB which master No.2 work on it and claimed to us hat our code for the master No.1 was not working, wanted us to do the master No.2 for free, I am sure this is a very simple logic, you want us to do 2 chips but you only want to pay once, we are not afraid of your black mail.

  • Susan Tse пишет:

    Answer to above Mr Alexander

    You sent us one 16F886 project, we sent you the PCB, after testing the PCB, we answeredd you : «First, we tested the chip on board, we call it master No.2, and proved it was working.
    Second, we soldered the master chip we had get the code for you, we called it master No.1, it was not working.
    We compared the code inside master No.1 and master No.2, there was a slight difference, so our engineer said master No.2 should be a upgraded edition of master No.1, you knew it, right?».

  • Susan Tse пишет:

    I have no idea why some of the text were lost when I upload it.

    simply put, this mr Alexander sent us one project, paid the money, we sent him the code, he said the code was not working, sent us another master chip containing different code and complaint we had not done the job, he want us to do 2 project for him at one payment, otherwise he will black mail us.

Ваш ответ

Внимание: Модератор оставляет за собой право редактировать или удалять комментарии.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: