¿Cómo puedo evitar que un cliente vea mi código escrito en un idioma interpretado?

16

Estoy construyendo un programa interpretado bastante complejo en Python. He estado trabajando en la mayoría de este código para otros fines durante unos meses y, por lo tanto, no quiero que mi cliente pueda simplemente copiarlo e intentar venderlo, ya que creo que vale la pena.

El problema es que necesito que la secuencia de comandos se ejecute en un servidor por el que mi cliente está pagando, por lo tanto, ¿hay alguna forma de asegurar una carpeta particular en la máquina del acceso raíz, o hacer que solo un uso en particular pueda acceder al directorio? ? El sistema operativo es Ubuntu.

Mike Partridge
fuente
13
¿Qué tipo de contrato / acuerdo existe entre usted y su cliente? ¿Son dueños del código o simplemente les ha autorizado el uso? ¿O no has resuelto nada de esto?
mate b
2
Pensé que era posible compilar la fuente de Python en binario. ¿Es posible para este proyecto? Si es así, podría implementar el binario en su lugar.
FrustratedWithFormsDesigner
Nightcracker tiene razón en mi opinión. Las licencias y los contratos adecuados deberían evitar todo esto, no medidas técnicas. Especialmente porque siempre puedes descompilar / desfuscar algo y rootpuedes hacerlo todo .
Bobby
Piense en ello para otro lado, si se rompe un contrato o licencia puede demandar hasta que lloran
Jakob Bowyer
9
Todos siempre dicen que su código vale bastante.
Kaleb Brasee

Respuestas:

40

Licenciarlo.

Realmente, eso es todo!

orlp
fuente
66
Mi primer pensamiento fue rechazar esto como una respuesta, pero diablos, tienes razón. La licencia y la firma de contratos es el camino a seguir aquí.
Bobby
@Bobby: Casi el único camino a seguir. La alternativa es seguir agregando nuevas funciones deliciosas y útiles tan rápidamente que robar la versión anterior sería una pérdida de tiempo.
S.Lott
¿Serían suficientes los bienes comunes creativos como licencia?
10
-1 La pregunta pide formas de evitar que un cliente vea el código, esto no hace eso. Las personas no siempre obedecen las licencias, y puede que no sea posible averiguarlo con seguridad legalmente para demandar.
Orbling
8
No puede evitar que el cliente vea el código Python, es demasiado fácil de desmontar. DRM no funciona (si pueden ejecutarlo, pueden desmontarlo). Entonces, la única respuesta es legal. Y una vez que confía en la ley para hacer cumplir la ley, no tiene sentido hacer la vida más difícil para usted o sus clientes al complicar la base técnica.
ncoghlan
10

Siempre puede compilar todos sus archivos para byte code pyc. Hay descompiladores que pueden generar código fuente, pero nada serio.

Sin embargo, eso solo resolverá la capacidad de leer el código de su programa. Para protegerlo, la única forma es licenciarlo como dijo Nightcracker, porque incluso si compiló su código, digamos código de máquina, si su trabajo no está protegido por una licencia, aún puede comercializarse contra su voluntad.

En pocas palabras, compilar en código de bytes y, lo que es más importante, licenciarlo


fuente
Tengo una pregunta. ¿El compilador de bytes usa nombres de variables arbitrarios, o usa los nombres de variables anteriores? (Me imagino que tendría que usar los viejos, ya que los módulos externos dependen de ese espacio de nombres).
@Garrett: el código de bytes contiene los nombres de las variables. Todavía es un desastre relativamente ilegible cuando se desmonta (intente digerir el desmontaje de esta receta ), y no hay descompiladores (recientes).
7

Utiliza Cython. Esto le permitirá compilar su programa como un ejecutable nativo. Entonces debería ser mucho más difícil de robar.

En cuanto al directorio, el único consejo que puedo darle es asegurarse de que sus permisos estén configurados correctamente. Las ACL pueden ser su amigo, aunque no estoy 100% seguro de que puedan restringir el acceso de root a un archivo. Incluso si pudieran, root podría simplemente cambiar el permiso. Es root, es dios, así es como funcionan estas cosas.

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

Chris Eberle
fuente
1

Como mostró el usuario anterior, los desensambladores pueden recuperar el código, pero aún no es muy legible (al menos no para los desensambladores de código abierto).

Estaba pensando en esto, y una forma en que creo que podría resolver este problema (si llama un problema al código de apertura forzada) es escribir un script de refactorización automática. Esto sería bastante simple en realidad. Simplemente alimentaría el script a su módulo y cambiaría el nombre de todas las variables específicas del módulo. Esto, junto con solo liberar el archivo compilado, haría mucho para ofuscar su código.

Al hacer una búsqueda en el PyPI, encontré esto: http://pypi.python.org/pypi/pyfuscate/0.1 . Debes comprobarlo y a otros les gusta e informar: D

Además: también debe licenciarlo, por supuesto.


fuente
1

Sugeriría licencias también. Además de las licencias, cifremos el código fuente de las rutinas principales utilizando un algoritmo de clave asimétrica para que solo la máquina de su cliente pueda ejecutarlo. Una de las claves del par puede ser algo obtenido del hardware (ejemplo: número de serie de la tarjeta de red) de la máquina de su cliente. Use la otra clave en el par para descifrar el código fuente cuando ejecute el programa. Tenga en cuenta que el único entregable en texto sin formato sería la rutina de descifrado y el resto estaría en texto cifrado.

De esta manera, su cliente puede copiar y pegar su código aparentemente galimatías, pero no puede ejecutarlo en otro lugar. Sin embargo, mi sugerencia no es completamente a prueba de balas: el intérprete puede almacenar el programa descifrado en algún lugar de la memoria. Entonces es posible que algún hacker recupere su programa en texto sin formato durante la ejecución, supongo.

En cuanto a evitar que las carpetas accedan a la raíz, estoy de acuerdo en que no se puede evitar que la raíz acceda a ningún archivo / carpeta.


fuente
Esto es solo ofuscación, con las herramientas adecuadas, siempre habrá un punto en el tiempo donde el código está en texto plano. Una manera simple de derrotar su solución sería simplemente intercambiar ruby/ python/ nodecon un programa personalizado que refleje la API de ejecución y genere el código.
Jamo
Además, la clave privada (para descifrar) deberá estar disponible para el entorno, por lo tanto, disponible para un atacante.
Fixee
0

La licencia es la mejor respuesta aquí. Dicho esto, ¿por qué tiene que funcionar con su equipo? Si es tan importante, es posible que desee buscar un servicio y crear algún tipo de API de servicio en torno a cosas para que la gente ni siquiera pueda ver su propiedad intelectual para robarlo.

Wyatt Barnett
fuente