|
|
  |
Защита секция кода во FLASH в ATmega, Как защититься от несанкционированного выполнения кода |
|
|
|
Feb 14 2008, 20:41
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Дон Амброзио @ Feb 14 2008, 23:21)  Ага..Щаззз....А Вы потом этот код в свой проектик или в свою кандидатскую... А мне , как изобретателю кушиш с маслом  Ну что, наша амброзия похоже сдулась окончательно ? Вы эта.., всерьез думаете что Ваш код мне за чем то нужен ? :07 Цитата Да я бы сделал и это, но мне сейчас нЕкогда..Работы много Дык Вы уже определитесь со своей ориентацией... Ну или не постите глупости....
|
|
|
|
|
Feb 14 2008, 21:17
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(singlskv @ Feb 14 2008, 23:41)  Ну что, наша амброзия похоже сдулась окончательно ? Вы эта.., всерьез думаете что Ваш код мне за чем то нужен ? :07 Дык Вы уже определитесь со своей ориентацией... Ну или не постите глупости.... Давайте всё же эмоции держать при себе. Я не обязан тут сидеть целыми днями и всем разжёвывать как надо проектировать программы для обнаружения случайных джампов. По-моему я и так достаточно уже написал (перечитайте внимательно ещё раз всю тему и 90% вопросов у Вас отпадут). Также как и остальных я не заставляю тут отписываться. А потом, без обид, есть же вещи, как ноу-хау и интеллектуальная собственность, и которые не предназначены для всеобщего пользования. Тем более что некоторые идеи я Вам уже выложил, а всё выкладывать я не обязан. "Мудрец по фантику от конфеты сможет понять устройство вселенной, а ..."(с)
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Feb 14 2008, 21:44
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Дон Амброзио @ Feb 15 2008, 00:17)  Давайте всё же эмоции держать при себе. А при чем здесь эмоции ? Вы автор топика, и я Вам задал кучу вопросов, и ни на один из них вы толком не ответили... Ну дык, как? Инструкции AVR мы уже изучили ? примеры применения будут ?
|
|
|
|
|
Feb 15 2008, 05:24
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
to Дон Амброзио: Почитал ваши предложения. На мой взгляд, все они крайне запутанны, сложны, плохо расширяемы, непереносимы между процессорами, требуют полного знания ассемблера и "неподключаемы" к сторонним библиотекам. Т.е., если у вас есть прошивка, которая тиражируется на миллионы изделий, и относительно "проста", то в ней все это можно использовать. Однако если тираж небольшой, то все это крайне затруднительно...
|
|
|
|
|
Feb 15 2008, 10:37
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Я Дон Амброзио за формат таблиц cpi Rd,K благодарен. Поэтому вам, 'singlskv', за него отвечу. Хотя 'Дон Амброзио' уж вам и так всё подробно расписал. Цитата(singlskv @ Feb 14 2008, 23:17)  давайте реальный пример использования, пусть будеть например модбас и соответственно рассчет CRC16 через таблицы... Вот как я бы написал (специально пишу не оптимально, а просто чтобы работало - оптимальный код он денег стоит): Цитата in ZL,UDR ; прочли данные из USART st X+,ZL ; сохранили в ОЗУ ; Дальше собственно CRC считаем. ; R3, R2 - CRC аккумулятор, RG00 - любой регистр =0 eor ZL,R3 ; проксорим данные с.б. старого CRC add ZL,ZL ; *2 (потом ещё на 2 итого на *4) ldi ZH,high(T_CRC) ; таблица CRC (c 0bXXXXXXX000000000) adc ZH,RG00 ; прибавим C (перенос) add ZL,ZL ; *2 (переходим к словам) rol ZH ; Z - ук-ль на соотв. слово lpm R3,Z ; это старший байт т.к. таблица переставлена adiw ZL,2 ; передвинем ук-ль на ст. байт eor R3,R2 ; получили ст. байт нового CRC lpm R2,Z ; м.б. нового CRC просто из таблицы ; итого R3,R2 обновлённое CRC
.org 0x400 T_CRC: ; У ModBuss какой-то паршивый производящий многочлен был. Типа 0x1C0C1- но не уверен. ; Если что подправьте. Но именно 0x1C0C1, а не 0xC0C1. Насчёт 1 это я не ошибся! .dw 0x3000, 0x3000, 0x30C1, 0x30C0 ... rjmp Crash Если кто это применять будет. При получении зарплаты прошу меня не забывать! (шутка) С CRC всё элементарно ведь. Сам-то вы, 'singlskv', рассчёт CRC из аппноутов берёте что-ли? Или вы хитрее гораздо. Типа шпион промышленный? Секреты у всех выведываете... Цитата(singlskv @ Feb 15 2008, 00:44)  Вы автор топика, и я Вам задал кучу вопросов, и ни на один из них вы толком не ответили... Один д. может столько вопросов задать, что 100 умных не ответят. Только без обид! 'singlskv' - заранее прощения прошу.
|
|
|
|
|
Feb 15 2008, 11:03
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата(Непомнящий Евгений @ Feb 15 2008, 07:24)  to Дон Амброзио: Почитал ваши предложения. На мой взгляд, все они крайне запутанны, сложны, плохо расширяемы, непереносимы между процессорами, требуют полного знания ассемблера и "неподключаемы" к сторонним библиотекам. Т.е., если у вас есть прошивка, которая тиражируется на миллионы изделий, и относительно "проста", то в ней все это можно использовать. Однако если тираж небольшой, то все это крайне затруднительно... Я вам больше скажу. Все эти извращения можно применять. Возможно, в каком-то очень маловероятном случае, они даже спасут. Но! Такие способы требуют написания проекта исключительно на ассемблере, можно конечно, кое-что и на C сделать, но тут будет "программа на ассемблере, написаная на C" (по аналогии с "я вам программу на Фортране на любом языке напишу"). И, для большого и сложного проекта, такая реализация будет скорее всего глючная сама по себе, из-за ошибок в алгоритмах и прочем. Исключительно из-за сложности реализации больших проектов на ассемблере. Там что, по моему мнению, все, о чем тут говорили, представляет исключительно теоретический интерес. Хотя, на диссер не тянет, все придумано до нас
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 15 2008, 11:20
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(defunct @ Feb 14 2008, 18:18)  Это вариант. Только я считаю, что это лишнее.. В принципе могу с вами и согласится. Т.к. сам всегда CRC32 FLASH в основном цикле считаю (по слову за раз - см. мои предыдущие посты). Но ни разу не сработало. Цитата(defunct @ Feb 14 2008, 18:18)  Ну просто не будет программа работать нормально если часть флеша слетит по причине прыжка на erase sequence в бутлоадере, не вернемся мы оттуда в ОС... Следовательно тут как раз WDT помощник. Ну а если предположить, что мы все-таки вернулись после erase sequence в ОС и продетектили нарушение флеш в основной программе, что дальше? Выход ведь тот же самый - сброс и запуск бутлоадера. Насчёт защиты от несанкционированного запуска бутлоадера. Я бы предложил написать так: Цитата ; до последней проверки ldi R17,Tag ; что такое Tag думаю объяснять не надо ; начинается последняя проверка. В ней R17 не используется. ... ; последняя проверка закончена. Дальше пошли аварийно опасные команды. .... ; дальше пример от 'Дон Амброзио'. Чуть переделанный OUT SPMCR , R16 ; --------------- cpi R17 , Tag brne CRASH ;----------------- SPM Если предположить, что аварийно опасных команд 8 шт. А у R17, в остальных частях программы, значения от 0 до FF равновероятны. То вероятность "не попорчивания" FLASH при случайном прыжке для AVR с 128 кБайт памяти будет: (1-(8/65536)/256)*100%=99.9999523%. Что существенно выше, чем надёжность CRC16 с производящим многочленом 0x11021, которая составляет 99.9984% для пакетов данных длиной более 17 бит (Р.Л. Хаммел "Последовательная передача данных"). Цитата(defunct @ Feb 14 2008, 18:18)  У мелких АРМов (конкурентов мег) есть FLASH. Хотите размещайте во флеш, не хотите - копируйте и запускайте в RAM. Если код во флеш разместить, то он и выполнятся медленно будет. Примерно с той-же скоростью, как у AVR. А у мелких АРМов разве защита кода есть? Я считал, что нет. Но м.б. у каких-то и есть - просветите.
|
|
|
|
|
Feb 15 2008, 11:38
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Это Вы говорите как специалист по части применения поледних?(шутка) Конечно. (не шутка). Если в меру, можно и поизвращаться. Иногда результаты хорошие получаются. Цитата Было бы интересней, если бы Вы привели код или пути решения поставленной задачи, Задача сия точного решения не имеет. Можно только итерациями бесконечно приближаться, асимптотически, к прямой, которая есть "надежность 100%". Хотя полсотни резисторов, рассыпаные по плате имеют вероятность выхода больше, чем камень  Рассмотрите необходимость решения данной задачи с точки зрения расчета надежности. [deleted]
Сообщение отредактировал IgorKossak - Feb 15 2008, 11:44
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 15 2008, 14:14
|
Местный
  
Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031

|
Можна ещё один маленький уточняющий вопрос? Цитата Здесь тема только про "ловлю" случайных джампов А какова вероятность того, что помеха собъёт только PC??? Видимо PC из особого теста леплен. А если сбивается не только PC(т.е. возможен не только случайный джамп) в чём смысл темы?
|
|
|
|
|
Feb 15 2008, 14:39
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Kuzmi4 @ Feb 15 2008, 17:11)  Извините конечно  но никогда не могу пройти мимо подобных заявлений - "Ток кто в CRC разбирается - сам запросто такое напишет. А тому, кто не разбирается - такое лучше и не знать". 2 galjoen - НУ чтож гордитесь! Вы гениальный! Не думаете , что если все так будут делать - но всё мы в конечном итоге деградируем ? Прошу прощения если меня не так поняли. Не хотел никого обидеть. Я имел в виду, что хакеров-крекеров и так хватает. Это они в программах (для компьютера) таким способом защиту кода с помощью CRC ломают. И мою защиту так сломали (когда-то давным-давно когда я еще молодой-неопытный был). И помогать им в этом я не хочу. В смысле тем, которые этого не знают (пока). А по моему мнению, хакеров со знаниями теории - мало. Ещё раз простите - в следующий раз при написании поста буду осмотрительней.
|
|
|
|
|
Feb 15 2008, 15:30
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Мда-с... Как защититься от случайного выполнения записи в boot-loader. Это не то,что приснопамятное засорение EEprom - тут у нас по питанию все ОК. 1. Заводим в основной программе себе нулевой регистр и не трогаем его ни при каких обстоятельствах. Только clr NullReg после сброса. 2. Кусок кода по записи в SPMCR не имеет точки входа. Код Fl_write_by_boot: COM NullReg; assuming ==0 just before this cmd RET; pre-initialized stack content HERE FL_write_entry: LDI R16,Spmcr_value; abstract command AND R16,NullReg OUT SPMCR,R16 SPM CLR NullReg 3. Как безопасно запихнуть в стек адрес входа ? Вопрос открытый, хотя я загружал с порта в теле команды для записи страницы. Некрасиво, но луше не придумал.
Сообщение отредактировал _Pasha - Feb 15 2008, 15:32
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|