Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: сокрытие части исходника
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Allregia
Подскажите пожалуйста "на пальцах", как сделать такую штуку:
есть программа, Кейл для М3, программа демонстрационная - показывает возможности железа.
По условиям договора с заказчиком, он получает схему и исходник программы, за исключением одного куска.
Этот кусочек - несколько функций, в которых закопано собственно ноу-хау.
В дальнейшем заказчик будет сам разрабатывать софт, и должен использовать эти функции.
Поэтому этот кусочек ему надо как-то передать в пригодном для вставляния в его программу виде, но не в исходниках.
Как это попроще сделать? LIB ? OBJ? И собственно, вопрос не только "что" но и "как" - никогда такого не делал.
KARLSON
Читайте создание библиотеки dll.
Сам делал в Builder C++. По книге Архангельского Программирование в С++. Builder 6.0.
MrYuran
Цитата(Allregia @ Jan 9 2012, 02:00) *
Кейл для М3

Цитата(KARLSON @ Jan 10 2012, 09:03) *
Читайте создание библиотеки dll.

sm.gif

Лучше все-таки либу сделать, чем obj.
С интерфейсом в .h-файле

Не знаю как в кейле, но наверняка как у всех. В разделе target или build выбрать library вместо execution

При этом список файлов для компиляции должен состоять только из ваших "секретных" файлов.
Allregia
Цитата(KARLSON @ Jan 10 2012, 07:03) *
Читайте создание библиотеки dll.
Сам делал в Builder C++. По книге Архангельского Программирование в С++. Builder 6.0.


DLL - Dynamic Linking Library, где я ее буду хранить и куда загружать?
редактор
M3 - я так понимаю это кортекс
Без разницы что отдавать *.lib или *.obj
И то и другое можно дизассемблировать при желании (разобрать код на молекулы).
И то и другое потребует *.h файл с описанием включенных функций.
Так что это мало отличаеется от передачи исходников.
Единственное , что исходники можно БЫСТРО поправить для получения своих версий прошивки.
С либой или объектником надо повозиться.
Вопрос в том, захочет ли заказчик возиться с этим.

Если есть необходимость сохранить ноу-хау в секрете то необходимо использовать аппаратную защиту в самом кристале.
При этом заказчику отдавать уже контроллеры с прошитым куском секретного кода и с соответствующими блокировками.
Ну как-то так.
KARLSON
Цитата(Allregia @ Jan 10 2012, 09:17) *
DLL - Dynamic Linking Library, где я ее буду хранить и куда загружать?

хранить где угодно на жёстком диске, лучше вместе с исходниками.
Загружать в исходниках. Просто те функции ноу-хау будут в отдельном файле dll.

Про кейл ничего не знаю, может там и ничего этого и нет.
MrYuran
Цитата(KARLSON @ Jan 10 2012, 13:25) *
Про кейл ничего не знаю, может там и ничего этого и нет.

Вы не поняли, речь идет об исходниках прошивки МК
Idle
пдц, google 'keil static library' http://www.keil.com/forum/19277/
vvs157
Цитата(Allregia @ Jan 9 2012, 02:00) *
Как это попроще сделать? LIB ? OBJ?
Можно обработать часть кода обфускатором. Конечно, при достаточной мотивации обходится, но позволяет формально выполнить требование по передаче всего проекта в исходниках.
zombi
Цитата(MrYuran @ Jan 10 2012, 12:33) *
речь идет об исходниках прошивки МК

Я бы всё ноу-хау написал на асме использовав только относительную адресацию.
И заказчику передал бы текстовый файл машинных кодов (.db xx...) и список вызываемых фукций (адресов входа) в виде смещения относительно начала.
Allregia
Цитата(KARLSON @ Jan 10 2012, 11:25) *
хранить где угодно на жёстком диске, лучше вместе с исходниками.
Загружать в исходниках. Просто те функции ноу-хау будут в отдельном файле dll.


Каком нафиг "жестком диске"?! Все устройство представляет собой плату 3х2см, на которой стоит процессор и еще пара чипов, к которая питается от литиевой батареки и к которой подключено несоколько датчиков.

"Ноу-хау" закопано в математике обработке сигналов датчиков.

Цитата
Про кейл ничего не знаю, может там и ничего этого и нет.


Естественно нет и быть не может, Кейл - это компилятор для микроконтроллеров, в конкретном случае - для процессора из семейства Cortex-M3 (конкретно -LPC1768).

А длл на дельфи/билдере я и сам умею делать. Здесь как бы немножко не тот форум, на котором программирование под писюки рассматривается, разве что как сильно вспомогательная вещь.
am1808
Цитата(Allregia @ Jan 11 2012, 00:38) *
Каком нафиг "жестком диске"?! Все устройство представляет собой плату 3х2см, на которой стоит процессор и еще пара чипов, к которая питается от литиевой батареки и к которой подключено несоколько датчиков.

"Ноу-хау" закопано в математике обработке сигналов датчиков.



Естественно нет и быть не может, Кейл - это компилятор для микроконтроллеров, в конкретном случае - для процессора из семейства Cortex-M3 (конкретно -LPC1768).

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


вам уже ответили, передавайте заказчику функционал в виде либы

и да, в любом случае, если аппаратно не защитите, как бы вы не хранили функционал, любой маломальски путный программист при желании дизассемблирует ваше ноу-хау
adnega
По поводу дизассемблирования: машинный код после оптимизации в ряде случаев нечитаем даже автором исходника. И это с учетом человеческих имен меток, переменных и функций.
Думаю, либа + заголовочный файл вполне защитит "исходный код" от восстановления.
Если матан в ноу-хау приличный, то это дополнительный барьер к взлому, а если "2 + 2", то защищать такое ноу-хау крутыми защитами не целесообразно.
am1808
Цитата(adnega @ Jan 11 2012, 08:38) *
По поводу дизассемблирования: машинный код после оптимизации в ряде случаев нечитаем даже автором исходника. И это с учетом человеческих имен меток, переменных и функций.

оптимизация на понимание логики бинаря при дизасемблировании в целом не повлияет
Allregia
Цитата
вам уже ответили, передавайте заказчику функционал в виде либы


Да я уже понял.

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


Железяки заказчик сам будет делать, в разных варантах. И сам софт под них писать.
Мы сделали демонстрацонный вариант, полностю рабочий, и собствнно торгуем не прибором а именно самим "ноу-хау" (IP - Intellectual Property) - конструкцией датчиков и мат. обработкой.

Цитата(am1808 @ Jan 11 2012, 06:47) *
оптимизация на понимание логики бинаря при дизасемблировании в целом не повлияет


Там не логика, там сплошная математика - цифровые фильтры, корреляции, статистические параметры, причем часть в целых и часть в плавучке - сильно не завидую тому, кто это будет дизассемблировать.
am1808
Цитата(Allregia @ Jan 11 2012, 10:33) *
Там не логика, там сплошная математика - цифровые фильтры, корреляции, статистические параметры, причем часть в целых и часть в плавучке - сильно не завидую тому, кто это будет дизассемблировать.

это спорный вопрос, я бы на вашем месте не был так уверен biggrin.gif
kolobok0
Цитата(Allregia @ Jan 11 2012, 10:33) *
...Железяки заказчик сам будет делать, в разных варантах. И сам софт под них писать....сильно не завидую тому, кто это будет дизассемблировать.


небось с этого форума кто нить и будет тискать за сиськи ваши хау-ноу, если потребуется. Фишка в том, что потребуется... вот над чем стоит задуматься.
1) потребуется подправить алгоритмы
2) потребуется создать своё на базе фаших ноу-хау
3) подправить ошибки
4) дуплицировать прошивку, алгоритмы

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

так же можно защищаться уходя на более высший уровень работы логики. ну например, считать байт защиты, взять от него логарифм, сравнить на больше чем....это примитивно, но даёт понять что въехать в общую логику - сложнее. или возможно вот более наглядный: сделать псевдо машину, и скормить ей псевдо код (когда то сам такое делал, т.к. МК был не самопрограммируемым а заливать апдэйты надо было. если бы тот человек который взламывал прошивку немного подумал как самому сделать на базе того железа - ответ бы он нашёл. а так - вынес вердикт что шифровано усё sm.gif ).

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

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

Разумеется дизассеблировать можно все, также как и фьюзы - тоже не панацея, их взлом тоже это только вопрос времени и денег.
Но в данном случае фирма-заказчик связана с нами долгосрочным договором, и расчитывает получать от нас IP не только на эту задачу но и на последующие (коих уже есть как минмум две, которые в процесе разработки). Идея сотрудничества такова - мы разрабатываем идеологи, алгоритмы, их имплементацию в демонстрационном приборе, а они делают конкретные устройства под конкретные задачи на основе нашей IP.

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

В любом случае, эти вопросы не технические, и их решает "Биг Босс"Ю а он уверяю Вас, совсем не дурак, и не мальчик (ему за 55, за плечами PhD не первый десяток лет в этой области (он кроме того что босс, еще и главный идеолог и разработчик алгоритмов, сам с Маткадом сидит). А я лично тоже против передачи кому-то lib/obj и т.п.
_Pasha
Вам надо:
1. Отвязаться от схемы "вызов_функции - тело_функции". Это можно сделать с помощью таблицы системных вызовов. Т.е. у Вас благодаря этому не либа, а HEX
2. Шифровать либу и предоставлять ключи под NDA
Средства расшифровки получаются привязаны к CPUID. laughing.gif
am1808
Цитата(Allregia @ Jan 11 2012, 16:57) *
В данном случае, "сокрытие исходников" это даже не столько от них (с ними есть NDA, и они от нас и так много чего закрытого получают в открытом виде), сколько от случайного просачивания куде-то еще.

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

а ваши так называемые "ноу-хау", так это только вам кажется, что это ноу-хау biggrin.gif
Allregia
Цитата(am1808 @ Jan 11 2012, 16:34) *
а ваши так называемые "ноу-хау", так это только вам кажется, что это ноу-хау biggrin.gif


Почему Вы так решили?

Это все же не веб-сервер lol.gif
_Артём_
Может поставлять зашитые процессоры с установленной защитой?
Например для АВР реализуется так:
В область Boot пишется загрузчик + функции содержащие ноу-хау (по заданным адресам).
Устанавливается запрет чтения boot-области из application-области.
Application когда надо вызывает нужные функции и при этом не может их прочитать.
Программирование области application усуществляется через загрузчик.

Ещё вариант:
Реализовать ноу-хау в отдельном процессоре с высокоскоросным интерфейсом.

Оба варианта работоспособны. Но от взлома lockbit (если он возможен за разумные деньги) не спасут.
редактор
Цитата
В данном случае, "сокрытие исходников" это даже не столько от них (с ними есть NDA, и они от нас и так много чего закрытого получают в открытом виде), сколько от случайного просачивания куде-то еще.

Тогда все решается именно на предприятии заказчика. При прошивке камня ОБЯЗАТЕЛЬНО должны выставляться биты защиты. Ну а выбор камня ваша прероготива.

з.ы.
Если кто-то будет пытаться скопировать устройство, то разбираться в коде не станут (по крайней мере на первых порах), тупо возьмут прошивку и начнут клонировать. Защита от этого м.б только аппаратная.
Сергей Борщ
QUOTE (_Артём_ @ Jan 12 2012, 15:14) *
Может поставлять зашитые процессоры с установленной защитой?
Например для АВР реализуется так:
К сожалению, такой фишкой обладает только AVR. В случае же автора ветки, то, действительно, от чего защищаемся? Если вы передаете в каком-то виде библиотеку, то ничего не мешает получателю использовать ее в целях клонирования не разбираясь в ее внутренностях вообще. Создать что-то свое так же не проблема - достаточно скопировать ту часть схемотехники, которая завязана на библиотеку. Ведь библиотека у заказчика есть, пусть и в скомпилированном, но тиражируемом виде.
Если же хотите защититься от этого - то логичным выглядит установка отдельного закрытого от чтения процессора, на котором крутится ваш код и который вы поставляете уже зашитым и закрытым. А свои функции заказчик реализует на втором процессоре, для которого вы можете для облегчения жизни заказчика предоставить библиотеку связи с первым процессором, причем библиотека эта может поставляться хоть в исходниках. В закрытом процессоре может быть предусмотрен загрузчик с шифрованием на случай модернизации/багов, в библиотеке связи - реализация заливки шифрованного образа.
_Ivana
Цитата
Ещё вариант:
Реализовать ноу-хау в отдельном процессоре с высокоскоросным интерфейсом.


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


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

ЗЫ это чем-то напоминает защищенные ключами платные драйвера специфического периферийного железа на компьютерах. Куча фирм разрабатывает подобные драйвера и прилагает к ним порой обширное описание ими же придуманных методов функций.
Allregia
Цитата(Сергей Борщ @ Jan 13 2012, 11:19) *
от чего защищаемся?


От раскрытия математических алгоритмов обработки сигналов.

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


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

Цитата
Создать что-то свое так же не проблема - достаточно скопировать ту часть схемотехники, которая завязана на библиотеку.


Почти все схемы им и так даются, там ничего секретного.

Цитата
Ведь библиотека у заказчика есть, пусть и в скомпилированном, но тиражируемом виде.


Так ради бога, пусть тиражирует и побольше - от этого же только нам больше рояльти отчислений будет sm.gif

Устройства достаточно специфические, не ширпотреб, не массовое производство (т.е. китайцы интереса вряд ли проявят sm.gif)
Hmm
Allregia
Просто - отдайте исходники, убрав комментарии. Без них сами через 2 недели забудете в чем там было "ноу-хау". Любой в уме инженер посчитает ниже своего плинтуса разбирать чужой код, а быстрее сам все сделает.
Allregia
Цитата(Hmm @ Jan 13 2012, 23:14) *
Allregia
Просто - отдайте исходники, убрав комментарии. Без них сами через 2 недели забудете в чем там было "ноу-хау".


80% того куска, который хочется "закрыть" - исходники сгенерированы автоматически Матлабом (Симулинком), так что комментарии там еще те....

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


Конечно, если знать по каким формулам считать и с какими коэффициентами.
Ruslan1
Цитата(Allregia @ Jan 11 2012, 14:57) *
Разумеется дизассеблировать можно все, также как и фьюзы - тоже не панацея, их взлом тоже это только вопрос времени и денег.
Но в данном случае фирма-заказчик связана с нами долгосрочным договором, и расчитывает получать от нас IP не только на эту задачу но и на последующие (коих уже есть как минмум две, которые в процесе разработки). Идея сотрудничества такова - мы разрабатываем идеологи, алгоритмы, их имплементацию в демонстрационном приборе, а они делают конкретные устройства под конкретные задачи на основе нашей IP.
............
В любом случае, эти вопросы не технические, и их решает "Биг Босс"Ю а он уверяю Вас, совсем не дурак, и не мальчик (ему за 55, за плечами PhD не первый десяток лет в этой области (он кроме того что босс, еще и главный идеолог и разработчик алгоритмов, сам с Маткадом сидит). А я лично тоже против передачи кому-то lib/obj и т.п.

Честно говоря, складывается ощущение что проблема надуманная.
1.Хотите защитить ноу-хау- патентуйте.
2.Хотите передать только то что записано в договоре- передайте ноухау в либах. Все равно код передавать придется, хоть на носителе (на криптованном магнитном диске или в виде криптованной чипины или на бумаге эльфийскими рунами - непринципиально).
3. Боитесь что от заказчика уйдет в неизвестном направлении и там будет разломано- так это пусть заказчик боится, вы-то уже ему продали, причем как я понимаю не только право владения но и право использования в новых разработках.

Вам больше думать не о чем, как решать решаемые только с некоторой долей вероятности задачи? sm.gif
Allregia
Цитата(Ruslan1 @ Jan 14 2012, 22:45) *
Честно говоря, складывается ощущение что проблема надуманная.


Мне тоже так кажется, но я задал вопрос по просьбе БигБосса sm.gif
Он сам физик, в программировании разбирается слабо (хотя в матлабе творит чудеса).

Цитата
1.Хотите защитить ноу-хау- патентуйте.


Запатентовано, и не одно.

Цитата
2.Хотите передать только то что записано в договоре- передайте ноухау в либах. Все равно код передавать придется, хоть на носителе (на криптованном магнитном диске или в виде криптованной чипины или на бумаге эльфийскими рунами - непринципиально).
3. Боитесь что от заказчика уйдет в неизвестном направлении и там будет разломано- так это пусть заказчик боится, вы-то уже ему продали, причем как я понимаю не только право владения но и право использования в новых разработках.


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

P.S. В общем, уже давно стало понятно что клиенту надо просто дать lib+h, а все последующие разговоры - просто перемалывание воздуха.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.