Как предотвратить изменение библиотеки arduino?

Из соображений безопасности я создал библиотеку для всех, но я не хочу, чтобы люди меняли мою библиотеку, потому что из-за нее устройство не работает. Я ищу вокруг, но все еще не работает. Нужно ли мне установить пароль для библиотеки или сделать его нечитаемым, или сделать его невозможным для изменения, или другим способом, которым вы можете указать направление?

P/s: Думай как хакер, я могу сменить библиотеку и провести атаку на сервер из библиотеки.

, 👍-1

Обсуждение

почему для вас проблема, если кто-то меняет библиотеку и в результате устройство выходит из строя?, @jsotola

это заставляет устройство не работать, @Tony

@Quang, это не ответ на мой вопрос ... вы уже сказали, что устройство может не работать .... почему это ваша проблема? ...почему это не проблема того, кто менял библиотеку?, @jsotola

*устройство не работает* - какое устройство? Еще немного деталей, пожалуйста., @Nick Gammon

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

Смотрите мой исправленный ответ, чтобы узнать, что я думаю о вашем «хакерском» комментарии., @Nick Gammon


3 ответа


3

Нет, этого делать нельзя. Как может работать библиотека, если она нечитаема?

Если вы не хотите, чтобы кто-то изменил его, не публикуйте его.

Если вы опубликуете его, вы можете поместить на него заявление об отказе от ответственности:

Если вы измените мою библиотеку, она может перестать работать.


(Добавлено к вопросу два дня спустя)

P/s: Думай как хакер, я могу сменить библиотеку и провести атаку на сервер из библиотеки.

Да, но если вы распространяете исходную библиотеку, то кто-то должен будет скачать ее, изменить, а потом атаковать ею себя!

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

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

,

3

В более поздних версиях IDE можно использовать предварительно скомпилированные библиотеки. Это означает, что конечный пользователь получает только скомпилированную версию вашей библиотеки (файл .a), а не исходный код.

Измените файл library.properties, включив в него dot_a_linkage=true. Если у вас нет файла library.properties, убедитесь, что ваша библиотека создана в формате 1.5.x.

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

Затем создайте новую копию своей библиотеки, которая содержит только заголовочный файл (необходим для компиляции) и файл .a (необходим для компоновки). Нет файлов .cpp.

Теперь вы добавляете в новый файл library.properties precompiled=true.

Если вы правильно разместите файлы, теперь он должен компилироваться с использованием предварительно скомпилированного файла .a.

Подробнее о содержимом library.properties можно прочитать здесь.

,

Хм, я этого не знал., @Nick Gammon

@NickGammon это не то, что хорошо задокументировано и мало используется. Я не использовал его сам, просто предположил, что это весело., @Majenko

В этом ответе, вероятно, следует упомянуть, что это лишь мягкий сдерживающий фактор, поскольку относительно легко дизассемблировать и редактировать файл .a., @Joseph Sible-Reinstate Monica

@JosephSible Да, извлечь файлы .o из файла .a просто. Менее просто разобрать эти файлы .o обратно в исходный код, изменить их и воссоздать заново. Я бы вряд ли назвал это «мягким» сдерживающим фактором. Верно, что угодно можно перепроектировать, если вы достаточно решительны — но мы говорим здесь о библиотеке Arduino — с соответствующим уровнем компетентности, который есть у типичного пользователя Arduino... То есть файл .a — это полная загадка. им..., @Majenko


-1

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

Всегда есть возможность декомпиляции. Существуют программы, называемые декомпиляторами, которые превращают любой «машинный код» в «человекочитаемый код». Полученный код отличается от вашего исходного кода, и вы ничего не можете сделать, чтобы предотвратить декомпиляцию, потому что, в конце концов, Arduino должен иметь этот «машинный код», чтобы знать, какие операции выполнять, и его невозможно зашифровать каким-либо образом. .

Вы всегда можете сделать декомпиляцию более сложной. Существует процедура под названием «обфускация кода». Вы можете вручную (или с помощью специального программного обеспечения для обфускации кода) сделать «читаемый человеком» код недоступным для чтения людьми. Они могут добавлять дополнительные переменные, дополнительные методы изменяют константы на переменные, которые генерируются совершенно не связанными частями кода. Это также изменит машинный код и сделает код после декомпиляции намного труднее для понимания. К сожалению, это также усложнит машинный код и замедлит работу библиотеки.

Забавный факт!

Существует конкуренция в сфере запутывания кода https://www.ioccc.org/

И это допустимый код C, который вы можете скомпилировать и запустить. https://www.ioccc.org/2014/sinon/prog.c https://www.ioccc.org/2014/sinon/prog.c

,