реклама на сайте
подробности

 
 
19 страниц V  « < 14 15 16 17 18 > »   
Closed TopicStart new topic
> Защита секция кода во FLASH в ATmega, Как защититься от несанкционированного выполнения кода
zltigo
сообщение Feb 18 2008, 13:14
Сообщение #226


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Дон Амброзио @ Feb 18 2008, 16:04) *
Где это я сказал хоть одно слово, о том...

Сказали и не только сказали, но цифры привели о том как может хреново спроектированная система работать. Все, так сказать описали, только выводов для себя не сделали НИКАКИХ - продолжаете трясти пальму.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Feb 18 2008, 13:19
Сообщение #227


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата(Дон Амброзио @ Feb 18 2008, 12:51) *
Т.е. от ответа на вопрос Вы уклоняетесь. Значит разницу между надёжностью программ и надёжностью железа не понимаете. Тогда о чём тогда вообще вести речь? 07.gif

Ну просветите меня может я заблуждаюсь. Что же такое по вашему надёжность ПО? И что такое надёжность железа? Только не надо отсылать к диплому по распределённой ОСРВ.

P.S. про уклонистов и "четатилей" давайте не будем лучше.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 18 2008, 13:20
Сообщение #228


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Поскольку обсуждение темы (не имеющее, к слову сакзать, полезного результата) плавно переходит в банальный флуд, а точнее троллинг со стороны пользователя Дон Амброзио, последний переведён в режим read only на неделю для внимательного ознакомления с правилами.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 18 2008, 14:04
Сообщение #229


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(galjoen @ Feb 18 2008, 14:43) *
Как вам мой 2й вариант замены call на следующую последовательность команд:
ldi R16,low(mRet) ; только в случае call - для jmp не ставим
push R16 ; только в случае call - для jmp не ставим
ldi R16,high(mRet) ; только в случае call - для jmp не ставим
push R16 ; только в случае call - для jmp не ставим
ldi R16,low(mCall)
push R16
ldi R16,high(mCall)
push R16
ret ; Это вместо call - тапереча так будет. jmp заменить проще - 4 первых команды выкидываются.
mRet:
....
mCall:
...
ret
И Вы всерьез считаете что таким образом повысили устойчивость программы от
случайных jump ?
Ну тогда подумайте что будет если произойдет случайный jump куда-нить между push...
Цитата
А где тут патенты-то выдают, вы говорите?

Все давно уже украдено придумано до Вас...
На досуге почитайте AVR Instruction Set,
особенно обратите внимание на инструкции ijmp и icall
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 18 2008, 16:28
Сообщение #230


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(singlskv @ Feb 18 2008, 17:04) *

Вы...это...мыслю - то попинайте немного.smile.gif
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 18 2008, 16:54
Сообщение #231


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(_Pasha @ Feb 18 2008, 19:28) *
Вы...это...мыслю - то попинайте немного.smile.gif
Не понял про какой пост идет речь, вместо ссылки лучше номер поста
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 18 2008, 17:26
Сообщение #232


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(singlskv @ Feb 18 2008, 18:54) *
Не понял про какой пост идет речь, вместо ссылки лучше номер поста

Про тот где избавление от LDS/STS описано.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 18 2008, 18:14
Сообщение #233


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(singlskv @ Feb 18 2008, 17:04) *
И Вы всерьез считаете что таким образом повысили устойчивость программы от
случайных jump ?

Всерьёз
Цитата(galjoen @ Feb 18 2008, 14:58) *
А где слова благодарности, слёзы радости, восторженные крики поклонников?!?!
Вот обижусь и больше ничего такого не напишу. Пропадёте ведь без меня!!!

Это тоже серьёзно
Цитата(singlskv @ Feb 18 2008, 17:04) *
На досуге почитайте AVR Instruction Set, особенно обратите внимание на инструкции ijmp и icall

Я ijmp и icall уже кто-нить запатентовал? Если нет, то я побежал патентовать.
Цитата(_Pasha @ Feb 18 2008, 19:28) *
Вы...это...мыслю - то попинайте немного.smile.gif

А тут я отвечу так:
Цитата(Liseev @ Feb 14 2008, 17:45) *
Народ, хватит издеваться над человеком!

Это взято мной из другой темы. Там один чел хотел запрограммировать ОУ так, чтобы робот умно препятствия обходить стал. Так ему отвечали, что этот ОУ запрограммировать невозможно. Надо-бы поставить другой ОУ - программируемый.

А теперь серьёзно.
Насчёт STS/LDS - атмел похоже уже всё придумал до нас. Заглянул я тут в AVR Instruction Set, как мне и советовали. И сейчас один очень умный вещь скажу: если у АВР внешнего ОЗУ нет (а в 90% применений это так), то LDS/STS инструкции ничего опасного содержать не могут. Т.к. первые 4 бита адреса =0 будут! Там могу содержаться такие инструкции как: fmul, muls, movw, cpc, sbc, add, nop. В общем я ни одной потенциально опасной инструкции не нашёл!!! Это что совпадение??? Или м.б. кто то что то найдёт. По крайней мере в AVR Instruction Set заглянет. Иногда надо знания освежить!
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 18 2008, 18:43
Сообщение #234


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(defunct @ Feb 18 2008, 20:26) *
Про тот где избавление от LDS/STS описано.
Понятно что можно обойтись без LDS/STS, только ограничений у такого подхода много.
Только 64 байта под переменные, а если нужно больше ?
"Намертво" забитая под это дело регистровая пара, а их всегда так мало.
Невозможность одновременно работать с 3 источниками/приемниками данных с автоинкрементом.
и т.д.

Вобще можно без многого обойтись...
Вопрос в целесообразности.

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


Цитата(galjoen @ Feb 18 2008, 21:14) *
А теперь серьёзно.
Насчёт STS/LDS - атмел похоже уже всё придумал до нас. Заглянул я тут в AVR Instruction Set, как мне и советовали. И сейчас один очень умный вещь скажу: если у АВР внешнего ОЗУ нет (а в 90% применений это так), то LDS/STS инструкции ничего опасного содержать не могут. Т.к. первые 4 бита адреса =0 будут! Там могу содержаться такие инструкции как: fmul, muls, movw, cpc, sbc, add, nop. В общем я ни одной потенциально опасной инструкции не нашёл!!! Это что совпадение??? Или м.б. кто то что то найдёт. По крайней мере в AVR Instruction Set заглянет. Иногда надо знания освежить!
Я Вас еще немного поогорчаю, ладно ?
Раз уж посмотрели Instruction Set, загляните еще и в даташит например на mega64/128,
ну и постарайтесь найти с какого по какой адрес у них расположена SRAM...

Ну а потом еще гляньте даташиты на 640/1280..... это у которых 8Kb SRAM.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 18 2008, 20:24
Сообщение #235


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(singlskv @ Feb 18 2008, 21:43) *
Я Вас еще немного поогорчаю, ладно ?
Раз уж посмотрели Instruction Set, загляните еще и в даташит например на mega64/128,
ну и постарайтесь найти с какого по какой адрес у них расположена SRAM...

Ну а потом еще гляньте даташиты на 640/1280..... это у которых 8Kb SRAM.

Я действительно огорчился т.к. решил, что вы Instruction Set не посмотрели. А я-то надеялся, что посмотрите. Я там ни одной потенциально опасной команда со старшим битом =0 не нашёл. Т.е. опасность начинается с адреса 0x8000 и до 0xFFFF. Ни у одного АВР встроенного ОЗУ там нет. Хотя не уверен конечно - может какую то команду я пропустил. Поэтому других, и вас в том числе посмотреть просил.

Про 4 старших бита это я специально написал. Проверить хотел - будет-ли кто действительно Instruction Set смотреть. Никто и не подумал! Иначе написал бы. Т.к. не заметить, что все потенциально опасные команды старший бит =1 имеют не мог. Или нашел-бы какую-то опасную команду со старшим битом =0. Поэтому я действительно огорчился. Т.к. понял, что просто флудим мы тут. И ничего полезного в этом нет. Это я безо всякой иронии или злорадства говорю.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 18 2008, 20:46
Сообщение #236


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(galjoen @ Feb 18 2008, 23:24) *
Я действительно огорчился т.к. решил, что вы Instruction Set не посмотрели. А я-то надеялся, что посмотрите. Я там ни одной потенциально опасной команда со старшим битом =0 не нашёл. Т.е. опасность начинается с адреса 0x8000 и до 0xFFFF. Ни у одного АВР встроенного ОЗУ там нет. Хотя не уверен конечно - может какую то команду я пропустил. Поэтому других, и вас в том числе посмотреть просил.

Про 4 старших бита это я специально написал. Проверить хотел - будет-ли кто действительно Instruction Set смотреть. Никто и не подумал! Иначе написал бы. Т.к. не заметить, что все потенциально опасные команды старший бит =1 имеют не мог. Или нашел-бы какую-то опасную команду со старшим битом =0. Поэтому я действительно огорчился. Т.к. понял, что просто флудим мы тут. И ничего полезного в этом нет. Это я безо всякой иронии или злорадства говорю.

Код
  lds ZL, Addr_low  // Addr_low==000100rdddddrrrr код инструкции CPSE
  lds ZH,Addr_high
  ijmp
Ну и в какую ж... даль мы улетим если значения в регистрах rrrrr и ddddd совпадут ?
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 18 2008, 22:20
Сообщение #237


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(singlskv @ Feb 18 2008, 23:46) *
Код
  lds ZL, Addr_low  // Addr_low==000100rdddddrrrr код инструкции CPSE
  lds ZH,Addr_high
  ijmp
Ну и в какую ж... даль мы улетим если значения в регистрах rrrrr и ddddd совпадут ?

Так эта тема о чём! О том, что куда бы мы не улетели, там-бы мы ничего плохого-то не наделали! Сам-то улёт мы отменить не можем. Регистр перед ijmp собъётся, данные в ОЗУ перед ret, ук-ль стека, PC ... Мы тут пишем о том, как последствия этого улёта минимальными сделать. Хотя-бы по теории вероятности минимальными. Т.е. говоря вашими словами: в какую ж... даль мы-бы не улетели - мы там в ж... не попадём! А это возможно, только если во всей программе ни одной потенциально опасной команды (в т.ч. и во вторых словах двухсловных команд и в таблицах) не будет. А потенциально опасными командами можно считать те, которые зацикливают (могут на wdr зациклить), в регистры пишут (например в порты), или в ОЗУ в то место где реально регистры могут оказаться (запись собственно в ОЗУ безопасна). И мы пришли к выводу, что полностью от этого избавится невозможно. Можно только риск уменьшить. Например, при правильном написании программы, риск того, что командой spm мы FLASH при случайном прыжке сотрём меньше, чем вероятность случайного совпадения CRC16 (см. мой пост). А кол-во таких команд типа: st(std) X(Y или Z),Rxx поменьше надо делать, т.к. состояние X, Y или Z в этом случае неизвестно - могут в порт что-нибудь такое выдать. И размер кода перед ними, переход на который к их выполнению приведёт - тоже уменьшать надо. А вот команда STS в ОЗУ, как я показал, безопасная. Т.к. сама в регистр записать ничего не может, а второе слово у неё со старшим битом =0. Там тоже опасной команды не может быть. Это же к LDS относится. Так-же получается, что все jmp и call в адреса от 0 до 0x7FFF - безопасные! С точки зрения 2го слова конечно. Опасность команды OUT от адреса в ней зависит. И т.д....

Пишу и думаю: всё это ещё кому нибудь интересно или нет? Я-то ко всему этому интерес стремительно теряю, т.к. все во флуд превращается. Все и саму тему-то уже давно забыли.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 18 2008, 22:39
Сообщение #238


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(singlskv @ Feb 18 2008, 20:43) *
Вопрос в целесообразности.

Я то с вами согласен.
Тема становится скучной...

Цитата
значительно более дешевым и надежным будет просто аппаратное дублирование

+1

Цитата
Так эта тема о чём! О том, что куда бы мы не улетели, там-бы мы ничего плохого-то не наделали! Сам-то улёт мы отменить не можем.

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

Цитата
Пишу и думаю: всё это ещё кому нибудь интересно или нет? Я-то ко всему этому интерес стремительно теряю, т.к. все во флуд превращается. Все и саму тему-то уже давно забыли.

Да конечно же нет. Ну есть возможность "призрачно" обезопасить код от "неизвестных" инструкций, да только зачем это делать?! Зачем терять в производительности на всю эту чушь, если можно выделить лишь критические пункты - те от которых действительно нужна защита (от которых зависит функционирование комлекса):
- запрещенные комбинации упр. сигналов (сигналы "вкл" и "откл" одновременно)
- отказ интерфейса(ов) связи.
- останов RTC
- слет eeprom
- слет флеш
и т.п.

сосредоточиться только на этих конкретных пунктах и строить защиту, предотвращающую последствия их возникновения. А что толку от борьбы с каким-то абстрактным прыжком в какой-то абстрактной программе на ассемблере smile.gif, для какого-то абстрактного МК, которая дает какую-то абстракную вероятность повышения надежности?
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 19 2008, 07:59
Сообщение #239


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(defunct @ Feb 19 2008, 01:39) *
Да конечно же нет. Ну есть возможность "призрачно" обезопасить код от "неизвестных" инструкций, да только зачем это делать?! Зачем терять в производительности на всю эту чушь, если можно выделить лишь критические пункты - те от которых действительно нужна защита (от которых зависит функционирование комлекса):
- запрещенные комбинации упр. сигналов (сигналы "вкл" и "откл" одновременно)
- отказ интерфейса(ов) связи.
- останов RTC
- слет eeprom
- слет флеш
и т.п.

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

Согласен. С точки зрения практика (а я практик) именно так всё и есть.
А попробовал я тут теоретиком заделаться. И что получилось? Оказывается обо всём том, что мы тут откровением считали, атмел давным-давно позаботился. А мы пользуемся. Видимо в атмеле теоретики-то давно уже "абстракную вероятность повышения надежности" подсчитали. И мы лучше них не сделаем. Говорю так, т.к. не верю в случайность того, что у всех потенциально опасных команд старший бит =0 оказался. Из-за этого ведь все реально встречающиеся двухсловные команды безопасными стали. Вероятность того, что это случайность (0ю гипотезу) я в менее 0.5% оцениваю. А может я и ошибаюсь т.к. с вероятностями давным-давно не работал. Или ещё где-то ошибка есть. Но в любом случае вывод из всего этого один - каждый должен заниматься своим делом. А исключения из этого хобби называются.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 19 2008, 08:07
Сообщение #240


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Мне одно непонятно:
Что имелось ввиду ледибагами, когда они вот эту дисциплинку ввели по записи в особо ответственные регистры типа: SPMCR и обязательно в 4 такта SPM. Отчего эта байда спасает реально?
Go to the top of the page
 
+Quote Post

19 страниц V  « < 14 15 16 17 18 > » 
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 05:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016