Como impedir que um cliente veja meu código escrito em um idioma interpretado?


16

Estou criando um programa interpretado bastante complexo em Python. Estou trabalhando na maior parte desse código para outros fins há alguns meses e, portanto, não quero que meu cliente simplesmente copie e tente vendê-lo, pois acho que vale uma quantia justa.

O problema é que preciso que o script seja executado em um servidor pelo qual meu cliente está pagando. Existe alguma maneira de proteger uma pasta específica na máquina contra o acesso root ou torná-la para que apenas um uso específico possa acessar o diretório ? O sistema operacional é o Ubuntu.


13
Que tipo de contrato / acordo existe entre você e seu cliente? Eles possuem o código ou você apenas licenciou o uso para eles? Ou você não resolveu nada disso?
mate b

2
Eu pensei que era possível compilar fonte python em binário. É possível para este projeto? Nesse caso, você pode implantar o binário.
FrustratedWithFormsDesigner

Nightcracker está certo na minha opinião. Licenciamento e contratos adequados devem evitar tudo isso, não medidas técnicas. Especialmente porque você sempre pode descompilar / ocultar algo e roottem permissão para fazer tudo .
Bobby

Pense nisso a outra maneira, se quebrar um contrato ou licença pode processá-los até que eles choram
Jakob Bowyer

9
Todo mundo sempre diz que seu código vale uma quantia justa.
Kaleb Brasee 09/04

Respostas:


40

Licencie-o.

Sério, isso é tudo!


6
Meu primeiro pensamento foi rebaixar isso como não uma resposta, mas, diabos, você está certo. Licenciar e assinar contratos é o caminho a seguir.
Bobby

@ Bobby: Quase o único caminho a percorrer. A alternativa é continuar adicionando novos recursos úteis e agradáveis ​​tão rapidamente que roubar a versão antiga seria uma perda de tempo.
S.Lott

Creative Commons seria suficiente como uma licença?

10
-1 A pergunta pede maneiras de impedir que um cliente veja o código, isso não faz isso. As pessoas nem sempre obedecem às licenças e talvez não seja possível descobrir com certeza legalmente para processar.
Orbling

8
Você não pode impedir que o cliente veja o código Python, é muito fácil desmontar. O DRM não funciona (se eles podem executá-lo, podem desmontá-lo). Portanto, a única resposta é legal. E quando você confia na lei para aplicação da lei, não faz sentido dificultar a vida de você ou de seus clientes, complicando a base técnica.
ncoghlan

10

Você sempre pode compilar todos os seus arquivos para o byte code pyc. Existem decompiladores por aí que podem gerar código-fonte a partir dele, mas nada sério.

No entanto, isso apenas resolverá a capacidade de ler o código do seu programa. Proteger a única maneira é licenciá-lo como o Nightcracker disse, porque, mesmo que você tenha compilado seu código, digamos código de máquina, se seu trabalho não estiver protegido por uma licença, ele ainda poderá ser comercializado contra sua vontade.

Resumindo, compile para código de bytes e, mais importante, Licencie-o


Eu tenho uma pergunta. O compilador de bytes usa nomes de variáveis ​​arbitrários ou usa os nomes de variáveis ​​antigos? (Eu imagino que teria que usar os antigos, pois os módulos externos dependem desse espaço para nome).

@ Garrett: O bytecode contém os nomes das variáveis. É ainda uma confusão relativamente ilegível quando desmontado (tentar digerir a desmontagem de esta receita ), e não há nenhum (recentes) decompilers.

7

Use Cython. Isso permitirá que você compile seu programa como um executável nativo. Então deve ser muito mais difícil roubar.

Quanto ao diretório, o único conselho que posso dar é se você tem suas permissões configuradas corretamente. As ACLs podem ser suas amigas, embora eu não tenha 100% de certeza de que elas podem impedir que o root acesse um arquivo. Mesmo que pudessem, o root ainda poderia alterar a permissão. Ele é raiz, ele é deus - é assim que essas coisas funcionam.

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


1

Como o usuário acima mostrou, os desmontadores podem recuperar o código, mas ainda não é muito legível (pelo menos não para os desmontadores de código aberto).

Eu estava pensando sobre isso, e uma maneira de pensar que você poderia resolver esse problema (se você chamar um problema de código aberto forçado) é escrever um script de recriação automática. Isso seria bastante simples, na verdade. Você apenas alimentaria o script em seu módulo e ele renomearia todas as variáveis ​​específicas do módulo. Isso, além de liberar apenas o arquivo compilado, faria muito para ofuscar seu código.

Fazendo uma pesquisa no PyPI, encontrei o seguinte: http://pypi.python.org/pypi/pyfuscate/0.1 . Você deve verificá-lo e outros gostarem e informar de volta: D

Além disso: você também deve licenciá-lo, é claro.


1

Eu também sugeriria o licenciamento. Além do licenciamento, vamos criptografar o código-fonte das rotinas principais usando o algoritmo de chave assimétrica, para que somente a máquina do seu cliente possa executá-lo. Uma das chaves do par é algo obtido no hardware (exemplo: número de série da placa de rede) da máquina do seu cliente. Use a outra chave do par para descriptografar o código fonte ao executar o programa. Observe que a única entrega em texto simples seria a rotina de descriptografia e o restante seria em texto cifrado.

Dessa forma, seu cliente pode copiar e colar seu código aparentemente sem sentido, mas não pode executá-lo em outro lugar. Minha sugestão não é completamente à prova de balas: o intérprete pode armazenar o programa descriptografado em algum lugar da memória. Então é possível que algum hacker recupere seu programa em texto sem formatação durante a execução, eu acho.

Quanto à prevenção de pastas de acesso root, concordo que a raiz não pode ser impedida de acessar nenhum arquivo / pasta.


Isso é apenas ofuscação; com as ferramentas certas, sempre haverá um momento em que o código está em texto simples. Uma maneira simples de derrotar sua solução seria simplesmente trocar ruby/ python/ nodecom um programa personalizado espelha a API de execução e gera o código.
Jamo

Além disso, a chave privada (para descriptografia) deverá estar disponível para o ambiente, portanto, disponível para um invasor.
Fixee 10/10

0

O licenciamento é a melhor resposta aqui. Dito isto, por que ele tem que funcionar com seus equipamentos? Se é tão importante, você pode querer um serviço e criar algum tipo de API de serviço em torno das coisas, para que as pessoas nem consigam ver sua propriedade intelectual para roubá-la.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.