Distribuição de aplicações Java p/ desktop

17 respostas
E

Olá…
Gostaria de saber um jeito seguro para distribuir aplicações pra desktop…
uso o plugin FatJar pro eclipse para gerar o .jar com todas as bibliotecas embutidas e uso o JSmooth para gerar um executável a partit desse .jar.
Porém esse executável precisa do .jar para sua execução… dessa forma tenho que distribuir junto o .jar com todos os .class e sabendo que existe vários descompiladores por aí essa distribuição ficaria praticamente OpenSource…
então, como posso distribuir minhas aplicações de forma segura?
desde já obrigado…

17 Respostas

F

Por que vc não usa o Web Start? É uma maneira simples e pratica de distribuir, basta baixar o JNPL, e caso vc faça uma atualização disponibiliza ela la no server, e o Web Start vai fazer o download da aplicação automaticamente.

Simples, prático e rápido.

[]'s

O

em casos especificos, as vezes vale a pena tentar um compilador nativo como esse

http://www.excelsior-usa.com/jet.html

H

Caro erico_kl, tenho a mesma dúvida q vc, espero que tenha várias respostas.
Felagund, nem todos os meus clientes possuem conexão com a internet, isso inviabiliza a utilização do Web Start, tendo eu que distribuir as minhas aplicações em CDs.

Estou acompanhando o tópico, no aguardo de uma resposta.

J

Pode obfuscar o código, para que nibguém entenda. Em linguagens que geram pseudo código, é o único meio de proteger o fonte.

E

Valeu as dicas ae…
se eu executo a aplicação com webStart ela simplesmente nao roda…
e se eu tento executar pelo comando “javaws nome.jnlp” gera um erro TooManyArgumentsException
porem se eu executo pelo comando “javaws -Xnosplash nome.jnlp” roda perfeitamente…
alguma dica?? ahh… é a primeira vez que utilizo o Web Start…

Arquivo fluxo.jnlp:

<?xml version="1.0" encoding="utf-8"?>  
<jnlp  
  spec="1.0+"  
  codebase="http://localhost:8080/fluxo"  
  href="fluxo.jnlp">  
 
    <information>  
        <title>Java Web Start</title>  
        <vendor>SGCarro</vendor>  
        <homepage href="http://localhost:8080/fluxo/index.html"/>  
        <description>Tutorial Java Web Start</description>  
        <description kind="short">Tutorial JWS</description>  
        <icon href="images/logo.jpg"/> 
        <offline-allowed/> 
    </information> 
 
    <resources>  
        <j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/> 
     
        <jar href="FluxoCaixa.jar"/> 
 
        <property name="myProperty" value="Isso é um exemplo de propriedade"/> 
    </resources>  
    <jar href="FluxoCaixa.jar" main="true" download="eager"/> 
    <application-desc main-class="view.JFFluxoCaixa"/> 
</jnlp>

Arquivo index.html:

<html> 
 
<head> 
    <title>Fluxo Caixa</title> 
</head> 
 
<SCRIPT LANGUAGE="VBScript">
on error resume next
If isIE = "true" Then
  If Not(IsObject(CreateObject("JavaWebStart.isInstalled"))) Then
     javawsInstalled = 0
  Else
     javawsInstalled = 1
  End If
  If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.4.2.0"))) Then
     javaws142Installed = 0
  Else
     javaws142Installed = 1
  End If 
  If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.5.0.0"))) Then
     javaws150Installed = 0
  Else
     javaws150Installed = 1
  End If  
End If
</SCRIPT> 

<body> 
 
    <br> 
 
    <p align="center"><font face="tahoma" size="4"><b>Java Web Start</b></h1> 
 
    <p align="center"><img src="images/logo.jpg" border="0"/></p> 
 
    <p align="center"><font face="tahoma" size="2"> 
 
    <script> 
        insertLink("fluxo.jnlp", "Clique aqui para executar a aplicação"); 
    </script> 
</body> 
 
</html>

Obs: o Link para executar a aplicacao nao aparece

M

Só um comentário, sem querer ser chato: ofuscar o código ilumina mas não aquece.

E se for fazer aplicação desktop no melhor estilo cliente-servidor e
for se preocupar com segurança (entenda leitura do fonte), melhor ir pro Delphi ou um similar
que será mais feliz (não que o código Assembly gerado pelo Delphi
vá resolver 100%, ainda podem depurar seu código).

Eu ainda acho um pé no saco esses descompiladores pra Java. A Sun bem que podia mandar
algo mais “difícil” de interpretar no Java 7.

Inté.

J

Cara, obfuscar já ajuda…

Mas contra pirataria, não adianta brigar assim. Os cara sempre dão um jeito de crackear o sistema. O que você pode fazer é, de alguma forma, oferecer algo que faça valer a pena ter a licença.

M

Realmente ajuda, josenaldo.
Mas crackear é diferente de ter o seu fonte.
Vou dar um exemplo: digamos que vc tenha uma rotina de validação de
senha dentro do seu fonte (coisa simples). Com o código descompilado do
Java, isso vem de mão beijada, até mesmo porque o obfuscador não pode
modificar a lógica da coisa.
Depurar as chamadas Assembly já é bem mais difícil para entendimento mas
não impede do cracker fazer um desvio.

O maior problema que eu vejo nem é a licença e sim a segurança que seu
software irá proporcionar para seu cliente.
Já pensou se um funcionário do seu cliente com pouco conhecimento em Java resolve
“sacanear” a empresa? Numa aplicação desktop em Java vc ficará mais
vulnerável.

Só pra não fugir do tópico, o WebStart é uma mão na roda.
No caso do colega que tem clientes que não utilizam internet (ainda existe isso???),
disponibilize os 2 serviços: WebStart para que puder acessar e CD para quem não
tem internet.

H

O meu problema é bem esse mesmo, meus sistemas são para automações industriais, por isso a questão de proteger o código fonte é muito importante, e realmente tenho validações e senhas que ao acessar o código fonte tudo vai por água a baixo. A forma que estou pensando em fazer pra melhorar a segurança, vai ser gerar um arquivo compilado separado da minha aplicação Java no qual estará a lógica para as minhas senhas.
Mas isso mostra um problema enorme para o JAVA, que é uma linguagem tão poderosa mas não tem como proteger ao menos o código fonte!

J

homisinho:
O meu problema é bem esse mesmo, meus sistemas são para automações industriais, por isso a questão de proteger o código fonte é muito importante, e realmente tenho validações e senhas que ao acessar o código fonte tudo vai por água a baixo. A forma que estou pensando em fazer pra melhorar a segurança, vai ser gerar um arquivo compilado separado da minha aplicação Java no qual estará a lógica para as minhas senhas.
Mas isso mostra um problema enorme para o JAVA, que é uma linguagem tão poderosa mas não tem como proteger ao menos o código fonte!

Pense bem… Será que já não pensaram nisso antes? Será que, depois de tanto tempo, não existe técnica pra combater isso? Pesquise um pouco mais…

M

Bom, eu já pesquisei muito sobre isso na há um tempo atrás e sinceramente não encontrei
nada melhor que obfuscadores.
Dividir a aplicação em 3 camadas (desktop) ou web diminui o acesso ao .jar com a regra
do negócio mas ainda não elimina a possibilidade de descompilação.

Se tiver uma idéia melhor, estou bastante interessado.

Inté.

P

Ninguém até agora citou hardlocks, que creio ser muito confiável para lidar com a situação de distribuição da aplicação.

Com ele vc consegue:

:arrow:Limitar o número de execuções da aplicação
:arrow:Proteger contra alterações indevidas
:arrow:Pode copiar a vontade sua aplicação, mas sem o hardlock a aplicação não roda

Enfim, para quem precisa, não vejo método mais seguro a não ser investir nesta hardware, que convenhamos, não é caro para o que se propõe.

E

então acho ainda que a solução seria Web Start…

M

Encontraram alguma solução?

T

Já existe alguma solução para este problema?

V

Não.

T

Ok, obrigado!

Criado 16 de março de 2009
Ultima resposta 16 de mai. de 2014
Respostas 17
Participantes 11