Як я можу перешкодити клієнту бачити мій код, написаний інтерпретованою мовою?


16

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

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


13
Який договір / угода існує між вами та вашим клієнтом? Вони володіють кодом, чи ви просто ліцензували їх використання ним? Або ви нічого з цього не працювали?
мат b

2
Я думав, що можна компілювати джерело пітона в двійкове. Чи можливий цей проект? Якщо так, ви можете замість цього розгорнути двійковий файл.
FrustratedWithFormsDesigner

Nightcracker прав на мій погляд. Належне ліцензування та договори повинні перешкоджати цьому, а не технічним заходам. Тим більше, що завжди можна щось декомпілювати / знешкодити і rootдозволено робити все .
Боббі

Подумайте про це інакше, якщо вони порушать контракт чи ліцензію, ви можете подати до суду, поки вони не заплачуть
Якоб Бойер

9
Всі завжди кажуть, що їх код вартує неабиякої суми.
Kaleb Brasee

Відповіді:


40

Ліцензуйте це.

Дійсно, це все!


6
Моя перша думка полягала в тому, щоб визнати це не відповіді, але чорт, ти маєш рацію. Ліцензування та підписання договорів - це шлях до цього.
Боббі

@Bobby: Майже єдиний шлях. Альтернативою є продовжувати додавати чудові, корисні нові функції так швидко, що крадіжка старої версії буде марною тратою часу.
S.Lott

чи вистачить творчої спільноти як ліцензії?

10
-1 Питання запитує шляхи, як зупинити клієнта на баченні коду, це не робиться. Люди не завжди дотримуються ліцензій, і це може бути неможливо на законних підставах дізнатися, щоб подати позов.
Увімкнення

8
Ви не можете зупинити клієнта, побачивши код Python, його занадто просто розібрати. DRM не працює (якщо вони можуть його запустити, вони можуть його розібрати). Тож єдина відповідь - юридична. І як тільки ви покладаєтесь на закон про правозастосування, немає сенсу ускладнювати життя ні собі, ні своїм клієнтам, ускладнюючи технічну базу.
ncoghlan

10

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

Однак це просто вирішить можливість читати код вашої програми. Захистити єдиний спосіб - це ліцензувати його так, як сказав нічний пішохід, бо навіть якщо ви склали свій код, дозволяєте сказати машинний код, якщо ваша робота не захищена ліцензією, її все одно можна комерціалізувати проти вашої волі.

Підсумок, компілюйте в байт-код і ще важливіше ліцензувати його


У мене є питання. Чи використовує компілятор байтів довільні імена змінних чи він використовує старі імена змінних? (Я думаю, що доведеться використовувати старі, оскільки зовнішні модулі покладаються на цей простір імен).

@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 не може бути зупинений у доступі до будь-яких файлів / папок.


Це просто заплутаність, за допомогою правильних інструментів завжди буде момент, коли код знаходиться у простому тексті. Простий спосіб перемогти своє рішення - це просто замінити ruby/ python/ nodeкористувальницькою програмою, яка відображає API виконання та виводить код.
Джамо

Крім того, приватний ключ (для розшифровки) повинен бути доступним для оточення, тому доступний для зловмисника.
Fixee

0

Ліцензування - найкраща відповідь тут. Це сказав, чому це має працювати на їх снасті? Якщо це настільки важливо, ви, можливо, захочете скористатися послугою і створити якийсь API сервісу навколо речей, щоб люди не могли навіть побачити вашу інтелектуальну власність, щоб його вкрасти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.