Uma forma de esconder o código

29 respostas
F

Olá
Eu preciso fazer uma classe que gera uma senha de liberação dos nossos sistemas, só que, é muito fácil descompilar um .class mesmo usando os obfuscators dá pra ter uma idéia de como é a implementação.
Eu disse pro pessoal que a pasta WEB-INF é protegida e ninguém pode acessa-lá normalmente… mas e se alguém crackear???
O pessoal aqui é muito receioso, principalmente porque eles vem do delphi que gera executaveis que quase não são descompilavéis.

Alguma sugestão? :smiley:

Grato

29 Respostas

I

Vocês estão usando MySQL connector?
Se tiverem, saiba que ele é GPL e tudo o que tem ele como conector deve ser também.
Mas para proteger de tudo isso acho meia falta de necessidade, o que tem d+ no .class? senha do banco de dados? caminho do banco?

F

Igor_Barros:
Vocês estão usando MySQL connector?
Se tiverem, saiba que ele é GPL e tudo o que tem ele como conector deve ser também.
Mas para proteger de tudo isso acho meia falta de necessidade, o que tem d+ no .class? senha do banco de dados? caminho do banco?

Não se trata de licença de uso. É que nesse .class irá ter uma implementação de um gerador de senha pra liberação de nossos sistemas, essa implementação deve ser muito bem protegida.

S

Hummm … gerador de Senha? Senha que vai ser dada pro usuário? Pronto, não precisa proteger a geração da senha mais :wink:

De qualquer modo o WEB-INF é o lugar pra vc colocar … se entrarem no seu servidor nao precisam do gerador de senha, pegam os dados do sistema de uma vez.

F

smota:
Hummm … gerador de Senha? Senha que vai ser dada pro usuário? Pronto, não precisa proteger a geração da senha mais :wink:

De qualquer modo o WEB-INF é o lugar pra vc colocar … se entrarem no seu servidor nao precisam do gerador de senha, pegam os dados do sistema de uma vez.


Não vou mais chamar a senha de senha vou chama-lá de código de liberação (isso deve ta gerando confusão)
Esse código de liberação serve para liberar o uso de um sistema, para evitar pirataria e pra não deixar o cliente usar o sistema depois de expirado o contrato.
Se caso o cliente renovar o contrato ele entraria no site geraria um código de liberação, então esse algoritmo que gera esse código deve estar super protegido.
Eu por mim colocava no WEB-INF e ta tudo certo, mas… o chefe é muito desconfiado, já que ele sabe que pode descompilar um .class.
Pra evitar que mesmo o cara invada o servidor esse algoritmo esteja protegido. Entenderam o dilema?

Grato

I

Porque não desenvolver então no super, ultra, hiper, mega, master, super Delphi e criar uma ponte entre a aplicação e a web? Assim você terá seu gerador de senhas super protegido e seu site também, mas vale lembrar uma coisa que o CV me disse hoje de manhã.

“Se você esta preocupado com privacidade, porque você está usando windows? Aliás se você estiver muito preocupado, porque está na internet?” by CV

D

Pq não usa chaves de criptografia?

S

Não existe fórmula mágica pra isso … o negócio é você ter um bom contrato e bons clientes.

Em algum ponto sua aplicação terá que acessar essa algoritmo, se for web o único jeito será tendo algo no classpath (que está no WEB-INF) e então vc entra no dilema de novo. Se não for web piora pq vc tem que mandar isso pro cliente.

Pelo que entendi a aplicação é desktop certo?

A aplicação terá que entender a formação desse código pra poder validá-lo, certo? Outro furo, o cara pode descompilar o código da aplicação e fazer engenharia reversa … pior, pode usar AOP para alterar o bytecode e burlar a validação … ehehehe :twisted:

F

É sim, mas é em delphi :smiley:

smota:

A aplicação terá que entender a formação desse código pra poder validá-lo, certo? Outro furo, o cara pode descompilar o código da aplicação e fazer engenharia reversa … pior, pode usar AOP para alterar o bytecode e burlar a validação … ehehehe :twisted:

Como sistema é em delphi a possibilidade de fazer engenharia reversa é pequena (pelo menos é o que os delphianos dizem) :roll:

F

Olá
O jeito vai ser fazer um programinha em C com esse algoritmo e gerar uma biblioteca so.
Alguém ai tem um tutorial de como fazer isso em linux? é do mesmo jeito que seria feito com dll?

_

Cara … qualquer coisa que está conectada na internet não está 100% segura. Entenda e aceite isso.

Sobre ofuscadores, tem esse mais famozinho, sob a LGPL:
http://www.retrologic.com/retroguard-main.html

T

Aham, vou puxar a brasa para a minha sardinha (trabalho direto com isso, portanto não sou tão leigo assim).
No Java 5 existe um novo provider JCE (PKCS#11 Provider), na verdade a Sun comprou esse provider do pessoal da IAIK.
Esse provider possibilita a você usar hardwares criptográficos, como smartcards e USB tokens.
Por exemplo, você pode ir até o site da Certisign e olhar o preço de um conjunto smartcard (CPF eletrônico) mais um leitor de smartcards, só para você ter uma idéia de quanto isso custa. (Testei esse cartão com o Java 5.0 e sei que funciona. O problema é que o cartão da Certisign é “bloqueado” e não aceita você gerar mais chaves que não sejam o certificado digital; então é necessário obter um cartão de teste com o pessoal da GD Burti, que é o fabricante desses cartões. )
Outros caras que fabricam essas coisas são a Rainbow (eles têm um representante no Brasil, e vendem USB Tokens, que são muito parecidos com aqueles “dongles” que se usam para proteger softwares, ou aqueles USB Drives, mas na verdade sao um conjunto smartcard + leitor em um pacote só.)
O acesso ao smartcard é feito via senha, normalmente; para obter os dados secretos, é necessário digitar a senha e ter o cartão.
Não sei se isso é razoável para o seu problema.
Eu acho que o da GD Burti funciona em Linux; já não sei o da Rainbow, mas provavelmente deve funcionar também.

F

Lipe, se dependesse de mim eu colocaria de uma vez por todas no WEB-INF.
Mas chefe é chefe… :mrgreen:

Dessa maneira pode não 100% seguro mas ta mais dificil de ser descompilado. :smiley:

R

Entao faz autenticacao remota. Ou seja, vcs colocam um servidor de autenticacao e as aplicacoes conectam nele para validar os dados.
Mas sempre havera meios de quebrar. Alguem pode simplesmente crackear a aplicacao para dar um bypass no sistema de validacao. Isso acontece com qualquer software, e se o sucesso da emprsa depender exclusivamente disso, eh melhor mudar de ramo :mrgreen:

Rafael

S

Eu não me especializei em sacanagem, mas Delphi gera código nativo, assim como C, Pascal e um monte de outras coisas … e desde sempre existem cracks pra tudo quanto é programa e até onde eu sei o crack é feito analisando os bytes do coitado do programa e burlando a parte de seguranca do infeliz, ou seja, continua sendo perfeitamente possível cracker seu super/ultra/mega seguro programa powered by Delphi.

então essa papo de seguro em Java menos seguro que em Delphi é furada, os problemas são os mesmos só burlados com uma arquitetura complexa como os smart cards e tokens (burlados pq isso não resolve, sempre haverá um jeito, só é preciso um pouco de motivação pra se descobrir :roll: )

_

Que tal gerar os códigos de acesso usando um punhado de dados de 20 lados e mandar o officeboy dizer o código pro cara que comprou o software? Não esqueça da equipe de seguranças e do rastrador no pescoço do coitado do menino. :mrgreen:

F

HUHAUahuHAuhuaH
E vamos alugar um carro-forte pro officeboy levar o código.
AHauahuhu

R

Ola!

Estou lendo esse topico e confesso que me perdi no meio de tantas possibilidades. No final das contas fiquei sem saber qual cerne do problema.
Mas se voce deseja uma sistema o mais seguro possivel, poderia pensar em algum tipo de autenticação biometrica. Dá um pouco de trabalho, pois os dados de verificação de biometria devem ser enviando criptografados entre client e server, mas se voce quer garantir que a pessoa é a pessoa mesmo, essa é a melhor opção.
Em relação ao WEB-INF, um servidor Unix, com um bom firewall e um switch L3 ( nem precisa ser router) já são suficientes para garantir a segurança do app server. O que pode ser feito a mais que isso, são regras de rede aplicadas diretamente no kernel do SO.

Lembre-se que as impossibilidades tecnoligicas podem quase sempre ser resolvidas definindo-se procedimentos de utilização do sistema e de sua manutenção.

Espero ter ajudado.

– Ricardo.

F

rborges:
Ola!

Estou lendo esse topico e confesso que me perdi no meio de tantas possibilidades. No final das contas fiquei sem saber qual cerne do problema.
Mas se voce deseja uma sistema o mais seguro possivel, poderia pensar em algum tipo de autenticação biometrica. Dá um pouco de trabalho, pois os dados de verificação de biometria devem ser enviando criptografados entre client e server, mas se voce quer garantir que a pessoa é a pessoa mesmo, essa é a melhor opção.
Em relação ao WEB-INF, um servidor Unix, com um bom firewall e um switch L3 ( nem precisa ser router) já são suficientes para garantir a segurança do app server. O que pode ser feito a mais que isso, são regras de rede aplicadas diretamente no kernel do SO.

Lembre-se que as impossibilidades tecnoligicas podem quase sempre ser resolvidas definindo-se procedimentos de utilização do sistema e de sua manutenção.

Espero ter ajudado.

– Ricardo.


Olá Ricardo, obrigado pela sua resposta.
O problema é o seguinte, a gente tem softwares desenvolvidos em delphi que são liberados/bloqueados através de um código. Esse código será oferecido via web, mas o meu chefe sabe que o .class é facilmente descompilado, no caso de uma invasão no servidor de hospedagem o cracker pode pegar a classe e descompilar e ver o algoritmo que gera o codigo.
O que eu como programador quero fazer, é arrumar um jeito de proteger esse algoritmo ao máximo.
Um jeito que achei foi escrever um programa em C e criar um .so.

D

Amigo, se alguém invadir o seu servidor, seu WEB-INF e roubar o seu .class, pode ter certeza que ele já terá roubado muito mais.

F

Com certeza, mas o medo do meu chefe é alguém pegar esse algoritmo e sair vendendo códigos de liberação. Vai dar um trabalho convencer ele. :roll:

PS: Daniel vc escreveu uma matéria pra JM sobre thinlet? To lendo agora.

D

Foi sim! :oops:
Mas já saiu? eu nem tava sabendo. Hehehehehehe.

R

furutani:

O que eu como programador quero fazer, é arrumar um jeito de proteger esse algoritmo ao máximo.
Um jeito que achei foi escrever um programa em C e criar um .so.
`

Nem precisa ser .so… um cgi ja da conta do recado. Ai vc usa a minha incrivel http://libcgi.sf.net pra ficar profissa mesmo :mrgreen:

Rafael

R

É Furutani , tem varias maneiras de se fazer isso … Pelo que vejo o problema maior é convencer o chefe. Faça a melhor analise custo beneficio das opções e exponha a ele. A solução que ele aceitar vc implementa. Essas questões burocraticas sao chatas mesmo.

Outra coisa que eu pensei foi fazer uma interface JNI e chamar um binario mesmo. Ai, vc teria o seu algoritimo protegido. O binario pode ser em C mesmo. Ou entao Faz com Process.exec mesmo. Nem precisa ser tao sofisticado.

[ ]'s

– Ricardo.

D

IMHO, se o problema está centralizado em se obter acesso ao servidor entao uma boa opção é o que o Rafael citou, criação dessa chave de acesso remotamente…

E se achar q é pouco taca isso numa .so e acessa remotamente…

R

Sugestão: use certificados digitais em vez de códigos secretos.

D

Mas pq o uso de certificados digitais faria diferença no caso de uma invasão ao servidor?

D

Você pode encriptar essas chaves, por exemplo. Então, a posse dos algorítmos por sí só não seriam suficientes.

R

Diogenes:
Mas pq o uso de certificados digitais faria diferença no caso de uma invasão ao servidor?

Porque não haveria código a ser escondido

Explicar o uso de certificados digitais é uma parada demorada e estou sem tempo pra isso

Só tô dando uma idéia, vocês podem pesquisar, realmente estou sem tempo, gostaria de discutir mais.

I

Fácil, deixa o class no servidor… se alguém roubar, lance uma atualização do programa invalidando aquele tipo de validação e criando outra. Assim todo mundo que estiver registrado na empresa obterá acesso mediante confirmação do cadastro para implementar uma nova forma de se autenticar e pegar a chave.

Se isso não der certo, bota um httpserver no delphi escondido, que mostra quem é a pessoa que está tentando usar o programa com a chave, se for fria, entra nesse httpserver e invalida o programa dela… hehehehe

Criado 31 de janeiro de 2005
Ultima resposta 2 de fev. de 2005
Respostas 29
Participantes 10