Colegas,
Voltando ao tema, como proteger um código java de um aplicativo desktop que será distribuído pela internet?
O projeto a ser desenvolvido basicamente trata da transmissão, para o servidor do fornecedor, de um arquivo criado e validado na máquina do cliente.
A necessidade de segurança reside, por exemplo, na necessidade de se evitar que algum usuário mal intencionado, tendo acesso ao código java, consiga visualizar o endereço (IP) do servidor e faça ataques via internet.
Outra questão é que o aplicativo desktop efetuará validações no arquivo selecionado pelo usuário e permitirá a transmissão ao servidor somente se o arquivo tiver sido validado sem erros.
Caso o código seja facilmente acessível ao usuário (com algum descompilador) a segurança do projeto estará comprometida, já que o usuário poderá alterar as regras de validação, recompilar o programa e transmitir um arquivo “bichado”.
Reparem que a questão não é simplesmente proteger o código por proteger.
Vejam o caso do programa de declaração do imposto de renda pessoa física, da Receita Federal. O usuário somente consegue transmitir sua declaração se esta estiver de acordo com as regras estabelecidas pelo programa (com base na legislação do Imposto de Renda). Imagine que alguém mal intencionado tenha acesso ao código java, altere-o a seu gosto e, com isso, consiga transmitir uma declaração em desconformidade com o que prescreve a legislação.
Tenho pesquisado sobre o assunto, mas ainda não encontrei nada que me convença definitivamente que posso tranquilamente desenvolver o programa em java que, de alguma maneira, a segurança necessária será alcançada.
Um programa feito em Delphi ou C, por exemplo, após compilado e linkeditado (.exe), salvo engano, dificilmente permite uma engenharia reversa (impossível não deve ser, mas deve ser bem dfícil).
A opção por java, em princípio, reside na característica multiplataforma desta, porém, pelo exposto acima, um nível mínimo de segurança precisa ser mantido.
E então, colegas, o que sugerem? Continuar com java ou partir para outra linguagem?