• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

WoOo

Proteger aplicação: licenças e código fonte

30 mensagens neste tópico

Viva,

Tenho andado a investigar um pouco pela web formas de proteger uma aplicação, tanto o código fonte como possíveis tentativas de tentar correr a aplicação num servidor ou domínio para o qual não está autorizada.

Dessa forma gostava de lançar a discussão para se trocar algumas ideias sobre a melhor forma de o fazer.

Começando pelo código, todos sabemos que o PHP não é uma linguagem compilada, porém existem formas de o encriptar/ofuscar  de forma a que mesmo chegando ao código não o consigam alterar ou aproveitar.

Porém ferramentas para tal (casos de phpEncoder ou Zend Guard) são extremamente caras e pessoalmente sou um pouco ceptico em relação a isto, até que ponto a encriptação por vezes não fará com que ocorram erros que inicialmente não existiam? É claro que digo isto apesar de nunca ter usado nenhuma, apenas é a primeira ideia que me ocorre quando se fala em ferramentas do género.

Agora o caso das licenças, imaginemos então que vendem ou oferecem uma aplicação que não corre num servidor vosso, corre por exemplo numa intranet ou mesmo que esteja online é num servidor onde não sabem quem terá acesso.

Que meios temos para garantir que a nossa aplicação só vai correr naquele e apenas naquele servidor ou domínio para o qual está autorizado?

Se a aplicação estiver online, sempre se pode ter a mesma a pingar um servidor nosso validando uma tal "licença" ou algo do genero.

Correndo por exemplo numa intranet tal será mais dificil e aí torna-se a nossa tarefa mais complicada.

Encontrei uma class interessante, embora ainda não a tenha testado como deve de ser, mas dá boas indicações. http://solomongaby.users.phpclasses.org/browse/package/2298.html

Alguem já se deparou com uma situação deste género?

Que soluções sugerem?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho uma situação idêntica num dos meus projectos (embora não seja em PHP) que passa pela recusa de execução do software em caso de falta de licença.

Uma técnica comum é gerares a licença contra uma chave que é gerada a partir de informação do hardware da máquina em que corre. Se instalarem a aplicação noutra máquina é necessário gerar uma nova licença.

Dado que queres esconder isso, podes sempre ter uma biblioteca nativa para cada sistema que suportes de forma a verificar, a partir do PHP, se a licença é válida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por acaso ja tinha pensado em algo do género quando uma aplicação estiver a correr numa maquina em que não tenha ligação à net para se validar de forma online, criar uma key tendo por base informação do hardware.

É preciso é ver até onde o PHP consegue sacar informação da máquina.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

O modelo de negócio que estás a tentar seguir está tão desactualizado, a meu ver, assim como está um 386 para o windows vista. OK Exagerei, i486DX2.

Se desejas mesmo algo tão selfish, porque não tiras partido da arquitectura  e deixas apenas um servidor no mundo com a tua aplicação e todos os clientes passam a usufruir dela, só e apenas a partir desse servidor.

Podes até, hoje em dia, utilizar Ajax para a pores a funcionar em background noutro "Site" dando a impressão de que cada cliente tem a sua aplicação.

:wallbash: :bye2:

Abraço

Silvino

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho uma situação idêntica num dos meus projectos (embora não seja em PHP) que passa pela recusa de execução do software em caso de falta de licença.

Uma técnica comum é gerares a licença contra uma chave que é gerada a partir de informação do hardware da máquina em que corre. Se instalarem a aplicação noutra máquina é necessário gerar uma nova licença.

Dado que queres esconder isso, podes sempre ter uma biblioteca nativa para cada sistema que suportes de forma a verificar, a partir do PHP, se a licença é válida.

Exacto. é o que faço com muitas das aplicações que uso. Isto é chamado Hardware Fingerprint :thumbsup: procura algo assim em php que certamente deves encontrar digo eu...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha opinião é que isso não deve ser feito em PHP mas sim através de uma biblioteca compilada nativamente para o sistema, dado que assim é mais complexo "dar a volta ao sistema".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha opinião é que isso não deve ser feito em PHP mas sim através de uma biblioteca compilada nativamente para o sistema, dado que assim é mais complexo "dar a volta ao sistema".

Estou de acordo com o M6, se fizeres directamente ao PHP a "vida de dar a volta fica claramente mais facilitada". eu pessoalmente utilizaria um script GCI feito em C a correr do lado do server e que lê-se determinada informação não replicavel do hardware. Quando digo não-replicavel é mesmo isso. Porque se limitas por exemplo a MAC-Address isso é replicavel, por exemplo.

Uma outra possibilidade mas envolve um pouco mais de complexidade é o uso de chaves assimétricas baseadas no Hardware Fingerprint, ou seja pegares numa serie de valores do hardware, e a conjugação deles com uma chave tua gera-se uma Key, que só funcionaria naquele sistema, e onde nunca o cliente tivesse acesso à tua parte da chave. Sendo que a chave que permita o licenciamento e execução do software seria baseada num valor obtido pelo teu GCI (valor do hardware a licenciar), e a tua chave pessoal, que pode ir tão longe como uma chave biométrica.

Mas resalvo que não existem sistemas perfeitos, não existe segurança perfeita, e quando mais "rebuscado" for o teu sistema de licenciamento mais seguro será. Atenção que "nunca ninguém vê o obvio", ao contrario da electricidade os Humanos procuram sempreo caminho mais dificil, e não o mais curto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

apocsantos, esse sistema de chave e contra-chave foi o que eu disse originalmente, são sei é se transmiti isso de forma correcta.

É precisamente esse esquema que uso num dos meus projectos.

Para maior "confidencialidade", podes cifrar isso tudo com algo simples como um AES

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu estou a usar Triple-DES :thumbsup:

No primeiro caso o que pensei foi que tivesses a validação apenas a um identificador unico do hardware sem recurso a um algoritmo AES. 

Seria um bom topico debater que outros sistemas ou a que componentes de hardware utilizamos para obter o identificador. Claro que meramente para partilha e desenvolvimento de melhores sistemas de segurança no licenciamento.

Não sei se usas no teu caso a validação em "multiplas fazes", eu normalmente coloco não só no ficheiro principal, mas também em outros ficheiros do programa com nomes de funcção diferentes para a validação, a fim de dificultar a vida a quem queira copiar, uma vez que segundo li à uns anos atraz uma das maneiras mais comuns de "contornar" as licenças é inserir "jmp" no codigo de modo a ultrapassar o conjunto de instruções que validam a licença.

Criando assim um executavel separado (diferente do orignal) contendo o codigo que permita "fazer este contorno".

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, fazer um .exe com jumps é talvez a técnica mais conhecida/naive de todas.

Mas no meu caso não lido com utilizadores técnicos (do ponto de vista da informática) pelo que não tenho de ter algo tipo "Fort Knox", basta algo simples para dissuadir a cópia ilegal. Estou num nicho de mercado em que não há interessados com conhecimentos técnicos suficientes para fazer algo desse tipo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

silvinosilva, não sou eu que quero ter aplicações a correr localmente, o problema aqui é aqueles casos em que o cliente não quer ter nada online, fica com medo se por qualquer motivo a ligação à net falhar e consequentemente não pode trabalhar, etc., logo insiste para ter a aplicação a correr no seu próprio servidor.

Pelo menos cá em Portugal ainda ha muita gente céptica em ter algo a correr online, pensa logo que os concorrentes vão estar a vasculhar a sua base de dados descobrindo os seus segredos do negócio.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesse caso, se vais ter a aplicação num servidor de intranet, o nivel de boqueios contra cópia que podes ter são quase infindaveis. Ainda assim o descrito pelo M6 e por mim penso serem eficazes. Podes simplesmente utilizar um GCI e chama-lo apartir do codigo PHP. Se quizeres ir a niveis extremos de segurança tipo "fort-knox" também se pode fazer algumas sugestões :thumbsup:

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, fazer um .exe com jumps é talvez a técnica mais conhecida/naive de todas.

Mas no meu caso não lido com utilizadores técnicos (do ponto de vista da informática) pelo que não tenho de ter algo tipo "Fort Knox", basta algo simples para dissuadir a cópia ilegal. Estou num nicho de mercado em que não há interessados com conhecimentos técnicos suficientes para fazer algo desse tipo.

Pois.... os Jumps é a tecnica mais antiga, ainda assim tanto quanto soube em conversa com um colega que trabalha na produção de anti-virus ainda é muito utilizada :thumbsup: Hoje em dia com a informação tão "abandalhada" a informação técnica quase que anda "a la google" :) Infelizmente.

Eu estou constantemente a tentar perceber melhores formas de proteger o software, nem que seja com o simples esboçar de algoritmos que em teoria funcionam, e depois se tiver tempo e cabeça passo-os à pratica. Se não tiver, vão para a "stack" (nome que dou à pilha de apontamentos que tenho).

Ainda deves ser do tempo de algums e-zines porreiros onde vinha informação sobre tecnologia e pequenos how-to's que um gajo lia havidamente com vontade de experimentar logo a seguir... :)

Sinceramente acho que ao que tenho visto não existe sistema perfeito nem "muito seguro", existem sistemas muito bons, mas é uma "gerra de gato e rato". Eu conformei-me que o meu software vai acabar sendo copiado, não importa o quanto eu me esforce, para mim tudo se trata de "garantir que é tão dificil que não compense". Ainda assim relembro-me que a melhor forma de elogio é a imitação :)

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

apocsantos, sim, a opção de um CGI parece ser interessante, em relação ao "fort-knox" é algo mais à "homem", terei que estudar a sério!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A unica dica que me resta deixar-te é dizer-te o que me disseram a mim quando me ensinaram a mais marcante lição sobre segurança "Olha para além do obvio, observa como se estivesses o exterior, observa como se fosses tu a quebrar a segurança que tu estás a montar. Lembra-te que o que está à vista ninguém vê!"

Explicaram-me isto numa aula sobre sistemas de segurança. Quando deixaram algo à vista e toda a gente reparou em tudo, menos no obvio. :thumbsup: Quanto mais "à vista" menos se vê!

Estudar nunca fez mal a ninguém, acho que o "verdadeiro espirito" do informático é mesmo o de estudar e conhecer a fundo todo o sistema, teoria, pratica, limitações, falhas, melhorias, etc...

Ainda me recordo e convivo com alguma regularidade com "informáticos" daqueles com olheiras de quem não dorme "já não se lembra à quanto tempo", toma café, como um ser humano "normal" bebe água, e quando começa a conversar com outro informático, para quem não é da arte, parece que falam alguma coisa tipo "chinês"!

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cool! :) Tá bem castiça a forma de explicar a criptografia.... Eu sinceramente uso Triple-DES ou 3DES, para já ainda é seguro. E pelo andar da carroagem vai ser seguro mais uns anitos!  :ipool:

Quando deixar de ser volta-se a utilizar codigos antigos tipo codigo Enigma :thumbsup:

Afinal de contas nunca ninguém se lembraria que alguém estaria a utilizar codigo Enigma, e é pouco vulgar.... é quase "histório" e mais nada :)

Penso que no futuro a segurança passará pro criptografia por hardware, e biometria.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já implementei alguns mecanismos do género mas para aplicações compiladas, no caso do PHP e linguagens de script é complicado embora tenhas alguns casos como o IPB que usa validação de licença embora nunca tenha estudado como o fazem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já implementei alguns mecanismos do género mas para aplicações compiladas, no caso do PHP e linguagens de script é complicado embora tenhas alguns casos como o IPB que usa validação de licença embora nunca tenha estudado como o fazem.

Por acaso é algo de que tenho curiosidade mas também nunca tive grande tempo e paciência para investigar... De qualquer forma, como o código está ali à mercê de todos, é uma questão de alguém se dedicar a modificar o código e evitar a verificação de licença. Até porque existem mesmo versões que lhes chamam "nullified" onde modificaram precisamente essa parte do código, mas suponho que alguns já devem saber que isso existe :X

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois é o problema das linguagens de script lol mas pronto também são aplicações muito conhecidas logo há uma maior tendência para ser crackado se calhar num projecto comum não aberto à comunidade "world" o mais provável é se calhar nem ser contornado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A questão de utilizar o CGI era mesmo utilizar o CGI em multiplas funções chave para o bom funcionamento da app, de maneira a que para se poder dar um "by-pass" no CGI tivessem de saber exactamente o seu interior, e o que faz o quê dentro dele (basicamente reverter a compilação). e recompilar o CGI, ai entrairia uma verificação de checksum na equação tornando ainda mais complexo "contornar" o licenciamento.

Por acaso desconhecia essa expressão

"nullified"

.

Penso que consista em basicamente fazer um "by-pass" à validação da licença. Em php como o codigo fica exposto é mais "propenso", e exige mesmos know-how, penso eu!

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho andado a investigar um pouco pela web formas de proteger uma aplicação, tanto o código fonte como possíveis tentativas de tentar correr a aplicação num servidor ou domínio para o qual não está autorizada.

Ao fim de tantos anos, nenhuma medida deste tipo foi totalmente bem sucedida, porque é que achas que vais ser?

Se o código está a ser executado num ambiente que tu não controlas, certamente que quem controla pode fazer com que qualquer medida seja inútil, por exemplo modificando código fonte, ou até mesmo binários. Não é nenhuma ciência oculta...

Que meios temos para garantir que a nossa aplicação só vai correr naquele e apenas naquele servidor ou domínio para o qual está autorizado?

Nenhum que seja realmente eficiente.

Tenho uma situação idêntica num dos meus projectos (embora não seja em PHP) que passa pela recusa de execução do software em caso de falta de licença.

A minha opinião é que isso não deve ser feito em PHP mas sim através de uma biblioteca compilada nativamente para o sistema, dado que assim é mais complexo "dar a volta ao sistema".

Ok, só se tem que alterar o software para saltar essa parte... O que não é complicado quer se tenha que modificar o código em php, ou um binário...

As pessoas já crackam software na forma de binários há muitos anos e não é assim tão complicado para quem por exemplo sabe linguagens de baixo nível e ler uns quantos documentos na WWW. E só é preciso um gajo que saiba querer fazer isso e publicar isso na WWW, que toda a gente passa a poder crackar.

Mas no meu caso não lido com utilizadores técnicos (do ponto de vista da informática) pelo que não tenho de ter algo tipo "Fort Knox", basta algo simples para dissuadir a cópia ilegal.

Certo, até te aparecer algum que tem um amigo/filho/sobrinho/whatever, que sabe crackar... Ou contratar algum puto que quer ganhar uns trocos para comprar mais erva, ou pagar uma subscrição do WoW.

O modelo de negócio que estás a tentar seguir está tão desactualizado, a meu ver, assim como está um 386 para o windows vista. OK Exagerei, i486DX2.

Eu não acho! Eu acho que estava mesmo desactualizado para o 80386...

silvinosilva, não sou eu que quero ter aplicações a correr localmente, o problema aqui é aqueles casos em que o cliente não quer ter nada online, fica com medo se por qualquer motivo a ligação à net falhar e consequentemente não pode trabalhar, etc., logo insiste para ter a aplicação a correr no seu próprio servidor.

Pelo menos cá em Portugal ainda ha muita gente céptica em ter algo a correr online, pensa logo que os concorrentes vão estar a vasculhar a sua base de dados descobrindo os seus segredos do negócio.

Isso são preocupações legitimas!

Que podem ser respondidas!

Neste momento já é possível dar a volta a problemas como o ficar sem net de várias formas.

No que toca à questão de falta de conectividade:

* os browsers modernos podem trabalhar (com algumas limitações) com aplicações offline;

* também podes ter uma arquitectura que permite haver continuidade, havendo por exemplo uma aplicação que é cliente da aplicação que está num servidor remoto, mas que é utilizada pelas outras como servidor temporário em caso de falha e que é capaz de realizar pelo menos uma parte das coisas necessárias até o problema ser resolvido;

* ter mais que uma ligação à Internet e de ISPs diferentes, nem que a redundante seja inferior para baixar os custos de manutenção;

Quanto ao aspecto da segurança, podes por exemplo submeter a tua aplicação a auditorias internas/externas para provar a sua qualidade no que toca à segurança, utilizar ligações seguras é essencial (pelo menos SSL), mas podes por exemplo só facultar acesso através de VPN.

Se ainda assim não quiserem, coloca a aplicação a correr no cliente mas numa máquina que seja tua e controlada por ti.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ao fim de tantos anos, nenhuma medida deste tipo foi totalmente bem sucedida, porque é que achas que vais ser?

Se o código está a ser executado num ambiente que tu não controlas, certamente que quem controla pode fazer com que qualquer medida seja inútil, por exemplo modificando código fonte, ou até mesmo binários. Não é nenhuma ciência oculta...

De facto não é nenhuma ciencia oculta, mas é relativamente complexo, e não é para as "unhas" de qualquer um. Podia ir até extremos e estariamos a discutir a velha teoria de que o melhor passo de segurança é tentar estar um passo à frente dos "hostis".

Ok, só se tem que alterar o software para saltar essa parte... O que não é complicado quer se tenha que modificar o código em php, ou um binário...

As pessoas já crackam software na forma de binários há muitos anos e não é assim tão complicado para quem por exemplo sabe linguagens de baixo nível e ler uns quantos documentos na WWW. E só é preciso um gajo que saiba querer fazer isso e publicar isso na WWW, que toda a gente passa a poder crackar.

Certo, até te aparecer algum que tem um amigo/filho/sobrinho/whatever, que sabe crackar... Ou contratar algum puto que quer ganhar uns trocos para comprar mais erva, ou pagar uma subscrição do WoW.

As pessoas que "crackam software à muitos anos e publicam isso na WWW" não devem ter muito bem noção do que estão a fazer.... Não são programadores, nem algo que se assemelhe mas sim uma especie de "mercenários" da informática sem ponta de Valores. Infelizmente foi uma das coisas que a WWW produziu!

Eu sei linguagens de baixo nivel e nem por isso ando praí a crackar softwares, utilizo o que sei para desenvolver software.... Não percebi o teu comentário sobre quem sabe linguagens de baixo nivel.

É um facto que existem putos que fazem qualquer coisa por uns trocos, pelo menos segundo o que se diz nos documentários apresentados na TV, mas quebrar uma cifra Triple-DES ? ou AES ? Bem venham lá esses génios! Gostava de conhecer um!

As VPN's como tudo na informática são seguras até ao ponto em que deixam de o ser, e como tudo acabam por ceder..... convinhamos que não existe sistema 100% seguro.

O derradeiro desafio contra a copia de software penso não se tratar de criar protecções ou legislar, mas sim tornar "economicamente desinteressante" a cópia de software. Se o produto original tiver algum tipo de "valor acrescentado" ou o preço for apelativo para o mercado a que se destina, por certo que será economicamente menos "interessante" reproduzi-lo ilegalmente.

Quanto mais comum é um programa, mais propenso deve ser aos "copiadores", e quanto menos comum, menos "copiavel" deve ser... pois deixa de ser economicamente interessante.

Por acaso já estudei para fins de auditoria em 2002 um software pelo qual o criador pagou uma avultada quantia pela protecção anti-cópia. Infelizmente ela foi demasiado facil de contornar, e as conclusões foram entregues ao criador e legal detentor da aplicação, sem nunca revelar os detalhes de como contornar a falha, mas sim apontado a correcção.

Que eu tenha conhecimento e mantenho contacto regular com o criador da aplicação, ainda não existem copias disponiveis nem na WWW nem em mais lado nenhum.

Ainda assim gostava que explicasses melhor o comentário sobre quem sabe linguagens de baixo nivel.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

falco, estás a assumir demasiado.

Não conheces o negócio nem o ambiente onde essa aplicação está. Mais, sabendo de ante-mão que o que dizes é verdade, isso não me preocupa minimamente, dado que se isso acontecesse é um custo que o projecto está disposto a assumir e o mais provável é que quisessem a nova versão, e lá iam gastar mais dinheiro/tempo/recursos etc. para crackar o programa de novo, algo que simplesmente não é rentável.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

M6: Estou de acordo com a referencia que fazes à rentabilidade do investimento de quem pertende ter uma aplicação tem de fazer se a pretender ter crackeada. Sincaremente eu gosto de musica, como gosto de software, e na minha vida pessoal estou directamente ligado à musica, além de proficionalmente estar ligado ao software. A titulo de exemplo digo que quando ouço uma musica na rádio e gosto, opto por comprar o CD para não ter de andar sempre a ouvir na web, e com mais gosto pago se for um colecionavel, ou CD+DVD, o mesmo faço com o software que uso.

Com os particulares trata-se de tornar o produto original "uma mais valia" para evitar a "cópia", com as empresas trata-se de garantir que não se faculte o acesso a actualizações e modificar o sistema de protecção a cada nova versão. Eu faço isso no software que produzo. E as empresas com quem trabalho também o fazem. Apesar de algumas usarem hardlocks e afins para proteger o licenciamento, elas garantem que o acesso aos updates só é feito atravez dos "parceiros autorizados", e apenas para utilizadores com licença valida.

Eu não tenho ideia de quanto possa custar desenvolver um "crack" para uma aplicação, pois não recorro a esse tipo de artimanhas, mas penso que deve ser bastante alto, ainda por cima porque seguindo a linha de raciocinio apresentada pelo falco tem deve ser feito por pessoas com conhecimento de linguagens de baixo nivel, e essas pessoas devem cobrar bem caro os seu tempo, porque afinal o trabalho de programar é chato, massivo, complexo, exige esforço mental, conhecimento, tempo para estudar, etc.... E quanto mais complexo for o programa ou a linguagem, melhor pago deve ser esse trabalho (isto a julgar pelo que ganha o pessoal que programa Cobol, ou RPG).

Eu penso que nenhuma empresa no seu perfeito juizo estaria disposta a pagar a um "programador" para desenvolver um crack, e passados alguns meses quem produziu o programa original lançar uma nova versão e a empresa ter de pagar novamente ao dito "programador" para desenvolver um novo crack.

Ainda assim eu mantenho a minha ideia. Convem ter algum nivel de segurança para "dissuasão" das pretenções de reprodução / utilização não licenciada do programa.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora