Jak mogę uniemożliwić klientowi zobaczenie mojego kodu napisanego w tłumaczonym języku?

16

Buduję dość złożony interpretowany program w Pythonie. Pracuję nad większością tego kodu do innych celów od kilku miesięcy i dlatego nie chcę, aby mój klient mógł po prostu skopiować i spróbować go sprzedać, ponieważ uważam, że jest on wart sporej kwoty.

Problem polega na tym, że potrzebuję skryptu, aby działał na serwerze, za który mój klient płaci, więc czy mogę w jakiś sposób zabezpieczyć określony folder na komputerze przed dostępem do katalogu głównego lub sprawić, aby tylko jedno użycie mogło uzyskać dostęp do katalogu ? System operacyjny to Ubuntu.

Mike Partridge
źródło
13
Jaki rodzaj umowy / umowy istnieje między tobą a twoim klientem? Czy są właścicielami kodu, czy tylko licencjonowaliście go, aby go użyć? A może nie pracowałeś nad tym?
matt b
2
Myślałem, że można skompilować źródło Pythona na binarne. Czy jest możliwe dla tego projektu? Jeśli tak, możesz zamiast tego wdrożyć plik binarny.
FrustratedWithFormsDesigner
nightcracker ma rację moim zdaniem. Właściwe licencjonowanie i umowy powinny temu zapobiec, a nie środki techniczne. Zwłaszcza, że ​​zawsze możesz coś zdekompilować / zaciemnić i rootmożesz robić wszystko .
Bobby
Pomyśl o tym inaczej, jeśli złamią umowę lub licencję, możesz pozwać ich do płaczu
Jakob Bowyer
9
Wszyscy zawsze mówią, że ich kod jest wart uczciwej kwoty.
Kaleb Brasee,

Odpowiedzi:

40

Licencjonuj to.

Naprawdę to wszystko!

orlp
źródło
6
Moją pierwszą myślą było uznać to za nie odpowiedź, ale do diabła, masz rację. Tutaj można znaleźć licencjonowanie i podpisywanie umów.
Bobby,
@Bobby: Prawie jedyna droga. Alternatywą jest dodawanie zachwycających, przydatnych nowych funkcji tak szybko, że kradzież starej wersji byłaby stratą czasu.
S.Lott,
czy kreatywne dobra wspólne wystarczą jako licencja?
10
-1 Pytanie dotyczy sposobów na powstrzymanie klienta od zobaczenia kodu, ale tak się nie dzieje. Ludzie nie zawsze przestrzegają licencji i może nie być możliwe uzyskanie pewności prawnej w celu pozwania.
Orbling
8
Nie można zatrzymać klienta, aby zobaczył kod Python, zbyt łatwo go zdemontować. DRM nie działa (jeśli mogą go uruchomić, mogą go zdemontować). Więc jedyna odpowiedź jest prawna. A kiedy będziesz polegać na prawie w zakresie egzekwowania prawa, nie ma sensu utrudniać życia sobie ani swoim klientom, komplikując bazę techniczną.
ncoghlan,
10

Zawsze możesz skompilować wszystkie swoje pliki do bajtu kodu pyc. Istnieją dekompilatory, które mogą generować z niego kod źródłowy, ale nic poważnego.

Jednak to tylko rozwiąże możliwość odczytania kodu twojego programu. Jedynym sposobem ochrony jest licencjonowanie go, jak powiedział nightcracker, ponieważ nawet jeśli skompilowałeś swój kod, powiedzmy kod maszynowy, jeśli twoja praca nie jest chroniona przez licencję, nadal może być komercjalizowana wbrew twojej woli.

Podsumowując, skompiluj kod bajtowy i, co ważniejsze, licencjonuj go


źródło
Mam pytanie. Czy kompilator bajtów używa dowolnych nazw zmiennych, czy też używa starych nazw zmiennych? (Wyobrażam sobie, że musiałby używać starych, ponieważ moduły zewnętrzne polegają na tej przestrzeni nazw).
@Garrett: Kod bajtowy zawiera nazwy zmiennych. To wciąż stosunkowo nieczytelny bałagan podczas demontażu (spróbuj trawienie demontaż z tego przepisu ), i nie ma żadnych (ostatnie) decompilers.
7

Użyj Cython. Umożliwi to skompilowanie programu jako natywnego pliku wykonywalnego. Wtedy kradzież powinna być o wiele trudniejsza.

Jeśli chodzi o katalog, jedyną radą, jaką mogę ci dać, jest upewnienie się, że masz poprawnie skonfigurowane uprawnienia. Listy ACL mogą być twoim przyjacielem, chociaż nie jestem w 100% pewien, że mogą ograniczyć dostęp roota do pliku. Nawet jeśli mogliby, root może nadal zmienić uprawnienia. Jest rootem, jest bogiem - tak właśnie działają te rzeczy.

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

Chris Eberle
źródło
1

Jak pokazał powyższy użytkownik, dezasemblery mogą odzyskać kod, ale na razie nie jest on bardzo czytelny (przynajmniej nie dla dezasemblerów open source).

Myślałem o tym i jednym ze sposobów, w jaki myślę, że możesz rozwiązać ten problem (jeśli nazywasz problem wymuszonym otwartym kodem), jest napisanie automatycznego skryptu faktoringowego. W rzeczywistości byłoby to dość proste. Po prostu nakarmiłbyś skrypt swoim modułem i zmieniłby on nazwy wszystkich zmiennych specyficznych dla modułu. To, wraz z wydaniem tylko skompilowanego pliku, wiele by zrobiło, aby zaciemnić twój kod.

Przeprowadzając wyszukiwanie w PyPI, znalazłem to: http://pypi.python.org/pypi/pyfuscate/0.1 . Powinieneś to sprawdzić, a innym się to podoba i zgłosić: D

Ponadto: Oczywiście powinieneś także uzyskać licencję.


źródło
1

Sugerowałbym też licencjonowanie. Oprócz licencjonowania, zaszyfrujmy kod źródłowy głównych procedur za pomocą algorytmu klucza asymetrycznego, aby mógł go uruchomić tylko komputer klienta. Jednym z kluczy w parze może być coś uzyskanego ze sprzętu (na przykład: numer seryjny karty sieciowej) komputera klienta. Użyj drugiego klucza z pary, aby odszyfrować kod źródłowy podczas uruchamiania programu. Zauważ, że jedynym możliwym do dostarczenia tekstem jawnym byłaby procedura deszyfrowania, a reszta tekstem szyfrowanym.

W ten sposób klient może skopiować i wkleić pozornie bełkotliwy kod, ale nie może go uruchomić w innym miejscu. Moja sugestia nie jest jednak całkowicie kuloodporna: interpreter może przechowywać odszyfrowany program gdzieś w pamięci. Może się zdarzyć, że jakiś haker odzyska twój program w postaci zwykłego tekstu podczas wykonywania.

Jeśli chodzi o uniemożliwienie dostępu do folderów root, zgadzam się, że root nie może zostać powstrzymany przed dostępem do plików / folderów.


źródło
To tylko zaciemnienie, przy odpowiednich narzędziach zawsze będzie moment, w którym kod będzie zwykłym tekstem. Prostym sposobem na pokonanie rozwiązania byłoby po prostu zamiana ruby/ python/ nodez niestandardowym programem, który odzwierciedla API wykonania i generuje kod.
Jamo,
Ponadto klucz prywatny (do odszyfrowywania) będzie musiał być dostępny dla środowiska, a zatem atakujący.
Fixee
0

Licencjonowanie jest najlepszą odpowiedzią tutaj. To powiedziawszy, dlaczego musi działać na ich sprzęcie? Jeśli jest to niezwykle ważne, możesz chcieć znaleźć usługę i zbudować jakiś interfejs API usługi wokół rzeczy, aby ludzie nie widzieli nawet twojej własności intelektualnej, aby ją ukraść.

Wyatt Barnett
źródło