Как защитить скетч от недобросовестного покупателя

korsianen
Offline
Зарегистрирован: 23.03.2013

Всем привет! Я разработал скетч, а мой напарник подготовил всю силовую коммутацию для станка. (мы дорабатываем ручные станки в автоматические). Работаем по интернету с покупателями. Теперь вопрос: как нам защититься от того что покупатель с нами не расчитается. Деньги, как бы брать, за пока несделанное неприемлимо, а код будет выслан покупателю для тестирования и доработок. Может кто подскажет метод защиты скетча, ну например через 2 недели или 200 наработок скетч перестает работать. Да и к тому же, чтоб в коде это было хоть как-то завуалировано. Еще, как вариант, можно придумать типа джамера между пинами, и проверять через 200 наработок, если его нет, то кранты. Если есть идеи, то жду с нетерпением.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Эта тема всплывала на этом форуме 100500 раз. Ответ: если Вы хотите сделать это честно и законно, то через договор с заказчиком. Любые фокусы с неработоспособностью оборудования (которые, конечно, возможны) ставят Вас под административную (а если, не дай Бог, этот станок кому-нибудь руки оторвёт из-за отказа Ваше скетча, то и под уголовную) ответственность.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Есть вариант, каждый запуск брать число из EEPROM, прибавлять единицу и писать обратно, проверять, не больше ли оно, чем надо. Если больше - уходить в вечный цикл ( while(1); ). И всё)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Написать?

korsianen
Offline
Зарегистрирован: 23.03.2013

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

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

в функцию запихнуть, ту еще в одну функцию, и половину значений через макросы.

Можно еще просто мусора напихать, лишних переменных с именами типа "timer_to_death", с вызывающими такими)

А еще лучше - добавить хидер с мусором.

korsianen
Offline
Зарегистрирован: 23.03.2013

ЕвгенийП пишет:

Эта тема всплывала на этом форуме 100500 раз. Ответ: если Вы хотите сделать это честно и законно, то через договор с заказчиком. Любые фокусы с неработоспособностью оборудования (которые, конечно, возможны) ставят Вас под административную (а если, не дай Бог, этот станок кому-нибудь руки оторвёт из-за отказа Ваше скетча, то и под уголовную) ответственность.

Договор конечно хорошо. Но хочеться обезопаситься заранее. На счет выхода из строя ардуины и датчиков - продумано механическое отключение. Ну а рабочему следует выполнять меры безопасности. Сколько рабочих пострадало на станках, и я не помню случая когда на изготовителя жаловались. Руки просто не туда суют.

korsianen
Offline
Зарегистрирован: 23.03.2013

Yarik.Yar пишет:

в функцию запихнуть, ту еще в одну функцию, и половину значений через макросы.

Можно еще просто мусора напихать, лишних переменных с именами типа "timer_to_death", с вызывающими такими)

А еще лучше - добавить хидер с мусором.

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

korsianen
Offline
Зарегистрирован: 23.03.2013

да и еще проверку можно дополнительно добавить, изменилась ли ячейка ером на 1 после завершения цикла работ.

Это на случай если отключат приращения ерром.

Ну а когда заплатят то высалать код нормальный, как то так.

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

korsianen пишет:

да и еще проверку можно дополнительно добавить, изменилась ли ячейка ером на 1 после завершения цикла работ.

Это на случай если отключат приращения ерром.

Ну а когда заплатят то высалать код нормальный, как то так.

*и, никому в голову не придёт сделать дамп всего ещё до первого подключения и перезаписывать всё для восстановления работоспособности.

astrafoto
Offline
Зарегистрирован: 18.11.2015

Как вариант через сайт FL.ru - там есть безопасная сделка. Или через другие сайты-гаранты, спросите у фрилансеров, они лучше знают.

korsianen
Offline
Зарегистрирован: 23.03.2013

Клапауций 777 пишет:

*и, никому в голову не придёт сделать дамп всего ещё до первого подключения и перезаписывать всё для восстановления работоспособности.

при первом запуске я устанавливаю в ером все нули. потом удаляю код который обнуляет ером. Теперь начилась работа. когда в определенной ячейке дойдет до 255 то блокировка. Даже если перезалить то в ероме останется 255. Да конечно если стереть ером то еще на 255 циклов прога отработает. Тут заказчику изначально об блокировке вообще не надо говорить. Он и не чухница сохранить первоночальный код со стиранием ером.

Ха еще придумал пусть ером обнуляется через 255 циклов, и все. Задача выполнена. Ведь значения у меня в ероме сохраняются для задания там всяких величин(мм, градусы) для станка. И каждый раз с клавиатуры будет проблемно заказчику вбивать эти величины их порядка 200 шт.

arduinec
Offline
Зарегистрирован: 01.09.2015

Нужно придумать, как посылать покупателю не скетч, а бинарный файл, который покупатель каким-то способом будет грузить в Ардуину.

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

arduinec пишет:

Нужно придумать, как посылать покупателю не скетч, а бинарный файл, который покупатель каким-то способом будет грузить в Ардуину.

два файла и не каким-то образом, а дудкой

korsianen
Offline
Зарегистрирован: 23.03.2013

Уважаемый, попрошу Вас пишите по существу. Если человек высказывает свою идею, почему бы и нет, обсудим, может из этой идеи другой метод придумаем. 

Кстати может кто знает, я пока не сталкивался, чтоб код был написан не на понятном языке а например так:

1 - 2f 6a 74 28 ff 
2 - 82 aa ae 3f 60

и тд и тп в 16ой системе или в любой другой

вообще подерживает ли запись стандартными средствами машинного кода

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

korsianen пишет:

Кстати может кто знает, я пока не сталкивался, чтоб код был написан не на понятном языке а например так:

1 - 2f 6a 74 28 ff 
2 - 82 aa ae 3f 60

и тд и тп в 16ой системе или в любой другой

вообще подерживает ли запись стандартными средствами машинного кода

я знаю и сталкивался хекс формат кода называется

:100000003BC0A6C154C053C052C051C050C04FC025
:100010004EC04DC04CC04BC04AC049C048C047C08C
:1000200046C045C044C0040309041C0377007700A0
:1000300077002E00660069007300630068006C00A2
:100040002E00640065000E0355005300420061005D
:100050007300700012011001FF000008C016DC05DB
..........................................
:00000001FF

 

exez
exez аватар
Offline
Зарегистрирован: 04.04.2015

самая грамотная мысль... :) 

а как это реализовать?

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

exez пишет:

самая грамотная мысль... :) 

а как это реализовать?

а, ты у кого это спросил?

*кто открыл курятник с навичками?

Alexbloger
Offline
Зарегистрирован: 29.11.2015

korsianen пишет:

 может кто знает, я пока не сталкивался, чтоб код был написан не на понятном языке а например так:

1 - 2f 6a 74 28 ff 
2 - 82 aa ae 3f 60

и тд и тп в 16ой системе или в любой другой

Это больше выглядит, на просто просмотр определённого файла в HEX режиме. А если имеется ввиду сам код писать так, то это уже машинный и это такой велосипед с дикой наглядностью, который нельзя будет вернуть в прежний вид, который мы видим в скетче. Не говоря о том, что я так понимаю это уже работа с самим процессором, низкоуровневое программирование где нужно знать не функции и библиотеки, а команды процессору, регистры и прочее. Может я неправильно понял вопрос.

Вот к примеру, с википедии:

Программа «Hello, world!» для процессора архитектуры x86 (ОС MS DOS, вывод при помощи BIOS прерывания int 10h) выглядит следующим образом (в шестнадцатеричном представлении):

BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

 И если я правильно понял соль, то нужно смотреть под процессор на борту arduino его команды.

exez
exez аватар
Offline
Зарегистрирован: 04.04.2015

Клапауций 777 пишет:

exez пишет:

самая грамотная мысль... :) 

а как это реализовать?

а, ты у кого это спросил?

*кто открыл курятник с навичками?

ну тут больше надежда была, что кто то шарящий мимо пройдет и остановится :)

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

exez пишет:

ну тут больше надежда была, что кто то шарящий мимо пройдет и остановится :)

оставь надежду, всяк сюда входящий.(с)

*если ТС не знает, что такое хекс-файл, то я отказываюсь признавать его программистом контроллеров.

Alexbloger
Offline
Зарегистрирован: 29.11.2015

Тема я вижу свежая, поэтому попробую накидать своих вариантов: 



1) На мое имхо тема с джамперами лучшая. Добавить проверки, если не перемкнуты пины, то начинать отсчет во времени или количеству прохождения циклов. В итоге, отсылая код заказчику, они и не догадаются, что нужно перемкнуть скажем пин4 и пин5, чтобы через 5 минут или 2 прохода, станок не стал. А в конечно версии изменить проверку, либо дать вводную заказчикам перемкнуть их. 



2) Возможно есть дикий способ - вытереть скетч напрочь, при достижение каких-то условий наработки, либо видоизменить переменные, чтобы по ходу выполнения программа крашилась на начальном этапе. 



3) Добавить модуль SD флеш карты, на которую записывать данные, к примеру была речь о массиве с настройками какими-то. Мол стандартизацию ввести, что вот на эту флешку записываются настройки ваши и для нашего дебага. Мол если есть проблемы, или нужны настройки, то вытаскиваете флешку, и сбрасываете нам файл с информацией. А мы вам в ответ тоже файл, но уже с корректировками под ваш запрос. А вместе с полезной инфой и параметрами станков к ней закинуть и свои проверочные данные. А дальше делать уже по своему вкусу - либо пины, либо еще какой-то креатив с зависанием и т.д. Возможно есть что-то такое уже и в самом arduino - память которая энергонезависимая, и можно писать как на флешку по типу как свободное о скетча место, которое доступно программно для чтения\записи, и не зависит от количества включения/выключения платы, запуск программы, и состояния. Я думаю суть можно уловить, что хотел сказать, мол использовать свободное место под код, для чтения/записи свои данных каких-то, которые будут "независимы" от каждого запуска платы. 



А вариант с EEPROM, вроде бы, вытирает данные после перезапуска платы, или я что-то путаю? 



Но по-сути, если есть толковый программист, которому дадут задание, то найти любые ваши пасхалки, которые останавливают программу - это будет не так уже и сложно. Ведь анализировать код, это не программу дизасемблировать и искать их. Речь же не о готовом продукте идет, мол программа для управления станком с ЧПУ на ПК, когда заказчику сбрасывается уже готовый *.exe с защитой от копирования и мануалы по программе, а он может только дизасемблировать из вариантов "влезть в программу и что-то поменять", а открытый исходный код в котором лазь до посинения, пока не найдешь истину.. 



По этому проще либо как писали договор, либо сайты-гаранты. 

bankir_1986
Offline
Зарегистрирован: 23.03.2015

Я хоть и нуб в этом деле, но (может я не прав) автор темы спросил как защитить его код до получения вознаграждения за его труд, а все его начали долбить, что код считать можно, но только в ассемблере. Так вот повторюсь за автором: Заказчик получает от исполнителя новую прошивку (т.к. железо он уже получил и расчитался, но внес корективы в прог. обеспечение, а исполнитель предоставил новый скетч и не получил за это вознаграждение). Дело в том что получив обновление и залив в дуню она исполняет первые 200 операций, а потом говорить "Оплатите или залейте новое ПО", КЛИЕНТ заливает опять данный скечт и радуется до следующей 200ой операции. Если это делается раз в неделю (а может и раз в месяц) то для заказчика это вооообще не проблема. Все Мы переустанавливали (хоть раз в жизни демо версию, которая расчитана на определенный срок). Так к чему и клонит автор данной темы, КАК сделать свою работу наиболее безапасной, в плане вознаграждения своих трудов.

ЗЫ: Естественно самое законное патент, далее без коминтариев.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Стоп спам! Говорим по существу.

Как вариант, это отправлять HEX-файл, а заказчик пусть шьёт его (http://www.getchip.net/posts/104-proshivka-lyubogo-hex-fajjla-v-arduino-...)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yarik.Yar пишет:

Как вариант, это отправлять HEX-файл, а заказчик пусть шьёт его

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

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Не одобрямс.

Мои заказчики в коде не смыслили вообще)

К тому же, обычно исходники оплачиваются отдельно.

Mastino
Offline
Зарегистрирован: 03.12.2011

Разделите код на две части.. например первая часть кода управляет одними компонентами, другая другими.  И отсылайте два hex файла.. после оплаты даете исходник.  

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yarik.Yar пишет:

К тому же, обычно исходники оплачиваются отдельно.

Вот это уже ближе к делу. Примерно 100500 постов назад я и псиал - всё определяется договором.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

1. Защита чипа от чтения. Включая ЕЕПРОМ.  Фьюзами.
    В ЕЕПРОМЕ хранятся нужные нам счётчики.

2. Расшифровывающий загрузчик. ( самописанный). В нём главное.
    И зашифрованная наша прошивка свободно посылаемая по емайлу

ЕЕПРОМ внешними силами не считать  и не изменить.
При стирании чипа сотрётся загрузчик и прошивка работать не будет.

toc
Offline
Зарегистрирован: 09.02.2013

если автору нужно передавать исходники, в которые покупатель смотреть не будет, то наверно можно применить это:
https://ru.wikipedia.org/wiki/Обфускация

toc
Offline
Зарегистрирован: 09.02.2013

Со стороны покупателя/заказчика, если нужно получить нечто:
1. принимать от разработчика только исходники.
2. проверить, что исходники не обфусцированные, нормальные
3. компилировать самостоятельно, затем проверять.

diger67
Offline
Зарегистрирован: 25.07.2015

korsianen пишет:

Всем привет! Я разработал скетч, а мой напарник подготовил всю силовую коммутацию для станка. (мы дорабатываем ручные станки в автоматические). Работаем по интернету с покупателями. Теперь вопрос: как нам защититься от того что покупатель с нами не расчитается. Деньги, как бы брать, за пока несделанное неприемлимо, а код будет выслан покупателю для тестирования и доработок. Может кто подскажет метод защиты скетча, ну например через 2 недели или 200 наработок скетч перестает работать. Да и к тому же, чтоб в коде это было хоть как-то завуалировано. Еще, как вариант, можно придумать типа джамера между пинами, и проверять через 200 наработок, если его нет, то кранты. Если есть идеи, то жду с нетерпением.

А как насчет bootloader сектор использовать, посидеть подумать как внедрить в него счетчик запусков. Работа ардуино начинается, если мне не изменяет память, с перехода в режим bootloader. Остается один вопрос, сколько станков имеет заказчик... От этого может зависить цена готовой прошвки. Можно обратить свой взор на технологию загрузки с использованием шифрования от Атмел. Тогда и размножить не получиться скачав прошивку т.к. она залочена для чтения и верификации, а в ардуино зашит стандартный bootloader.  Что касается возможности проверить были внесены изменения в скетч или нет, то это будет понятно по реакции станка до и после модифкаций. Ну а самый простой способ, это отсылать новые версии по предоплате. И запомните, ваша программа это ваша ителектуальная собственность. Для заказчика должны быть доступны только разъемы контроллера!!!!

diger67
Offline
Зарегистрирован: 25.07.2015

toc, Вы видимо чаще стоите со стороны заказчика. Попробуйте будучи необремененным ответственностью не разглошать и не распространять пиратским способом програмный продукт получить исходник от любой уважающей себя компании. ХА-ХА три раза.

arduinec
Offline
Зарегистрирован: 01.09.2015

За деньги можно и прошитые чипы (контроллеры) посылать.

Гриша
Offline
Зарегистрирован: 27.04.2014

arduinec пишет:

За деньги можно и прошитые чипы (контроллеры) посылать.

продолжаем тему :) что мешает radmin использовать и самому hex загружать :) .... и вообще, о таких вещах на берегу нужно договариваться....

diger67
Offline
Зарегистрирован: 25.07.2015

Кстати, возвращаясь к закодированному HEX файлу. Атмел продает достаточно дорого свое железо в который вшит бутлофдер с дишифратором. Поддержку и обновление осуществляет условно бесплатно. Это все заложено в стоимость железа с загрузчиком. Опять же все это при условии, что инициатором обновления является производитель. Это и к слову, дать хорошему програмисту и он все решит. Последний дебагер JTAG от Atmel кто то сломал? Вот и я о том же.......

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Поддержу тех, кто пишет что ЕДИНСТВЕННЫМ надежным и законным способом защиты как Заказчика так и Исполнителя является ДОГОВОР.

Все остальное смахивает на обсуждение как на*ать Заказчика, посадив его на накроманскую иглу обновлений кода, за счет разного рода "ухищрений". Никогда сам не сдавал код БЕЗ исходниов и никогда сам не принимал работу без вменяемых (а не запутанных) исходников.

Ничто не укрепляет доверие так, как полноценный договор и предоплата. :)

P.S. Напомню, что Ардуино - есть свободное ПО и свободная платформа. То есть, продавая свой код - вы тем самым нарушаете лицензионное соглашение. Отчисления авторам - не забываете делать? :)

Лицензия использования предполагает получение вознаграждений за обслуживание, консультации и т.д. но никак не КОД.

Гриша
Offline
Зарегистрирован: 27.04.2014

Arhat109-2 пишет:

Лицензия использования предполагает получение вознаграждений за обслуживание, консультации и т.д. но никак не КОД.

КОД - это тоже труд, одни его "дарят", другие "жадничают", как вариант  компромисса  - заложить написание кода в стоимость "железа", а консультации и обслуживание продать...    :)

ЗЫ. вообще странная тема на самом деле, я бы понял, если бы мой сын такое написал (ему 10 лет, и речь шла о первом заработке школьника ), полагаю ТС уже намного старше...

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

Гриша пишет:

полагаю ТС уже намного старше...

я полагаю, что вопрос не в возрасте, а в квалификации ТС как программиста контроллеров AVR.

лично у меня профессионализм ТС вызывает боольшие сомнения, т.к. он до создания темы не знал, что существует такой формат файлов как *.hex.

*а, у вас не возникают сомнения в адекватности ТС взятой на себя миссии писания кода для МК?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Гриша пишет:

ЗЫ. вообще странная тема на самом деле, я бы понял, если бы мой сын такое написал (ему 10 лет, и речь шла о первом заработке школьника ), полагаю ТС уже намного старше...

Это не от возраста зависит. Просто ТС новичёк и "случайный человек" во фрилансе. Люди, которые этим живут таких вопросов не задают, т.к. они точно знают ответ. Я, например, жил только на доходы от фриланса целых 12 лет (и неплохо жил, слава Богу) и повидал всякого - и суды с заказчиками, и кидалово, и чего только не было. И ответ на опрос ТС я знаю точно. Только вот новичкам такие ответы не нравятся - они всё надеются велосипед изобрести и хитрее всех оказаться.

Гриша
Offline
Зарегистрирован: 27.04.2014

ЕвгенийП пишет:

Это не от возраста зависит. Просто ТС новичёк и "случайный человек" во фрилансе. Люди, которые этим живут таких вопросов не задают, т.к. они точно знают ответ.

я это хотел сказать, но промолчал

Клапауций 777 пишет:

я полагаю, что вопрос не в возрасте, а в квалификации ТС как программиста контроллеров AVR.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Гриша пишет:
Arhat109-2 пишет:
Лицензия использования предполагает получение вознаграждений за обслуживание, консультации и т.д. но никак не КОД.
КОД - это тоже труд...    :)

Конечно. Но, взяв за основу разработку Ардуино, исполнитель продавая результат своего труда НАРУШАЕТ лицензию. Никто не мешает купить отладочную станцию, использовать НЕ Ардуино платы, и даже писать БЕЗ использования ИДЕ.

но в таких случаях этот вопрос ТУТ, на форуме про Ардуино - возникнуть не может. :)

ilya.p
Offline
Зарегистрирован: 05.11.2015

exec пишет: "ну тут больше надежда была, что кто то шарящий мимо пройдет и остановится :)"

ты, друг мой, на Клапауциев всяких не надейся - они тролли, дети троллейбуса... а потому всё, что умеют - это наезжать...

 

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

ilya.p пишет:

ты, друг мой, на Клапауциев всяких не надейся - они тролли, дети троллейбуса... а потому всё, что умеют - это наезжать...

*вот, за что себя уважаю, так это за популярность в узких кругах гуманитариев гвоздя и зубила.

ilya.p
Offline
Зарегистрирован: 05.11.2015

Клапауций 777 пишет:

korsianen пишет:

да и еще проверку можно дополнительно добавить, изменилась ли ячейка ером на 1 после завершения цикла работ. Это на случай если отключат приращения ерром. Ну а когда заплатят то высалать код нормальный, как то так.

*и, никому в голову не придёт сделать дамп всего ещё до первого подключения и перезаписывать всё для восстановления работоспособности.

IMHO те, кому придёт в голову заморочиться с дампами всего до первого подключения, заморочатся и на то, чтобы сделать самостоятельно всю работу.

В идеале "код нормальный" должен появиться после подтверждения получения оплаты "сам собой", причём пользователь не должен об этом не должен даже догадываться (можно предложить поставить не одну, а несколько "закладок", каждая из которых включается спустя какое-то время после срабатывания предыдущей и сильнее влияет на работу комплекса). Я бы предложил что-то типа включения инженерного меню, в котором можно сбросить проверку на "оплаченность"... Выход в меню можно было бы организовать, например, при перезагрузке на третьей секунде с последующим нажатием какого-нибудь хитрого сенсора. Ну, я уж не знаю, чем у вас там рулит ардуина, но например - если в схеме есть концевики, нулевые и "ненулевые", можно предложить при перезагрузке удерживать концевик, противоположный "нулевому" (то есть послать на МК последовательность нештатных сигналов, появление которых невозможно в обычной работе).

Да, и ещё... я бы предложил посмотреть повнимательнее на схему работы с заказчиком: а что будет, если вы уже написали скетч (потратив на него некоторое время), а заказчик "передумал"? Требуйте предоплату - или же действительно включайте стоимость разработки ПО в стоимость поставляемого железа (там уже сами будете видеть - подарить заказчику ПО в виде бонуса, или потребовать с него оплату разработки скетча (да, ещё раз, а что тут такого? почему вы должны оставлять свою прибыль кому-то? если проблемы с этим - обратитесь к хорошему психологу, консультирующему предпринимателей).

Клапауций 777
Offline
Зарегистрирован: 21.11.2015

ilya.p пишет:

а что будет, если вы уже написали скетч (потратив на него некоторое время), а заказчик "передумал"?

блин, может начать учить матчасть, прежде чем продавать то в чём вы нихрена не понимаете?

*грёбаные тупые барыги.

nevkon
Offline
Зарегистрирован: 20.01.2015

Все же встряну в обсуждение. Вы к сожалению не понимаете что такое свободное программное обеспечение. Arduino вместе с IDE действительно свободное и распространяется бесплатно. То что вы создаете уже не принадлежит создателям этой платформы и вы можете назначать любую удобную вам лицензию уже на ваш продукт. Для примера приведу простую программу - qCAD. Она сделана не помню уже толи на QT толи на wxWidget. Но факт в том что есть коммерческая версия этой программы. Но ведь среда по лицензии GPL распространяется. Как же они могут продавать ее по вашему?

А по сути вопроса в первом топике. В договоре прописывается что вы создаете программу за вознаграждение. Если вы боитесь не оплаты то прописываете в договоре период обкатки программы и что в данный период код будет работать в демонстрационном режиме. После обкатки производится оплата и выдается заказчику код снимающий блокировку срока действия.

korsianen
Offline
Зарегистрирован: 23.03.2013

Короче не стал сильно замарачиваться накидал код:

// комментарии потом надо убрать
// это выдержки из скетча
//.....
int myChar =505; //ячейка в ером
//.......
void setup() {
  //При первом запуске расскоментировать, 
  //при последующих можно удалить (обнуление ерома)
//  for(int i=0;i<512;i++){EEPROM.write(i,0);}
  //.....
}
void loop() {
  //........
  if(key=='D'){                                  //при нажатии D на клаве идет запуск программы станка
    if (EEPROM.read(myChar)==255){               //проверяем на 255 запуск
      for(int i=0;i<512;i++){EEPROM.write(i,0);} // обнуление ерома
      EEPROM.write(myChar,1);                    // запись в проверочную ячейку ерома 1
      while(1 > 0){}                             //зависание
    }
    EEPROM.write(myChar,EEPROM.read(myChar)+1);  //приращение ячейки ерома
    // тут далее код работы программы станка.......
  }
  //.......
}

главное не ставить в известность заказчика, он и не поймет. Исходники мы ему не даем.

Клапауций 123
Offline
Зарегистрирован: 06.12.2015

korsianen пишет:

главное не ставить в известность заказчика, он и не поймет.

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

exez
exez аватар
Offline
Зарегистрирован: 04.04.2015

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

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

алгоритм предельно простой:

1. еще на стадии разработки меняем любую ячейку. к примеру 353 со значения 255 на 250 или на 0.

2. каждый раз запуская программу читаем значение ячейки. если оно не равно 255 выполняем прогу.

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

 

теперь защита от неоплаты труда

1. пункт первый мы уже выполнили выше.

2. теперь при запуске программы мы просто считываем значение и пишет в эту ячейку +1 или если туда вписали 0 то +10\+20, как угодно реализовываем счетчик. главное в результате записать в ячейкузначение 255.

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

 

зы естественно это мое личное имхо, фьюзами наверняка можно реализовать более эффективную защиту. тут лишь защита от обычного хитропопого юзера.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Жаль, фьюзы менять из кода нельзя...было бы круто)

В stm32 можно, допустим, менять тактирование на лету, что программу сделает неработоспособной)

+ в стм есть уникальный код, можно под процессор писать определённый...