Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR и FLASH/EEPROM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
zombi
Атмел гарантирует для FLASH/EEPROM 10.000/100.000 циклов записи/стирания соответсвенно.

Всвязи с этим у меня возникли два вопроса:

1:Кто знает как умрет внутренняя FLASH/EEPROM после выработки ресурса?
A: перестанет стираться в "1".
B: перестанет программироваться в "0".
Какой из вариантов (A или B ) наиболее вероятен? или 50/50 ?

2. После неудачной операции записи/стирания процессор как-то сообщит об этом? или нужно самому verify делать?


xelax
Могу сказать только про eeprom. У меня была бага которая постоянно перезаписывала первые восемь ячеек. В итоге я так убил eeprom в нескольких девайсах. Выглядело это следующим образом, считывались из этих ячеек абсолютно произвольные значения, чтобы я туда не писал и в какой либо момент не пытался читать. Так же при хождении по шагам в дебагере и просмотре области eeprom, с каждым шагом там возникали произвольные значения.
zombi
Цитата(xelax @ Oct 26 2010, 22:30) *
Могу сказать только про eeprom. У меня была бага которая постоянно перезаписывала первые восемь ячеек. В итоге я так убил eeprom в нескольких девайсах. Выглядело это следующим образом, считывались из этих ячеек абсолютно произвольные значения, чтобы я туда не писал и в какой либо момент не пытался читать. Так же при хождении по шагам в дебагере и просмотре области eeprom, с каждым шагом там возникали произвольные значения.

Прикольно! Просто генератор или рандомайзер какойто!
KKV2003
А может просто "зависнет" и не будет меняться - видел укатанную микросхему в принтере - хранила счетчик страниц. Вроде просто перестал прибавляться...
IJAR
Цитата(zombi @ Oct 26 2010, 21:02) *
...


А что мешает попробовать? Цена на чип?
Насколько мне известно реально можно рассчитывать на 10% от заявленного ресупса
по крайней мере мне так говорил знакомый - они прописавали Flash чере программатор
на одином чипе около 1000 раз - потом он перестал писаться, какие внешние проявления
не знаю
Если использовать внутрисхемное программирование, то возможно цифры будут другие
Stepan_L
У меня однажды счетчик CAVR "нарисовал" 3578 под mega128 для FLach, и все еще работает.....
zombi
Цитата(Stepan_L @ Oct 27 2010, 10:34) *
У меня однажды счетчик CAVR "нарисовал" 3578 под mega128 для FLach, и все еще работает.....

А что это за счетчик "CAVR"?
xelax
Цитата(zombi @ Oct 27 2010, 01:32) *
Прикольно! Просто генератор или рандомайзер какойто!


Функцию распределния вероятностей не исследовал. biggrin.gif
А вообще для рандомайзера это садистский вариант реализации.
zombi
Цитата(xelax @ Oct 27 2010, 11:33) *
Функцию распределния вероятностей не исследовал. biggrin.gif
А вообще для рандомайзера это садистский вариант реализации.

Да хоть бы и садистский. Только если бы Атмел документировал эту генерацию lol.gif
Палыч
Цитата(IJAR @ Oct 27 2010, 11:02) *
Насколько мне известно реально можно рассчитывать на 10% от заявленного ресупса
Наверное, Ваш знакомый - погорячился... Что касается памяти программ - AT89S53 (не AVR, конечно, но - тоже Atmel) выдержала перезапись более двух тысяч раз. EEPROM ATmega128 - до 240 тыс перезаписей без сбоя; затем пошли сбои, которые устранялись повторной прошивкой той же информацией; после 280 тыс перезаписей - ошибка записи, которая не устранилась даже восмью попытками перезаписи. Эксперимент был однократный, питание МК - 5В, комнатная температура.
ILYAUL
Цитата(Палыч @ Oct 27 2010, 21:14) *
Наверное, Ваш знакомый - погорячился... Что касается памяти программ - AT89S53 (не AVR, конечно, но - тоже Atmel) выдержала перезапись более двух тысяч раз. EEPROM ATmega128 - до 240 тыс перезаписей без сбоя; затем пошли сбои, которые устранялись повторной прошивкой той же информацией; после 280 тыс перезаписей - ошибка записи, которая не устранилась даже восмью попытками перезаписи. Эксперимент был однократный, питание МК - 5В, комнатная температура.

Не знаю , но EEprom всё таки память для хранения констант и использовать ее , как оперативную память это нонсенс . Ну я ещё пойму , что при передачи данных и при сбое в связи можно сохранить данные в EEPROM "на потом" , до восстановления связи. Но 280 тысч...
V_G
Частая запись в EEPROM - признак непроработанности проекта. Если надо сохраняться, копите данные в RAM и периодически (изредка) сбрасывайте в EEPROM.
Я, например, на xmege успеваю прописать 1 страницу (32 байта) критических данных при обнаружении факта отключения питания (компаратором xmegи же). Может, и больше можно записать, просто мне не нужно.
А вот накопить 100000 отключений питания - это надо очень постараться и долго щелкать тумблером.
zombi
Кажется что, прочитав мой #1 вопрос, многие решают что меня интересует как избежать порчи EEPROM/FLASH! biggrin.gif
Но на самом деле совсем наоборот!
Хочу попробывать неработоспособность использоать во благо!
Т.е. использовать неработоспособнось одного/нескольких байт/бит как показатель оригинальности изделия!
Поэтому как раз и боюсь восстановления работоспособности!
И хочу узнать как добиться неработоспособности наверняка (раз и навсегда)!
ReAl
Цитата(zombi @ Oct 27 2010, 10:41) *
А что это за счетчик "CAVR"?
Да вроде многие программаторы поддерживают такую фишку - перед стиранием прочесть последние сколько-то байт флеша или EEPROM, стереть, записать назад увеличенное на один значение.
У avreal это ключ -n, как счётчик используются последние два байта флеша.
Я поначалу, для старых AT90S, у которых паспортное значение в одну тысячу стираний было, пользовался этим на всякий случай. Но постепенно выяснилось, что больше нескольких сотен стираний при отладке у меня бывает крайне редко, а атмел подтянулся и поднял планку до десяти тысяч.
zombi
Цитата(ReAl @ Oct 28 2010, 09:07) *
Да вроде многие программаторы поддерживают такую фишку - перед стиранием прочесть последние сколько-то байт флеша или EEPROM, стереть, записать назад увеличенное на один значение.
У avreal это ключ -n, как счётчик используются последние два байта флеша.
Я поначалу, для старых AT90S, у которых паспортное значение в одну тысячу стираний было, пользовался этим на всякий случай. Но постепенно выяснилось, что больше нескольких сотен стираний при отладке у меня бывает крайне редко, а атмел подтянулся и поднял планку до десяти тысяч.

beer.gif т.е. мс должна быть не защищена от чтения? biggrin.gif
Палыч
Цитата(V_G @ Oct 28 2010, 05:09) *
Частая запись в EEPROM - признак непроработанности проекта. Если надо сохраняться, копите данные в RAM и периодически (изредка) сбрасывайте в EEPROM.

Наверное, нужно предусматривать меры от частой записи в EEPROM, если такие имеются.
Сам я часто в EEPROM не записываю - только при калибровке после изготовления/при поверках. Эксперимент с ресурсом flash был проделан из чистого любопытства.
pavel-pervomaysk
Когда количество циклов перезаписи флэш превышает норму нюанс такой : Проц пишется, читается, все в поряде, но программа не выполняется вообще, такое впечатление что он в ресете находится.
Проверенно на ATmega8515 / ATmega8 .
zombi
Цитата(Павлик @ Oct 28 2010, 10:03) *
Когда количество циклов перезаписи флэш превышает норму нюанс такой : Проц пишется, читается, все в поряде, но программа не выполняется вообще, такое впечатление что он в ресете находится.
Проверенно на ATmega8515 / ATmega8 .

На всякий случай переспрошу: речь идет о програмной памяти?
Если да, то это оч и оч интересно!
pavel-pervomaysk
Речь идет о FLASH памяти микроконтроллеров, типы МК я указал. Сколько там циклов было точно не знаю, но много это точно. Я тогда только начинал и очень часто шил чтоб проверить.
xelax
Цитата(V_G @ Oct 28 2010, 05:09) *
Я, например, на xmege успеваю прописать 1 страницу (32 байта) критических данных при обнаружении факта отключения питания (компаратором xmegи же). Может, и больше можно записать, просто мне не нужно.
А вот накопить 100000 отключений питания - это надо очень постараться и долго щелкать тумблером.


Ну сравнили, на xmega возможна постраничная запись, скорость работы с eeprom взлетает в разы из-за этого. Например 32 байта в xmega erase+write это примерно 12 ms, а в обыкновенной атмеге из программы можно только побайтно писать, те же 32 байта будут писаться 32 bytes * 3.3 ms = 105 ms это без учёта того 3.3 ms могут уплыть в большую сторону.

А вообще народ делает разные девайсы, почему именно использование eeprom привязывают к аварии питания. Я например использую её для обмена данными между основной программой и бутлоадером.
GDI
Цитата(zombi @ Oct 28 2010, 09:37) *
Т.е. использовать неработоспособнось одного/нескольких байт/бит как показатель оригинальности изделия!
И хочу узнать как добиться неработоспособности наверняка (раз и навсегда)!

Это что за изделия такие, которые нужно так защищать? И вы хотите каждое устройство при производстве перешивать, пускай и одну страницу во флеше, по 10-100 тыс. раз? Тогда ваши изделия грозят стать "золотыми" и их точно начнут подделывать smile.gif. А ведь Атмел гарантирует 10-100 тыс. перезаписей, но не гарантирует что после этого момента всё станет плохо, т.е. как тут уже говорили "плохеть" памяти может и по достижении более 250 тыс. перезаписей. В общем что-то в вашей идее не то, надо менять концепцию.
zombi
Цитата(GDI @ Oct 28 2010, 12:03) *
Это что за изделия такие, которые нужно так защищать? И вы хотите каждое устройство при производстве перешивать, пускай и одну страницу во флеше, по 10-100 тыс. раз? Тогда ваши изделия грозят стать "золотыми" и их точно начнут подделывать smile.gif. А ведь Атмел гарантирует 10-100 тыс. перезаписей, но не гарантирует что после этого момента всё станет плохо, т.е. как тут уже говорили "плохеть" памяти может и по достижении более 250 тыс. перезаписей. В общем что-то в вашей идее не то, надо менять концепцию.

Подделывать уже начали! crying.gif
А идея действительно плохая, если Атмел не гарантирует что всё станет плохо даже после 250т перезаписи.
Да и прожигать ~14min: (250.000x3.3ms) ни в какие ворота! wassat.gif
Это то и хотелось выяснить!
ReAl
Цитата(zombi @ Oct 28 2010, 09:34) *
beer.gif т.е. мс должна быть не защищена от чтения? biggrin.gif
Да, конечно.
А накойфиг счётчик стираний в рабочем устройстве у заказчика? Туда идут залоченные кристаллы, прошитые аж один раз. Ну пару раз, если в технологии сначала зашивались тестовые прошивки для контроля/калибровки и только потом рабочая.
Счётчик (если и) нужен, то на столе у разработчика, чтобы оценить, насколько часто делалось "щас я тута быстренько пару строк поменяю, перезашю и проверю" и на сколько времени в таком режиме работы хватит данного кристалла.
Палыч
Цитата(ReAl @ Oct 28 2010, 15:07) *
А накойфиг счётчик стираний в рабочем устройстве у заказчика?
Как я себе понял - автору топика вовсе не нужно иметь счетчик стираний. С помощью издевательств над flash он желал получить МК с уникальной, только ему известной неисправностью для идентификации "свой-подделка".
ILYAUL
Вообще-то способов шифрования уйма - может стоит вместо убивания EEPROM - записать уникальный код - например псевдослучайная последлвательность или сложение по модулю два - он же "белый шум" . При этом не зная начальных условий его образования - уйма времени на расшифровку
zombi
Цитата(Палыч @ Oct 28 2010, 15:33) *
Как я себе понял - автору топика вовсе не нужно иметь счетчик стираний. С помощью издевательств над flash он желал получить МК с уникальной, только ему известной неисправностью для идентификации "свой-подделка".

Именно!
ReAl
Цитата(Палыч @ Oct 28 2010, 15:33) *
Как я себе понял - автору топика вовсе не нужно иметь счетчик стираний.
А Вы по стрелочкам отследите - кто кому на что отвечал, если всю ветку читать лень.
Было это:
Цитата(Stepan_L @ Oct 27 2010, 10:34) *
У меня однажды счетчик CAVR "нарисовал" 3578 под mega128 для FLach, и все еще работает.....
Потом это:
Цитата(zombi @ Oct 27 2010, 10:41) *
А что это за счетчик "CAVR"?
Потом мой ответ про то, что за счётчик.
zombi
Цитата(ILYAUL @ Oct 28 2010, 16:33) *
Вообще-то способов шифрования уйма - может стоит вместо убивания EEPROM - записать уникальный код - например псевдослучайная последлвательность или сложение по модулю два - он же "белый шум" . При этом не зная начальных условий его образования - уйма времени на расшифровку

Современные "пираты"[CENSORED] не тратят время ни на засшифровку ни на любое разбирательство с кодом. 1111493779.gif
Каким то образом вытаскивают прошивку целиком и шоб мы тама не напридумывали (шум белый,серый или даже сиреневый) копия работает точно как и оригиал.

Один знакомый мне сказал:
"Закладывай програмную неисправность срабатывающую через некоторое время (день,мес,год...) изначально.
А перед срабатыванием меняй всем легальным покупателям изделие на новое с отсрочкой и/или с новой неисправностью,
главное чтоб абсолютно бесплатно!!! , типа - free upgrade".

т.е. после нескольких итераций пиратам надоест.

Но меня этот вариант не устраивает, попробуй сыщщи потом покупателей. Боюсь сам себе навредить!
ILYAUL
Ни один пират не будет заморачиваться и вытаскивать прошивку , если нет коммерчееского успеха той или иной разработки.
zombi
Цитата(ILYAUL @ Oct 28 2010, 18:29) *
Ни один пират не будет заморачиваться и вытаскивать прошивку , если нет коммерчееского успеха той или иной разработки.

И шо делать? unsure.gif
Ни Атмел ни альтера им (пиратам) не преграда!
Просто руки опускаются! wassat.gif
ILYAUL
Цитата(zombi @ Oct 29 2010, 01:32) *
И шо делать? unsure.gif
Ни Атмел ни альтера им (пиратам) не преграда!
Просто руки опускаются! wassat.gif

Вы сами должны оценить , насколько удачен Ваш проект, и тогда уж выдумывать свой способ защиты авторских прав
Stepan_L
В CodeVisionAVR есть Chip Programmeg Counter
zombi
Цитата(ILYAUL @ Oct 29 2010, 10:03) *
Вы сами должны оценить , насколько удачен Ваш проект, и тогда уж выдумывать свой способ защиты авторских прав

Защита авторских прав мне не нужна!
Мне нужно девайс защитить от копирования!
МП41
А если "выжигать" один из свободных выводов МК, а потом программно определять неисправность вывода? Внешне эта уникальность будет не видна. Проблема не спалить весь порт.
Maik-vs
Интересно. Ну замучили вы за четверть часа еепром, стал он выдавать случайные значения. Как это поможет избавиться от пиратского копирования? (вообще-то вытаскивать код из-под лок-битов совсем непросто, на порядки дешевле украсть комп разработчика и т.п.). Или вы сможете таким образом отличать сделанный вами прибор от "поддельного". Ну на здоровье - юзера не интересует кто сделал, лишь бы купить дешевле и чтоб работал. Будете ездить по стране проверять (а кто даст?), вчинять иски?
Ниччего не понимаю...
Corvus
Цитата(zombi @ Oct 28 2010, 18:48) *
Каким то образом вытаскивают прошивку целиком и шоб мы тама не напридумывали (шум белый,серый или даже сиреневый) копия работает точно как и оригиал.


Не рассматривался вариант, что "паршивки" утекают не из готовых изделий. А прям на стадии производства. rolleyes.gif
ИМХО, это куда более вероятно, чем все страшилки про вычитывание прошивки из залоченного кристалла. Где-то была тема, вроде бы кто-то даже брался продемонстрировать, что это возможно. Никто не помнит, чем дело кончилось?
zombi
Цитата(Maik-vs @ Oct 29 2010, 14:18) *
Интересно. Ну замучили вы за четверть часа еепром, стал он выдавать случайные значения. Как это поможет избавиться от пиратского копирования?

Дык они (пираты) не должны об этом знать!

Цитата(Maik-vs @ Oct 29 2010, 14:18) *
на порядки дешевле украсть комп разработчика и т.п.).

На здоровье, усе зашифровано! Разве что разбой и то не факт biggrin.gif

Цитата(Maik-vs @ Oct 29 2010, 14:18) *
Или вы сможете таким образом отличать сделанный вами прибор от "поддельного".

А нерабочая ячейка зачем?
Отличать буду не я, а сам девайс!

Цитата(Maik-vs @ Oct 29 2010, 14:18) *
Ну на здоровье - юзера не интересует кто сделал, лишь бы купить дешевле и чтоб работал. Будете ездить по стране проверять (а кто даст?), вчинять иски?
Ниччего не понимаю...

"Ездить!? Вчинять иски!?" зачем?
Если через пол года - год девайс "сдохнет" вот тогда его (юзера) и заинтересует! biggrin.gif

Цитата(МП41 @ Oct 29 2010, 11:59) *
А если "выжигать" один из свободных выводов МК, а потом программно определять неисправность вывода? Внешне эта уникальность будет не видна. Проблема не спалить весь порт.

Оооо это уже интересно! Надо подумать. Как палить чтобы совсем не спалить! Порты то свободные есть но на них ниче не приходит! laughing.gif
rezident
"Шо, опять?!" Очередной холивар на тему защиты от копирования, коих тут уже с десяток было. Делать подобную зашиту для МК то же самое, что ставить противоугонку, которая только противно голосить умеет - м.б. защитит от прохожего гопника, но при этом задолбает добропорядочных граждан. Если кто-то по-настоящему захотел угнать/украсть/скопировать, то он сделает это в любом случае и при любой защите. laughing.gif Прибор, который сам дохнет через полгода, уронит репутацию производителя даже, если это будет клон, а настоящий производитель не будет иметь к нему отношения. Защищать же не уникальные в своем роде и/или не массовые разработки это вообще дурдом и совершенно бесполезная трата энергии.
zombi
Цитата(rezident @ Oct 30 2010, 00:47) *
защитит от прохожего гопника, но при этом задолбает добропорядочных граждан. Если кто-то по-настоящему захотел угнать/украсть/скопировать, то он сделает это в любом случае и при любой защите. laughing.gif

И шо делать? Работать и сушить мозги только для того чтоб китайцев накормить?

Цитата(rezident @ Oct 30 2010, 00:47) *
Прибор, который сам дохнет через полгода, уронит репутацию производителя даже, если это будет клон, а настоящий производитель не будет иметь к нему отношения.

Вот этого и опасаюсь!

Цитата(rezident @ Oct 30 2010, 00:47) *
Защищать же не уникальные в своем роде и/или не массовые разработки это вообще дурдом и совершенно бесполезная трата энергии.

Но максимально усложнить копирование - это святое. biggrin.gif
athlon64
Встречалась мне Atmega2561, у которой в EEPROM по адресу, в который особенно часто производилась запись на протяжении 2 лет, читалось значение правильное за исключением одного бита №7, который принимал значение то 0, то 1. В результате считываемое значение могло прочитаться верно либо увеличенным на 64 smile.gif
GDI
Цитата(zombi @ Oct 30 2010, 04:45) *
И шо делать? Работать и сушить мозги только для того чтоб китайцев накормить?

А Вы пробовали купить ваш поддельный девайс? Может китайцы чисто схему содрали, а софт свой написали? Тогда все ваши пляски с защитой прошивки теряют всякий смысл.
МП41
Цитата(athlon64 @ Nov 8 2010, 13:46) *
...за исключением одного бита №7, который принимал значение то 0, то 1. В результате считываемое значение могло прочитаться верно либо увеличенным на 64 smile.gif

Стало быть у Вас нумерация битов начинается с единицы?
athlon64
Цитата(МП41 @ Nov 8 2010, 15:57) *
Стало быть у Вас нумерация битов начинается с единицы?

да, седьмой если считать с 1, шестой если с нуля
zombi
Цитата(GDI @ Nov 8 2010, 13:55) *
А Вы пробовали купить ваш поддельный девайс? Может китайцы чисто схему содрали, а софт свой написали? Тогда все ваши пляски с защитой прошивки теряют всякий смысл.

Покупать не пробывал biggrin.gif
А вот на ремонт приносили!
То что содрали прошивку всех чипов нет никаких сомнений :
Мной случайно была допущена незначительная ошибка в проэкте.
Ошибка проявляется только при использовании в устройстве чипов некоторых производителей.
Так вот, в копиях есть точно такая же ошибка!
GDI
Поставьте iButton-овский чип с серийным номером в корпусе so23 и ведите реестр серийных номеров. + Напишите везде "Опасайтесь подделок, берите только у производителя.".
zombi
Цитата(GDI @ Nov 9 2010, 18:49) *
Поставьте iButton-овский чип с серийным номером в корпусе so23 и ведите реестр серийных номеров. + Напишите везде "Опасайтесь подделок, берите только у производителя.".

Написать надпись нет проблем, можно даже на кытайском попробывать biggrin.gif
А с iButton-овским чипом, чето не пойму как его использовать? laughing.gif
Vasily_
Цитата
Поставьте iButton-овский чип с серийным номером в корпусе so23 и ведите реестр серийных номеров. + Напишите везде "Опасайтесь подделок, берите только у производителя.".

Абсолютно бесполезная трата времени и денег на такую защиту, такие ключики делают уже в любом сортире.
GDI
Цитата(zombi @ Nov 9 2010, 19:24) *
А с iButton-овским чипом, чето не пойму как его использовать? laughing.gif

Да просто ставите его на плату и по 1-wire читаете серийник с него, они там все уникальные. Серийник там выжигается лазером и не может быть изменен. А у себя ведете базу выпущенных девайсов с серийниками. Можно даже на сайте сделать проверку на вшивость, пусть пользователи вводят серийник в поле и проверяют на оригинальность, в общем дальше фантазия безгранична.

Цитата(Vasily_ @ Nov 9 2010, 22:59) *
Абсолютно бесполезная трата времени и денег на такую защиту, такие ключики делают уже в любом сортире.

Дело не в их уникальности, а в том чтобы иметь у себя уникальные серийники, а если кто-то сделает такой чип с фиксированным номером, то такой просто объявляется невалидным, как ключи у Каспера. А если кто-то покупает честные микры, то номера у них будут отличными от тех что есть в базе производителя.
zombi
Цитата(GDI @ Nov 10 2010, 12:20) *
Да просто ставите его на плату и по 1-wire читаете серийник с него, они там все уникальные.

Для того чтобы иметь у каждого изделия уникальный номер я могу обойтись и без iButton biggrin.gif biggrin.gif biggrin.gif

Цитата(GDI @ Nov 10 2010, 12:20) *
А у себя ведете базу выпущенных девайсов с серийниками. Можно даже на сайте сделать проверку на вшивость, пусть пользователи вводят серийник в поле и проверяют на оригинальность, в общем дальше фантазия безгранична.

Проблемы с определением оригинальности нет ни у меня ни у покупателя !!!
Проблема только в том как заставить само устройство определять что оно подделано !!!
Палыч
Цитата(zombi @ Nov 10 2010, 13:07) *
Для того чтобы иметь у каждого изделия уникальный номер я могу обойтись и без iButton
Вы хотите иметь в своих устройствах некую уникальность. Пытаетесь "убить" часть МК для получения этой самой уникальности, "скрытой" от людей незнающих о ней. Не факт, что такую уникальность, повторяющуюся из изделия в изделие можно легко получить. Вам предлагают создать такую уникальность, но "внешними" (с точки зрения МК) средствами - добавить в Ваше устройство iButton. Уникальный номер установленного iButton Вы могли бы "вбивать" в заливаемою прошивку МК, в каждый экземпляр - свой номер (вероятно, даже в "зашифрованном" виде). Конечно, наличие в устройстве iButton сразу наводит на мысль, что номер с него считывается МК и проверяется. "Злоумышленникам" необходимо будет анализировать прошивку на предмет "выкусывания" участка программы с проверкой подлинности, что затруднит им повторение Вашего устройства. Если Вы сможите "маскировкой" этого участка программы максимально затруднить им поиск, то, наверное, Ваша цель будет достигнута. Ещё можно, наверное, добавить проверку прошивки МК на несанкционированные изменения - например, проверкой контрольных сумм различных участков Вашей программы. Всё это - добавит "геморроя" не только "злоумышленникам", но и Вам, но это - Ваш выбор.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.