Protegendo os .class

Fala galera…blz??

seguinte…uma vez vi no site da SUN como a gente poderia fazer p/ proteger nossos arquivos .class desses descompiladores q existem por ai…

alguem chegou a ver isso tb e lembra de como fazer isso??
ou tem outro meio de proteger nosso fonte??

valew.

Meu caro, vou aproveitar que hoje eu to mala mesmo e ninguém me aguenta: pra quê proteger seu código?? Faça tudo open source!! : ))

[]s

Eh, os chamados obfuscators. Eles nao protegem teu codigo de ser descompilado, mas deixam ele no minimo extremamente complicado de entender se alguem tentar descompilar ele.

A maior parte eh comercial, como vc pode ver em

http://www.google.com/search?q=obfuscator+java+source

Agora, tem que ver se eh realmente necessario isso. Pois somente valeria a pena se teu programa utilizasse algum algoritmo mto bom que a “concorrencia” nao tem, mas para aplicacoes “normais”, nao vejo grande vantagem. Porquê? porque a implementacao do algoritmo eh o de menos, se alguem quiser copiar teu programa, eh so olhar pra interface, ver as funcionalidades que tem e implementar da maneira que achar melhor ( ou conseguir ).

Rafael

valew galera…

nao sou q quero proteger meus .class, mas sim meu chefe…

eh q no sistema, pelo menos por enqto, os metodos de criptografia estao todos no meu codigo…entao precisava proteger, pelo menos, essas classes de serem descompiladas…

valew

Chefes, melhor seria não tê-los…

seu chefe é técnico?? Explique para ele que o código que faz a criptografia não faz parte da proteção. Explique para ele que os melhores e mais utilizados mecanismos de criptografia são de fonte aberta e todo mundo sabe fazer. Pergunta se ele conhece PGP: qualquer um implementa o PGP. Mas isso não quer dizer que ele é menos seguro do que proteções proprietárias como a do PDF, por exemplo. Pra quebrar uma senha normal do PGP (512 bytes), o cara precisa de MUITO tempo de computação.

Aliás, mostre para ele o artigo da comunidade científica metendo o pau nas urnas eletrônicas brasileiras, que possuem um código criptográfico proprietário. Eles queriam que fosse Open Source, pq na opinião deles (e na minha também), é mais seguro.

Se não adiantar, mande ele falar comigo. Vc vai gastar um tempo e uma energia tentando obfuscar seu código que não compensam. Mas se vc usaar RSA, tá tudo a seu favor: par de chaves “inquebrável” (sempre entre aspas), e mais: SEM BUGs, pq o código tá pronto e é mantido pela Sun. E ainda por cima vc não vai ter que obfuscar nada.

[]s do duke, boa sorte!!

dukejeffrie
como vc usa criptografia de informacoes em java?

Com certeza, acredito que a idéia da linguagem java eh open source mesmo, mas como nosso amigo rbarioni quer, e acredito, não tiro a razão dele, é que já imaginou uma classe que contem os metodos que criptografam e descriptografam a senha que centenas de pessoas cadastram e depois usam diariamente?! Será que não seria bom proteger muito bem esse arquivo .class de alguma forma??

Acho que vale a pena pensar no caso…eheehh… :lol:

Ate mais

eh exatamente essa minha ideia…
proteger pelo menos alguams classes minhas q contem meus segredos de criptografia de senha e dados do meu BD…

falow.

P.S.: o richardpeder sabe disso pq trabalha aqui comigo…e fica ai, expondo minhas ideias…hehe

Caríssimo IvoD,

Aprendi a encriptar um objeto pra poder responder como eu faria. Não sei nem se compila, vcs testem, tentem, mudem, e me ensinem a fazer direito depois, blz??

Primeiro, vamos supor que em algum momento anterior, vc gerou uma chave criptográfica com o código abaixo. Nós estamos fazendo um software que roda na internet (ou seja, em ambiente hostil) e queremos garantir que só o servidor sabe ler dados que são enviados para ele. Então utilizamos criptografia assimétrica (com duas chaves, igual ao PGP):


        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        KeyPair pair = generator.generateKeyPair();
        // salvo a chave privada num stream:
        privateObjectOutputStream.writeObject(pair.getPrivate());
        privateObjectOutputStream.close();
        // salvo a chave pública num outro stream:
        publicObjectOutputStream.writeObject(pair.getPublic());
        publicObjectOutputStream.close();

Estou supondo que o stream onde vc escreve a chave é na verdade um arquivo. Sua chave privada deve ficar num cofre, de preferência, ou em algum lugar completamente sem acesso. Ou vc pode usar outros esquemas de segurança pra guardar a chave, por exemplo, salvá-la num banco de dados em uma tabela protegida usando serialização.

Daí vc tem como encriptar os dados. Os clientes vão ter acesso à chave pública, que vai ficar num website, ou mesmo no client.jar, sei lah, desde que eles tenham como acessá-la.

Aí que funciona a criptografia de verdade. Quando um cara vai enviar dados para o servidor, ele os encripta com a chave pública:

// inicialização da chave, que vc só precisa fazer uma vez:
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);

// encryptaremos "myObject", que implementa java.io.Serializable, e a seguir o enviaremos pelo OutputStream os:

CypherOutputStream cos = new CypherOutputStream(os, cipher);
ObjectOutputStream oos = new ObjectOutputStream(cos);
oos.writeObject(myObject);

Do outro lado, o cara vai usar a chave privada (a do cofre), e vai fazer o caminho inverso:

// inicialização da chave, que vc só precisa fazer uma vez:
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);

// queremos ler o objeto do InputStream is, que eu não sei de onde veio:

CypherInputStream cis = new CypherInputStream(is, cipher);
ObjectInputStream ois = new ObjectInputStream(cis);
myObject = (MyObject) ois.readObject();

Pelo que eu entendi, é assim que funciona. Existem diversos mecanismos de criptografia, e é difícil determinar qual é o mais adequado. Mas eu não vejo como o código acima precisaria de proteção, nem o que o fato de ele ser público (afinal, todo mundo tá lendo) diminui a confiança que eu poderia depositar nele.

[]s!

Aproveitando a “deixa” sobre criptografia e porteção de arquivos .class, acho que vcs conhecem aqueles programas que descompactam os .class neh? pois bem, de nada adianta vc ter um metodo que faz A criptografia se o cara pega seu .class e descompila ele. Pergunta:

Como faço para proteger meus .class da descompactação? Existe algum metodo RELAMENTE eficaz e preciso??

Valeu…

Proteger contra a descompilacao voce nao vai conseguir. Voce pode usar um obfuscador pra complicar o trabalho.

Raael

Vale lembrar que programas escritos em qualquer linguagem estão sujeitos a algum tipo de descompilação, engenharia reversa ou coisas do gênero.
Tá certo que os .class do Java costumar ser mais fáceis de serem submetidos a esse processo, mas você nunca estará 100% seguro.
Afinal, se o computador entende o que o programa tem que fazer, o ser humano também é capaz de entender.

Com certeza Bani…vale ressaltar o que vc disse sobre os computadores e os seres humanos, se o micro entende, nos entenderemos tb. Mas com certeza deve haver algo que, não resolva completamente, mas sim que atrapalhe um pouco o “curioso” na hora de descompilar um .class…vc sabe se tem??

Valeu…ate mais…

Como o Rafael já disse acima, existem os obfuscators.
Dá uma procurada no Google por Java obfuscator que você encontra um monte.

Obrigado pela dica Bani, vou procurar.

ate mais…

Aproveitando o tópico alguem conhece algum que seja free?

Acredito que uma pessoa gostaria de proteger um algoritimo de criptografia por achar que ficará seguro… ou por saber que o algoritimo é fraco.
Mas acredito que nem vale a pena usar um obfuscador… ou até valeria… pois pelo menos vai tirar a chance de lammers tentarem entender seu código… :lol:

Quanto a precisar ou não obfuscar o código, acho que isso é uma questão de opção. Na dúvida, eu estou testando uns softwares que fazer isso. O melhor que vi até agora é um tal de zelix. Mas eu não lembro a URL agora.

Detalhe: ele é pago. Não achei nenhum free

Eu tinha visto uns decompilers a um tempo atraz… GPL… e alguns obfuscava o código também… mas não lembro o nome deles… e se tiver… está na maquina lá da empresa…
Mas tentar dar uma olhada no Google por decompiladores… talvéz vc encontre alguns que obfusca tb…
:lol:

gcc.gnu.org
Lá voce encontra um obfuscador java de primeira classe, inutiliza a grande
maioria dos decompiladores e desassembladores para java. Chamasse gcj.
Esse funciona.