Перейти к содержанию
    

Защита секция кода во FLASH в ATmega

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

Вы эта.., всерьез думаете что Ваш код мне за чем то нужен ? :07

Да я бы сделал и это, но мне сейчас нЕкогда..Работы много
Дык Вы уже определитесь со своей ориентацией...

Ну или не постите глупости....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну что, наша амброзия похоже сдулась окончательно ?

Вы эта.., всерьез думаете что Ваш код мне за чем то нужен ? :07

Дык Вы уже определитесь со своей ориентацией...

Ну или не постите глупости....

Давайте всё же эмоции держать при себе. Я не обязан тут сидеть целыми днями и всем разжёвывать как надо проектировать программы для обнаружения случайных джампов. По-моему я и так достаточно уже написал (перечитайте внимательно ещё раз всю тему и 90% вопросов у Вас отпадут). Также как и остальных я не заставляю тут отписываться.

А потом, без обид, есть же вещи, как ноу-хау и интеллектуальная собственность, и которые не предназначены для всеобщего пользования. Тем более что некоторые идеи я Вам уже выложил, а всё выкладывать я не обязан.

"Мудрец по фантику от конфеты сможет понять устройство вселенной, а ..."(с)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Давайте всё же эмоции держать при себе.
А при чем здесь эмоции ?

Вы автор топика, и я Вам задал кучу вопросов, и ни на один из них вы толком не ответили...

 

 

 

Ну дык, как?

Инструкции AVR мы уже изучили ?

примеры применения будут ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to Дон Амброзио:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я Дон Амброзио за формат таблиц cpi Rd,K благодарен. Поэтому вам, 'singlskv', за него отвечу. Хотя 'Дон Амброзио' уж вам и так всё подробно расписал.

давайте реальный пример использования, пусть будеть например модбас и соответственно рассчет

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 из аппноутов берёте что-ли? Или вы хитрее гораздо. Типа шпион промышленный? Секреты у всех выведываете...

 

Вы автор топика, и я Вам задал кучу вопросов, и ни на один из них вы толком не ответили...

Один д. может столько вопросов задать, что 100 умных не ответят.

 

Только без обид! 'singlskv' - заранее прощения прошу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to Дон Амброзио:

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

 

Я вам больше скажу. Все эти извращения можно применять. Возможно, в каком-то очень маловероятном случае, они даже спасут. Но! Такие способы требуют написания проекта исключительно на ассемблере, можно конечно, кое-что и на C сделать, но тут будет "программа на ассемблере, написаная на C" (по аналогии с "я вам программу на Фортране на любом языке напишу"). И, для большого и сложного проекта, такая реализация будет скорее всего глючная сама по себе, из-за ошибок в алгоритмах и прочем. Исключительно из-за сложности реализации больших проектов на ассемблере. Там что, по моему мнению, все, о чем тут говорили, представляет исключительно теоретический интерес. Хотя, на диссер не тянет, все придумано до нас :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это вариант. Только я считаю, что это лишнее..

В принципе могу с вами и согласится. Т.к. сам всегда CRC32 FLASH в основном цикле считаю (по слову за раз - см. мои предыдущие посты). Но ни разу не сработало.

Ну просто не будет программа работать нормально если часть флеша слетит по причине прыжка на 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 бит (Р.Л. Хаммел "Последовательная передача данных").

У мелких АРМов (конкурентов мег) есть FLASH. Хотите размещайте во флеш, не хотите - копируйте и запускайте в RAM.

Если код во флеш разместить, то он и выполнятся медленно будет. Примерно с той-же скоростью, как у AVR. А у мелких АРМов разве защита кода есть? Я считал, что нет. Но м.б. у каких-то и есть - просветите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вам больше скажу. Все эти извращения можно применять. :)

Это Вы говорите как специалист по части применения поледних?(шутка) :)

Было бы интересней, если бы Вы привели код или пути решения поставленной задачи [deleted]

Изменено пользователем IgorKossak

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это Вы говорите как специалист по части применения поледних?(шутка)

 

Конечно. (не шутка). Если в меру, можно и поизвращаться. Иногда результаты хорошие получаются.

 

Было бы интересней, если бы Вы привели код или пути решения поставленной задачи,

 

Задача сия точного решения не имеет. Можно только итерациями бесконечно приближаться, асимптотически, к прямой, которая есть "надежность 100%". Хотя полсотни резисторов, рассыпаные по плате имеют вероятность выхода больше, чем камень ;) Рассмотрите необходимость решения данной задачи с точки зрения расчета надежности.

 

[deleted]

Изменено пользователем IgorKossak

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По теме ещё будут сообщения?

Или давайте закроем тему.

 

Модератор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С CRC всё элементарно ведь.

Кстати насчёт CRC. Если, например, иногда нужно бывает 1 слово в защищённом CRC блоке ОЗУ изменить. Я CRC всего блока не пересчитаваю - это долго. Я просто ещё одно слово завожу рядом. И его одновременно меняю, так чтобы CRC всего блока не изменился. Это хакерский приём конечно. И кусок программы которая так делает я принципиально демонстрировать не буду. Ток кто в CRC разбирается - сам запросто такое напишет. А тому, кто не разбирается - такое лучше и не знать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините конечно :bb-offtopic: но никогда не могу пройти мимо подобных заявлений -

"Ток кто в CRC разбирается - сам запросто такое напишет. А тому, кто не разбирается - такое лучше и не знать".

2 galjoen - НУ чтож гордитесь! Вы гениальный!

Не думаете , что если все так будут делать - но всё мы в конечном итоге деградируем ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можна ещё один маленький уточняющий вопрос?

 

Здесь тема только про "ловлю" случайных джампов

А какова вероятность того, что помеха собъёт только PC??? Видимо PC из особого теста леплен.

А если сбивается не только PC(т.е. возможен не только случайный джамп) в чём смысл темы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините конечно :bb-offtopic: но никогда не могу пройти мимо подобных заявлений -

"Ток кто в CRC разбирается - сам запросто такое напишет. А тому, кто не разбирается - такое лучше и не знать".

2 galjoen - НУ чтож гордитесь! Вы гениальный!

Не думаете , что если все так будут делать - но всё мы в конечном итоге деградируем ?

Прошу прощения если меня не так поняли. Не хотел никого обидеть. Я имел в виду, что хакеров-крекеров и так хватает. Это они в программах (для компьютера) таким способом защиту кода с помощью CRC ломают. И мою защиту так сломали (когда-то давным-давно когда я еще молодой-неопытный был). И помогать им в этом я не хочу. В смысле тем, которые этого не знают (пока). А по моему мнению, хакеров со знаниями теории - мало.

Ещё раз простите - в следующий раз при написании поста буду осмотрительней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мда-с...

 

Как защититься от случайного выполнения записи в 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...