Olá pessoal, sou novo em Java e percebi que depois que vc compila o projeto, vc pode descompilar os arquivos CLASS facilmente. Existem programas que descompilam programas em outras linguagens, mas nao tão facil pra modificar como no java, eh assim mesmo abertão ou há maneiras de manter seguro meu codigo???
:x
Segurança do Código Fonte
24 Respostas
4 maneiras
a) Faça a cobrança pelos serviços, e venda o código-fonte para seu cliente.
b) Use alguma proteção por hardware
c) Compile para código nativo (gcj ou Excelsior JET)
d) Se quiser achar que há alguma segurança, use um “obfuscator”, mas isso não resolve muita coisa. Só desestimula um pouco o cara que vai “abrir” seu código.
Ou renda-se ao open source 
Quando você compilar em modo release, não é tão aberto assim.
Quero dizer, seria muito mais caro para o seu cliente contratar uma equipe para reverter o código do que para refaze-lo.
Agora, se a informação vale muito e você está preocupado com questões de segurança ou com usuários “maus”, talvez seja melhor propor uma arquitetura em que o núcleo do sistema fique protegido fisicamente, inclusive…
Olá
Não é verdade. Repito, isto NÃO funciona assim na prática.
Qualquer programinha Java por mais bobo que seja tem mais de 5000 linhas de código Java. Eu desafio a qualquer um a tentar entender o código todo descompilado por mais experiente que seja com Java (eu comecei em 97).
Outro desafio: baixe os fonte de qualquer projeto Open source e marque o número de horas que levará para entender os fontes. Perceba que falo de fontes e não de código descompilado que às vezes vem truncado e com nomes estranhos.
O que pode acontecer é haver dentro do código alguma pequena parte que represente um algoritmo proprietário que precisa ser protegido. Neste caso Java dispõe de vários meios de protegê-lo. Há ainda a alternativa de escrever este trecho sensível em C e chamar via JNI.
[]s
Luca (que acha que se Java fosse tão ruim assim ninguém usaria)
luca, quais seriam esses meios q vc citou para proteger uma parte do codigo sem q esse seja feito em C?
Olá
-
Usar um ClassLoader que carregue classes criptografadas (programadores newbies já criptografam seus códigos costumeiramente)
-
Usar táticas diversionistas para dificultar o entendimento dos algoritmos (programadores newbies já fazem isto costumeiramente)
-
Proteger os algoritmos por contratos bem escritos (é o que fazem as grandes empresas)
[]s
Luca
“programadores newbies” - bom eu axo q ainda falta um pouco pra mim chegar i nesse nivel 
:oops:
“ClassLoader que carregue classes criptografadas” - vc tem como me passar algum material sobre isso ?
:oops:
obrigado e desculpe a ignorancia :oops:
Luca, trabalho numa software house e fazemos os portais do Banco do Brasil e do Banco Ibi , entre outros…
Te digo, que 5000 linhas para um Action (J2EE, web usando o Struts) é muito dificil.
Não sei se voce quis realmente dizer 5000 linhas per class ou per projeto.
Acho que nunca vi 5000 linha numa Action.
[]'s
Obs: Decompiler, descompila tao bem que chega ate mostrar os comentarios do fonte
(// coment1 & /* coment2 */)
, os javadoc, etc…
Luca, trabalho numa software house e fazemos os portais do Banco do Brasil e do Banco Ibi , entre outros…
Te digo, que 5000 linhas para um Action (J2EE, web usando o Struts) é muito dificil.
Não sei se voce quis realmente dizer 5000 linhas per class ou per projeto.
Acho que nunca vi 5000 linha numa Action.
[]'s
Obs: Decompiler, descompila tao bem que chega ate mostrar os comentarios do fonte
(// coment1 & /* coment2 */)
, os javadoc, etc…
Quanto a tamanho de classes… trabalho num projeto da SEFAZ-PE(Secretaria da Fazenda) que não usamos Struts, mas um framework proprio, e cada classe que trabalha como uma DispatchAction tem (normalmente) mais de 10.000 linhas de código e não tem código de negocio no meio disso… é tudo bem separado. Acho que em projetos grandes muitas linhas de código é normal.
Olá
Luca, trabalho numa software house e fazemos os portais do Banco do Brasil e do Banco Ibi , entre outros…Te digo, que 5000 linhas para um Action (J2EE, web usando o Struts) é muito dificil.
Não sei se voce quis realmente dizer 5000 linhas per class ou per projeto.
Acho que nunca vi 5000 linha numa Action.
[]'s
Obs: Decompiler, descompila tao bem que chega ate mostrar os comentarios do fonte
(// coment1 & /* coment2 */)
, os javadoc, etc…
É claro que me referi a um programa e não a uma classe. Se bem que o Thinlet tinha uma famosa classe de 6000 linhas.
Já conheci programadores que em 2 semanas criavam quase 5000 linhas de código. Mas é claro que em centenas de classes.
Qualquer programinha bobo Open Source que você baixa tem mais do que isto. Há uns que tem muito mais do que isto. O Hibernate tem mais de 85 mil linhas. Quantas horas você acha que um cara excelente levaria para entender o código fonte mesmo tendo a mão toda a documentação?
[]s
Luca
Agora eu entendi Luca.
Nem tenho ideia. Talvez até anos…
po gente , mas eu soh tinha preocupação mesmo em proteger um metodo , pois existe nele algumas strings importantes, como eu faço isso?
desculpe, nao tinha atualizado a pagina 
“programadores newbies” - bom eu axo q ainda falta um pouco pra mim chegar i nesse nivel
:oops:“ClassLoader que carregue classes criptografadas” - vc tem como me passar algum material sobre isso ?
:oops:
obrigado e desculpe a ignorancia :oops:
[off-topic] Existe algum entre usuário e newbie[/off-topic]
http://www.javaworld.com/javatips/jw-javatip22.html
http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html
http://www.java2s.com/Product/Java/Byte-Source-Code/Obfescator.htm
http://www-128.ibm.com/developerworks/java/library/j-obfus/
Agora te vira q tu não é quadrado, mano! srsrsr
Obs: Decompiler, descompila tao bem que chega ate mostrar os comentarios do fonte
(// coment1 & /* coment2 */)
, os javadoc, etc…
Opa, os comentários não são guardados nos arquivos .class, portanto não é possível o descompilador mostrar eles.
Não e não, essa classe provavelmente deveria ser refatorada em algumas outras. Tente medir a coesãod ela e aposto que verá que é baixíssima.
Aqui optamos conscientemente por separar todo o lixo de escovação de bits numa classe complexa e longa.
Ficou com 400 linhas de código.
Luca, trabalho numa software house e fazemos os portais do Banco do Brasil e do Banco Ibi , entre outros…
Te digo, que 5000 linhas para um Action (J2EE, web usando o Struts) é muito dificil.
Não sei se voce quis realmente dizer 5000 linhas per class ou per projeto.
Acho que nunca vi 5000 linha numa Action.
[]'s
Obs: Decompiler, descompila tao bem que chega ate mostrar os comentarios do fonte
(// coment1 & /* coment2 */)
, os javadoc, etc…
Quanto a tamanho de classes… trabalho num projeto da SEFAZ-PE(Secretaria da Fazenda) que não usamos Struts, mas um framework proprio, e cada classe que trabalha como uma DispatchAction tem (normalmente) mais de 10.000 linhas de código e não tem código de negocio no meio disso… é tudo bem separado. Acho que em projetos grandes muitas linhas de código é normal.
Analise isso…estou vendo muito problema onde voce trabalha…
Algo como coesao d+ ou procedural d+!
Analise isso…estou vendo muito problema onde voce trabalha…
Algo como coesao d+ ou procedural d+!
Teoricamente coesão de mais nunca vai se rum problema. Coesão é uma métrica que, teoricamente, quanto maior, melhor. O problema é que você não consegue coesão muito alta sem abrir mão de outros benefícios, como boas abstrações.
Eu guardaria o conteúdo destas Strings em um arquivo gerado pelo keytool por exemplo e declararia as propriedades como transient.
Talvez te ajude.
Ps: a senha do arquivo jks você pode deixar já salva em formato md5 em um arquivo properties.
fw
Nem qdo eu era nerd bobao e olhava os fontes do kernel do linux (2.4) eu lembro de ter visto tantas classes com 10 mil linhas
na verdade nem sei se tem pq o kernel eh razoavelmente bem estruturado hj
Mas com toda ceteza do universo, essas suas classes ai tem muuuuuuitas coisas erradas, nao ha nada no universo que justifique uma unica classe com 10 mil linhas, qto mais, varias classes.
“Perca” um tempinho pensando melhor ai no que estao fazendo, sera muito valido pra vcs.
O kernel do Linux é um péssimo exemplo, a preocupação neste caso é outra. Ah, e até onde eu sei o kernel é C, não C++ 
Por isso mesmo, sem nem no kernel tem 10 mil linhas… imagina uma classe Java ter hehhe 