Ir para conteúdo
  • Cadastre-se

Tecnicas de Encoding e Licença


Posts Recomendados

Vou explanar como funciona o licenciamento por aqui:

Todo o código fonte é criptografado via IonCube como já mencionado.

O simples fato do fonte ser criptografado não quer dizer que ele seja original ou não, isso só protege a cópia do código fonte em si. O Layout é em código aberto, usamos o Smarty para isso.

Quanto ao licenciamento do produto o primeiro passo é definir: Como será verificada uma licença?

Em nosso caso, temos duas maneiras de verificar se a chave é valida ou não:

1. Passando um parâmetro via POST em qualquer página da aplicação;

2. Disparando um pedido de atualização ao site do desenvolvedor;

Em ambas maneiras, a chave é algo parecido com(essa é uma chave válida para alguma aplicação que vendesse para teste.com):

[COLOR=#ff0000][B]3d[/B][/COLOR][COLOR=#000000]272f6f19ecd8f6545307[B]b88a5a601d28fa2b771c3[/B][/COLOR][COLOR=#ff0000][B]6x[/B][/COLOR][COLOR=#000000]a5f30f8e5c634fe0a6acd28a3b34c079fa3[/COLOR][COLOR=#ff0000][B]a[/B][/COLOR][COLOR=#000000][B]ecddfd18e115a2[/B]e649e5fbcf44dbe14d52f7[B]c6841ad8[/B][/COLOR][COLOR=#0000ff][B]8[/B][/COLOR][COLOR=#000000]98[/COLOR][COLOR=#000000]9c50c918607cffa7a7fcb2d05e[/COLOR][COLOR=#ff0000][B]7[/B][/COLOR][COLOR=#000000][B]25071d68ad[/B]1a6c9621a1b[B]5ddc0e3[/B][/COLOR][COLOR=#0000ff][B]0[/B][/COLOR][COLOR=#000000]696ea03704496296da9b8ec827[B]bcda6109a625935a804ff7d1fe1fa8eb24656387421a9c[/B][/COLOR][COLOR=#000000]

[/COLOR]

Agora que temos uma chave de licença e sabemos como vamos verificar, o problema passa a ser: como saber se a chave é válida?

Soluções:

1. Gerar uma chave aleatória, salvar no BD, passar ao cliente.. e por fim... simplesmente comparar...

2. Criptografar alguns dados, jogar num hash aleatório substituindo certas posições e ao verificar, gerar um outro par que deverá ser idêntico. Lembrando que as posições que a informação irá ocupar deverão ser guardadas ou de alguma forma codificadas para que você consiga gerar outro idêntico para o mesmo cliente.

Em nossa empresa, essa chave que gerei acima segue a 2a solução que apresentei. Abaixo vou explicar como validamos ela, claro que vou mudar algumas informações passadas, mas não foge muito disso.

Os dois primeiros dígitos do hash indicam onde encontrarei(distância em caracteres) parte em negrito e qual tipo de informação está ali, e segue assim:

i- A primeira parte em negrito são os primeiros caracteres de um hash md5 do codinome do produto adquirido e sua versão (basic, enterprise, premium);

ii- Os segundo conjunto em vermelho indica que a próxima informação em negrito está precedida de um indicador de distancia de um caracter, e a também me diz que essa informação em negrito é a chave de criptografia RSA de informações importantes que são cadastradas no BD, como CPF, RG, etc... Essa chave RSA é gerada no pedido e uma cópia fica conosco devido a ser necessária em caso de atualizações ou reparo do BD.

iii- O terceiro conjunto em negrito é parte do e-mail do cliente + ip compra codificado em md5(sha1($emailCliente.$ipCompra)).

iv- O caracter em azul identifica que o quarto conjunto em negrito além de estar precedido de um outro indicador de distância, contém parte do hash sha1(bae64_encode($ipCompra.$numPedido.$formaPagamento)).

v- O 5o e o 6o conjunto em negritos contém respectivamente: parte do hash base64_encode(sha1($versao)) da versão do produto entregue ao cliente (1.1, 2.1, etc...) adquirida pelo cliente e parte do hash do ($emailCliente.$dominio.$telefone.$notaFiscal.$gerenteContas.$dataPedido.$horarioPedido.$formaPagamento).

vi- Bom, o último caracter em azul ele simplesmente indica o conjunto dos tamanhos de cada fragmento desses hashs utilizados.

Uma vez que você tem a licença, sabe verificar, sabe validar, o próximo passo é: Quais ações realizar em caso de pirataria? Aí aqui deixo para você pensar.

Minha solução para esse problema foi: para não bloquear e atrapalhar a vida definitivamente do usuário pirata, em toda a área administrativa aparece uma div no início da página com 750pixels de largura avisando-o de licença pirata e as formas de contato. Nesse caso a cada pagina visitada.. ele tem que rolar a pagina... o que se torna bem estressante depois de alguns dias.

Também a aplicação automaticamente bloqueia alguns recursos não tão essenciais, tais como: mudança de senha de administradores, criação de novos administradores, envio de emails, limita o acesso a 100 paginas por dia/administrador. Enfim, tente ser o menos chato possível, porém tem que fazer de alguma forma que o cliente do piratão seja obrigado a te contatar. Eu fiz um programa de desconto(50% para quem vir de licença pirata). Até hoje nada foi pirateado e nem há cópias na internet, but... não duvido que possa aparecer algo.

Espero ter ajudado você.

Abraços

Link para o comentário
Compartilhar em outros sites

Realmente o topico gerou muita informação relevante e interessante, dentre elas pensei em algumas coisas que vou relatar abaixo.

1º Não pretendo utilizar o ioncube, visto que já existe muita coisa na web capaz de quebrar os codigos por ele criptografados, sendo assim seria uma furada, estou pensando em trabalhar com o SourceGuardian, não achei muita coisa sobre ele na internet e isto é bom, mais fica uma duvida, se o servidor onde vai rodar a aplicação precisa do Ioncube, é possivel o sourceguardian rodar junto ?

2º Estou pensando em um tipo de validação mais ou menos como o João Paulo falou, (ps. Achei muito inteligente), onde vou ter determinadas marcações dentro de um lixo e assim o meu codigo vai ler em pedaços e compreender o que deseja fazer.

3º Pensei em ampliar e alem de validar a licença eu me conectaria a um webservice meu e iria retornar dados que são utilizados como o IP do servidor que esta instalado e tudo mais, mesmo que a licença seja valida ele esta instalado onde não deveria, isto vai impedir aquele compartilhamento de licenças entre usuarios.

Acho que deve ser algo assim, agora vou sanar mais algumas duvidas e em breve anuncio aqui o produto.

Obrigado pela participação de todos.

Link para o comentário
Compartilhar em outros sites

O BoxBilling tem um sistema de venda de licenças que é bem fácil de implementar no seu projeto. Agora sobre encriptar (ofuscar) seus arquivos é bem complicado, até o IonCube Loader (mais utilizado) é fácil de fazer o caminho reverso e ver o código php original.

Para projetos onde haverá necessidade de licenciamento eu prefiro linguagens como Python, que é pré-compilada.

Link para o comentário
Compartilhar em outros sites

Se utilizar um ionCube + obfuscate é muuuuito mais difícil de descobrir o código..

Esses dias fiz uma "engenharia reversa" em um painel de controle que tem aí, e o desenvolvedor utilizou ionCube e obfuscate, e o código sem estar encriptado tinha y com acento, umas coisas bem loucas, e não achei nada na internet que conseguia descompilar o código sem torná-lo inutilizável..

Link para o comentário
Compartilhar em outros sites

Eu estou usando o bcompiler, uma extensão PECL do PHP e está na documentação oficial (http://www.php.net/manual/en/book.bcompiler.php). O único problema que tive até agora é que se você compilar usando uma versão do PHP não roda em outra (problema aceitável e comum).

Eu não encontrei nenhum de-bcompiler ainda...

Link para o comentário
Compartilhar em outros sites

O BoxBilling tem um sistema de venda de licenças que é bem fácil de implementar no seu projeto. Agora sobre encriptar (ofuscar) seus arquivos é bem complicado, até o IonCube Loader (mais utilizado) é fácil de fazer o caminho reverso e ver o código php original.

Para projetos onde haverá necessidade de licenciamento eu prefiro linguagens como Python, que é pré-compilada.

É, o problema é que já esta pronto em PHP. Olhei o boxbilling so que não achei muita coisa.

Se utilizar um ionCube + obfuscate é muuuuito mais difícil de descobrir o código..

Esses dias fiz uma "engenharia reversa" em um painel de controle que tem aí, e o desenvolvedor utilizou ionCube e obfuscate, e o código sem estar encriptado tinha y com acento, umas coisas bem loucas, e não achei nada na internet que conseguia descompilar o código sem torná-lo inutilizável..

Este obsfucador é http://obfusc.com/

Eu estou usando o bcompiler, uma extensão PECL do PHP e está na documentação oficial (http://www.php.net/manual/en/book.bcompiler.php). O único problema que tive até agora é que se você compilar usando uma versão do PHP não roda em outra (problema aceitável e comum).

Eu não encontrei nenhum de-bcompiler ainda...

Rodar em uma versão unica não chega a ser um grande problema, vou estudar.

Link para o comentário
Compartilhar em outros sites

É, o problema é que já esta pronto em PHP. Olhei o boxbilling so que não achei muita coisa.

Este obsfucador é http://obfusc.com/

Veja em http://www.boxbilling.com/docs/search.html?q=license você vai encontrar como usar a API para comunicar com o seu servidor que irá validar a licença. Na sua área de administração do BoxBilling você vai criando as licenças de acordo com os pedidos dos clientes que ele ira automatizar até o ciclo de pagamento.

Ofuscar não ajuda em nada, até hoje só vi ofuscadores que trocam os nomes das variáveis por "lixo". Com um pouco te tempo e café qualquer um remonta o seu programa.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Concorda com os nossos termos?