Arduino Zero M0 защита от копирования SAMD21

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
Сделали устройство на плате Arduino Zero в ней стоит контроллер SAMD21G18A.
И вот встал вопрос как закрыть кристалл от копирования. В стандартной среде разработки "Microchip Studio 7" (Atmel Studio) есть раздел с возможностью Установки "Security Bit" блокирующего копирование кристалла
3.jpg

Проделав указанную операцию я с удивлением понял, что в случае с Arduino механизм НЕ работает.
Кристалл после прошивки снова открыт и отлично копируется.

Решение было найдено здесь : Code protection for SAMD21G18A
В случае с контроллером SAMD21 имеют место команды С++ которыми мы можем устанавливать Fusese в нужное состояние.
Метод я проверил и он действительно работает.

P.S. Было бы неплохо увидеть все доступные команды для работы с FUSES.


void setup() {
uint32_t ctrlb_bak = NVMCTRL->CTRLB.reg; // Turn off cache before issuing flash commands
NVMCTRL->CTRLB.reg = ctrlb_bak | NVMCTRL_CTRLB_CACHEDIS;
NVMCTRL->STATUS.reg = NVMCTRL_STATUS_MASK; // Clear error flags

if (!(NVMCTRL->INTFLAG.reg & NVMCTRL_INTFLAG_READY)) // Check if the module is busy
{
NVMCTRL->CTRLB.reg = ctrlb_bak; // Restore the setting
} else {
NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMD_SSB | // Set command
NVMCTRL_CTRLA_CMDEX_KEY;
while (!(NVMCTRL->INTFLAG.reg & NVMCTRL_INTFLAG_READY)) {} // Wait for the NVM controller to become ready
NVMCTRL->CTRLB.reg = ctrlb_bak; // Restore the setting
}
}

void loop() { }
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
2,864
850
Проделав указанную операцию я с удивлением понял, что в случае с Arduino механизм НЕ работает.
Кристалл после прошивки снова открыт и отлично копируется.
какую "такую" операцию вы проделали в Ардуино ИДЕ? На картинке явно менюшка из МикрочипСтудии...

Вы случаем, не выставили ли этот бит в Студии и потом пошли прошивать в Ардуино?
 

bort707

★★★★★★✩
21 Сен 2020
2,864
850
Так бит-то защищает от слива вашей прошивки из Дуе, а не от перепрошивки другой прошивкой заново.

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

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
"По Феншую" работу (свою) надо прятать от злых копировальщиков.
Ну и захотел закрыть от ЧТЕНИЯ.
Например для AVR контролеров есть великолепная программа для установки фузов защиты. Ну я решил что нечто подобное есть и для SAMD21 - ошибся.
Так как был программатор совместимый с Атмел Студио пошел путем наименьшего сопротивления.
К стати когда нажать на эту кнопку вся память контроллера стирается в FF и естественно затем туда нужно залить исполняемый код ..... дальше я уже описал.
5.jpg
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
2,864
850
"По Феншую" работу (свою) надо прятать от злых копировальщиков.
Ну и захотел закрыть от ЧТЕНИЯ.
у меня такое впечатление что мы говорим на разных языках.

Еще раз - вы защитили Дуе от ЧТЕНИЯ.
А в ардуино ИДЕ вы прошивку не читаете, а ПЕРЕЗАПИСЫВАЕТЕ,
Поэтому защита от ЧТЕНИЯ и не работает. Логично?

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

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
Во первых Arduino Zero в ней стоит контроллер SAMD21G18A.

Я взял модный программатор и считал .hex файл (это машинные коды) с "защищенного" контроллера.
Затем взял тот же программатор и ЗАЛИЛ этот .hex файл в другой контроллер.
То после такого "Копирования" программа НЕ должна работать на новом контроллере. (Защита).
А она заработала.
ТОЕСТЬ: Защита НЕ работала.
Написана, скомпилирована и загружена (первоначально) программа на Arduino IDE.1.jpg
 

bort707

★★★★★★✩
21 Сен 2020
2,864
850
загружена (первоначально) программа на Arduino IDE.
Давайте определимся:
когда вы (первоначально) загружали программу в ардуино ИДЕ - вы там (в ардуино ИДЕ) бит защиты от чтения выставили? Именно в ардуино ИДЕ, а не в студии!

Или вы выставили бит в Микростудии, а загружали потом в ардуино, как сначала написали?
 

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
Или вы выставили бит в Микростудии, а загружали потом в ардуино, как сначала написали?
Верно - Так и сделано было.
И в этом случае контроллер становится ОТКРЫТ для копирования. То есть прошивая Arduino IDE (видимо) снимает эту защиту.
 

bort707

★★★★★★✩
21 Сен 2020
2,864
850
То есть прошивая Arduino IDE (видимо) снимает эту защиту.
БИНГО

Конечно Ардуино снимает защиту при прошивке кода. Иначе он не смог бы прошить.
Чтобы защита работала, надо выставлять защиту и прошивать ОДНОВРЕМЕННО, в одной и той же программе.

И в этом случае контроллер становится ОТКРЫТ для копирования.
опять ерунду пишете. Он открыт не для КОПИРОВАНИЯ, а для перезаписи. Как вы программы-то пишете с такой логикой...
 

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
опять ерунду пишете. Он открыт не для КОПИРОВАНИЯ,
В том то и дело что он ИМЕННО открыт для КОПИРОВАНИЯ.
То есть: "Чтения внутренней прошивки (исполняемого кода записанного в память контроллера) с целю последующей записи этого кода в другой контроллер".
А Перезапись: ЭТО внесение НОВОГО кода в память контроллера (память естественно перед этим очищается). Да наверное право именно во время этой очистка и снимает защита. В конечном итоге "фуз" это просто бит в памяти контроллера.
 

bort707

★★★★★★✩
21 Сен 2020
2,864
850
В том то и дело что он ИМЕННО открыт для КОПИРОВАНИЯ.
у вас все-таки плохо с логически мышлением....

Вот смотрите, обьясняю по пальцам:
1. Вы выставили бит защиты от копирования в программе МикроСтудио. После этого у вас Дуе защищена от копирования.
2. Далее вы пошли в Ардуино ИДЕ и записали в контроллер новый код. Защита от копирования этому не мешает, потому что вы не читаете защищенную прошивку, а записываете новую. При записи защита от копирования снялась.
3. Далее вы программатором считали прошивку из чипа. Прошивка скопировалась, потому что бита защиты УЖЕ НЕТ, он снят в п2

Итог - вы сами сняли защиту при записи кода и потом почему-то удивляетесь. что "она не работает". Ваше заявление про то что "в Ардуино механизм не работает" - выдумка. Вы просто не умеете ей пользоваться.
 

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
Судя по всему вы не работали с контроллерами Atmel. (Я например не работал с контроллерами STM)

В серии контроллеров AVR после установки Фузов. Контроллер продолжает писаться и все нормально будет работать НО вот считываться будет НЕ прошивка, а набор цифр, который уже НЕ работает.
В Серии SAMD21эта схема НЕ сработала. Вот это меня удивило. И вот эта задача решается кодом который я тут выложил. Учитывая что решение я нашел не сразу, а в заводской документации раздел 22.6.6 на контроллер, про ЭТО сказано всего 5 строчками, было бы в общем интересно получить описание всех команд по работе с фузами.
Я нашел несколько примеров с использованием этих команд и в одном из примеров я увидел решение поставленной задачи.
И в общем согласен что вся эта ситуация вероятнее всего вызвана спецификой работы Arduino IDE.
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
180
52
если человек пришёл сюда с вопросами о защите, то неужели его говнокод кого то заинтересует для воровства)))))))
что он такое великое и важное мог написать ?
ответ прост - ничего.
тот, кто пишет уникальные программы, подобные вопросы на любительских форумах не задаёт (он их вообще не посещает...)
 
  • Лойс +1
Реакции: bort707

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
Да, Да, Да.
Если это какая то часть проекта то понятно, смысла копировать нет. А мы делаем готовые изделия, мелкими партиями. Хитрый "Сантер мантер" скажет: "Зачем вы такие мне нужны я могу такое сам смастерить". Учитывая предыдущую дискуссию с программированием не так все однозначно. так что защита от копирования это весьма полезный навык. Я уже не говорю о тех случаях когда нужно просто ключ аппаратный смастерить.
Ну в общем проблема не так однозначна.
И я согласен ТЕМ, кто пишет "уникальные программы", не надо отвлекаться на подобные форумы.
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
180
52
навык дело полезное.
только чтобы было что защищать, нужно поучиться и поработать.
а здесь чисто хоббийный форум.

А мы делаем готовые изделия, мелкими партиями. Хитрый "Сантер мантер" скажет: "Зачем вы такие мне нужны я могу такое сам смастерить".
уверяю вас - повторить ваши шедевры будет не так уж и сложно без воровства вашей программы)))))
 

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
Проводим эксперимент:
1. Такому специалист ка вы (я говорю без иронии) надо копировать мои "шедевры" ?
2. А "специалист" который умеет ярко "моргать светодиодом" ему надо?
Ответ очевиден:
Тот кто умеет САМ делает это уже сделал САМ. Это защита от "самоделкиных" которые мешают "скромным" предпринимателям заработать немного денег.

Публикую Я всякие штуки (возможно НЕ гениальные) потому, что сам эксплуатирую чужие решения и по этическим соображениям считаю что если я что то "наковырял" то возможно это будет кому то полезно ТОЖЕ.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,109
437
@boris_latysh, вы в курсе, к примеру, о "power glitch attack"? А это ведь не единственный метод...
Но как бы... в 99.9% случаев и вы, и я, и остальные являются тем самым "неуловимым ДЖО", попросту никому нах не нужным. :)
 

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
Когда кража стоит дороже изделия то кражи не будут.
Ясно, что абсолютных решений нет. Но увеличение стоимости взлома это тоже метод защиты.
 

bort707

★★★★★★✩
21 Сен 2020
2,864
850
@boris_latysh, в этой ветке удивительно не то, что вы решили поставить защиту - я давно заметил, чем неопытней программист, тем больше его тянет залочить свои творения...
Удивительно иное - несмотря на три мои обьяснения вы так и не поняли, как эта защита работает:)
Вы думаете почему я перестал вам возражать и ушел из ветки? - да просто понял, что это бесполезно:)
 

boris_latysh

✩✩✩✩✩✩✩
3 Фев 2021
38
2
у вас все-таки плохо с логически мышлением....

Итог - вы сами сняли защиту при записи кода и потом почему-то удивляетесь. что "она не работает". Ваше заявление про то что "в Ардуино механизм не работает" - выдумка. Вы просто не умеете ей пользоваться.
Я согласен - ДА.
Так и есть.

И вот решением этой задачи будет код который при первом включении прописывает бит защиты. То есть защита включается внутри программы.
да метод конечно не "Великолепный" но для (как справедливо было замечено) простых задач вполне уместный.

P.S. Раз уж разгорелась жаркая дискуссия а нет ли у кого то описания всех команд SAMD21 по работе с Фузвми? Я так понимаю там есть на что посмотреть.
 
Изменено: