Come posso impedire a un client di vedere il mio codice scritto in una lingua interpretata?


16

Sto costruendo un programma interpretato abbastanza complesso in Python. Ho lavorato sulla maggior parte di questo codice per altri scopi per alcuni mesi, e quindi non voglio che il mio cliente sia in grado di copiarlo e provare a venderlo, poiché penso che valga la pena.

Il problema è che ho bisogno che lo script venga eseguito su un server per il quale il mio client paga, quindi esiste un modo per proteggere una determinata cartella sulla macchina dall'accesso root o farlo in modo che solo un uso particolare possa accedere alla directory ? Il sistema operativo è Ubuntu.


13
Che tipo di contratto / accordo esiste tra te e il tuo cliente? Possiedono il codice o ne hai semplicemente concesso in licenza l'utilizzo? O non hai risolto nulla di tutto questo?
opaco b

2
Ho pensato che fosse possibile compilare il sorgente Python in binario. È possibile per questo progetto? In tal caso, è possibile distribuire invece il binario.
FrustratedWithFormsDesigner,

secondo me il nightcracker ha ragione. Licenze e contratti adeguati dovrebbero impedire tutto ciò, non misure tecniche. Soprattutto perché puoi sempre decompilare / de-offuscare qualcosa e puoi rootfare tutto .
Bobby,

Pensaci diversamente, se rompono un contratto o una licenza puoi denunciarli fino a quando non piangono
Jakob Bowyer,

9
Tutti dicono sempre che il loro codice vale un giusto importo.
Kaleb Brasee,

Risposte:


40

Licenza.

Davvero, tutto qui!


6
Il mio primo pensiero è stato di sottovalutare questa non come una risposta, ma diamine, hai ragione. La licenza e la firma dei contratti è la strada da percorrere qui.
Bobby,

@Bobby: quasi l'unica strada da percorrere. L'alternativa è quella di continuare ad aggiungere nuove funzionalità deliziose e utili così rapidamente che rubare la vecchia versione sarebbe una perdita di tempo.
S.Lott

i beni comuni creativi sarebbero sufficienti come licenza?

10
-1 La domanda chiede come impedire a un client di vedere il codice, ma non è così. Le persone non obbediscono sempre alle licenze e potrebbe non essere possibile scoprirlo legalmente per fare causa.
Orbling

8
Non puoi impedire al client di vedere il codice Python, è troppo facile da smontare. DRM non funziona (se possono eseguirlo, possono smontarlo). Quindi l'unica risposta è legale. E una volta che ti affidi alla legge per l'applicazione, non ha senso rendere la vita più difficile per te o per i tuoi clienti complicando la base tecnica.
ncoghlan,

10

Puoi sempre compilare tutti i tuoi file in codice byte pyc. Ci sono decompilatori là fuori che possono generare codice sorgente da esso ma nulla di grave.

Tuttavia, ciò risolverà semplicemente la capacità di leggere il codice del tuo programma. Proteggere l'unico modo è concederlo in licenza come ha detto nightcracker, perché anche se hai compilato il tuo codice, per dire il codice della macchina, se il tuo lavoro non è protetto da una licenza, può ancora essere commercializzato contro la tua volontà.

In conclusione, compilare in codice byte e, soprattutto, concederlo in licenza


Ho una domanda. Il compilatore di byte utilizza nomi di variabili arbitrari o utilizza i vecchi nomi di variabili? (Immagino che dovrebbe usare quelli vecchi, poiché i moduli esterni si basano su quello spazio dei nomi).

@Garrett: il bytecode contiene i nomi delle variabili. È ancora un disastro relativamente illeggibile quando smontato (prova a digerire lo smontaggio di questa ricetta ) e non ci sono decompilatori (recenti).

7

Usa Cython. Ciò ti consentirà di compilare il tuo programma come eseguibile nativo. Quindi dovrebbe essere molto più difficile da rubare.

Per quanto riguarda la directory, l'unico consiglio che posso darti è assicurarti di avere i permessi impostati correttamente. Gli ACL possono essere tuoi amici, anche se non sono sicuro al 100% che possano impedire a root di accedere a un file. Anche se potessero, root potrebbe comunque cambiare l'autorizzazione. È root, è dio - è così che funzionano queste cose.

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


1

Come ha mostrato l'utente sopra, i disassemblatori possono recuperare il codice, ma finora non è molto leggibile (almeno non per i disassemblatori open source).

Ci stavo pensando, e un modo in cui penso che potresti risolvere questo problema (se chiami un codice di apertura forzata un problema) è scrivere uno script di re-factoring automatico. In realtà sarebbe abbastanza semplice. Dovresti semplicemente alimentare lo script del tuo modulo e rinominare tutte le variabili specifiche del modulo. Questo, insieme al solo rilascio del file compilato, farebbe molto per offuscare il tuo codice.

Facendo una ricerca sul PyPI, ho trovato questo: http://pypi.python.org/pypi/pyfuscate/0.1 . Dovresti controllarlo e fare in modo che altri lo facciano e riferire: D

Inoltre: dovresti anche autorizzarlo, ovviamente.


1

Suggerirei anche la licenza. Oltre alle licenze, crittografiamo il codice sorgente delle routine principali utilizzando l'algoritmo a chiave asimmetrica in modo che solo la macchina del tuo client possa eseguirlo. Una delle chiavi nella coppia è qualcosa ottenuta dall'hardware (esempio: numero di serie della scheda di rete) della macchina del tuo client. Utilizzare l'altra chiave nella coppia per decrittografare il codice sorgente durante l'esecuzione del programma. Si noti che l'unico risultato in chiaro sarebbe la routine di decrittazione e il resto sarebbe in testo cifrato.

In questo modo il tuo client può copiare e incollare il tuo codice apparentemente incomprensibile ma non può eseguirlo altrove. Il mio suggerimento non è del tutto a prova di proiettile: l'interprete può memorizzare il programma decifrato da qualche parte in memoria. Quindi è possibile che qualche hacker recuperi il tuo programma in chiaro durante l'esecuzione, immagino.

Per quanto riguarda la prevenzione dell'accesso alle cartelle, accetto che non sia possibile impedire a root di accedere a file / cartelle.


Questa è solo offuscamento, con gli strumenti giusti, ci sarà sempre un momento nel quale il codice è in testo semplice. Un modo semplice per sconfiggere la soluzione sarebbe semplicemente scambiare ruby/ python/ nodecon un programma personalizzato rispecchia l'API di esecuzione e genera il codice.
Jamo

Inoltre, la chiave privata (per la decrittazione) dovrà essere disponibile per l'ambiente, quindi disponibile per un utente malintenzionato.
Fixee,

0

Le licenze sono la migliore risposta qui. Detto questo, perché deve funzionare con la loro attrezzatura? Se è così importante che potresti voler richiedere un servizio e creare una sorta di API di servizio attorno alle cose in modo che la gente non possa nemmeno vedere la tua proprietà intellettuale per rubarla.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.