Как я могу запретить клиенту видеть мой код, написанный на интерпретируемом языке?

16

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

Проблема в том, что мне нужен скрипт для запуска на сервере, за который платит мой клиент, поэтому есть ли какой-нибудь способ, которым я могу защитить определенную папку на компьютере от корневого доступа или сделать так, чтобы только один конкретный пользователь мог получить доступ к каталогу ? ОС Ubuntu.

Майк Партридж
источник
13
Какой тип договора / соглашения существует между вами и вашим клиентом? Им принадлежит код или вы просто лицензировали его использование для них? Или вы не работали над этим?
Мэтт б
2
Я думал, что можно скомпилировать исходный код Python в двоичный файл. Возможен ли этот проект? Если это так, вы можете развернуть бинарный файл.
FrustratedWithFormsDesigner
Nightcracker, по моему мнению, прав. Надлежащее лицензирование и контракты должны предотвращать все это, а не технические меры. Тем более, что вы всегда можете что-то декомпилировать / де-запутать и rootможете делать все .
Бобби
Подумайте об этом по-другому, если они нарушают контракт или лицензию, вы можете подать в суд на них, пока они не плачут
Jakob Bowyer
9
Все всегда говорят, что их код стоит много.
Калеб Браси

Ответы:

40

Лицензия это.

На самом деле, это все!

orlp
источник
6
Моей первой мыслью было опровергнуть это как не ответ, а, черт возьми, вы правы. Лицензирование и подписание контрактов - путь сюда.
Бобби
@Bobby: Почти единственный путь. Альтернатива заключается в том, чтобы добавлять восхитительные, полезные новые функции так быстро, что кража старой версии будет пустой тратой времени.
S.Lott
будет ли креативное достояние достаточным в качестве лицензии?
10
-1 Вопрос требует способов, чтобы клиент не видел код, это не делает этого. Люди не всегда подчиняются лицензиям, и, возможно, не представляется возможным выяснить законно, чтобы подать в суд.
Orbling
8
Вы не можете остановить клиент, увидев код Python, его слишком легко разобрать. DRM не работает (если они могут запустить его, они могут разобрать его). Так что единственный ответ - законный. И если вы полагаетесь на закон в отношении правоприменения, то нет смысла усложнять жизнь себе или своим клиентам, усложняя техническую базу.
ncoghlan
10

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

Однако это просто решит возможность прочитать код вашей программы. Единственный способ защитить - это лицензировать его, как сказал nightcracker, потому что даже если вы скомпилировали свой код, скажем, машинный код, если ваша работа не защищена лицензией, она все равно может быть коммерциализирована против вашей воли.

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


источник
У меня есть вопрос. Использует ли байтовый компилятор произвольные имена переменных или старые имена переменных? (Я полагаю, что придется использовать старые, так как внешние модули полагаются на это пространство имен).
@Garrett: байт-код содержит имена переменных. Это все еще относительно нечитаемый беспорядок в разобранном (попробуйте переваривания разборки из этого рецепта ), и нет никакой (недавняя) декомпиляции.
7

Используйте Cython. Это позволит вам скомпилировать вашу программу как собственный исполняемый файл. Тогда должно быть намного сложнее украсть.

Что касается каталога, единственный совет, который я могу вам дать, - убедиться, что у вас правильно настроены разрешения. ACL могут быть вашими друзьями, хотя я не уверен на 100%, что они могут ограничить доступ root к файлу. Даже если бы они могли, root мог бы просто изменить разрешение. Он корень, он бог - вот как все это работает.

http://www.korokithakis.net/node/109

Крис Эберле
источник
1

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

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

Выполнив поиск по PyPI, я нашел это: http://pypi.python.org/pypi/pyfuscate/0.1 . Вы должны проверить это и другие, как это и доложить: D

Кроме того: Вы также должны Лицензировать это, конечно.


источник
1

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

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

Что касается предотвращения доступа к папкам с правами root, я согласен, что root не может быть остановлен от доступа к каким-либо файлам / папкам.


источник
Это просто запутывание, с правильными инструментами всегда будет момент, когда код находится в виде простого текста. Простой способ победить решение было бы просто поменять ruby/ python/ nodeс пользовательской программой зеркалами на API выполнения и выводит код.
Джамо
Кроме того, закрытый ключ (для дешифрования) должен быть доступен для среды, следовательно, доступен для злоумышленника.
Fixee
0

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

Уайетт Барнетт
источник