Jump to content

Java Obfuscator


triplexim32
 Share

Recommended Posts

É capaz de ser dos mais usados no que toca a software livre, mas não é nada que um bom Java decompiler não consiga combater, se a isso juntarmos um simples software de pesquisa e substituição de texto, temos o código fácil de ler.

Será que o trabalho extra compensa? É assim tão importante tentar dificultar a leitura do código, é que com isso apenas vais deter os que se cansam à primeira.

Link to comment
Share on other sites

obrigado pela ajuda 😕

Pois a desistência será sempre o único ponto forte a combater  🙂 e se formos nos a fazer o Obfuscator melhor... mas nao queria matar os miolos a fazer um Obfuscator para a única applet que vou criar na vida (digo eu).

Mas de qualquer dos modos: há algum comando que faça no java o mesmo que o comando "eval" faz no php?

<

Link to comment
Share on other sites

Melhor? Estás a partir do princípio que é possível fazer algo melhor... se o computador tem de executar, então é sempre, sempre, possível obter o código. Se não queres que alguém tenha acesso ao código da tua applet, a melhor maneira é não escreveres a applet! Se o computar executa o código então o código está acessível ao utilizador que queira dar-se ao trabalho de o ir buscar, não há nada que possas fazer contra isso.

Quanto a algo como o eval, não, não existe, até porque Java não é interpretado da mesma maneira que o PHP, embora seja possível fazer o mesmo processo, isto é, pegar em código Java e compilar e executar esse código. No caso das applets não sei se as APIs estão acessíveis já que as applets possuem restrições de segurança que não existem em aplicações desktop

Link to comment
Share on other sites

Melhor? Estás a partir do princípio que é possível fazer algo melhor... se o computador tem de executar, então é sempre, sempre, possível obter o código. Se não queres que alguém tenha acesso ao código da tua applet, a melhor maneira é não escreveres a applet! Se o computar executa o código então o código está acessível ao utilizador que queira dar-se ao trabalho de o ir buscar, não há nada que possas fazer contra isso.

Quanto a algo como o eval, não, não existe, até porque Java não é interpretado da mesma maneira que o PHP, embora seja possível fazer o mesmo processo, isto é, pegar em código Java e compilar e executar esse código. No caso das applets não sei se as APIs estão acessíveis já que as applets possuem restrições de segurança que não existem em aplicações desktop

Interessante, não tinha essa ideia do java.

Ou seja, como seria a melhor forma de aceder ao código de uma applet? Um simples plugin para o browser resolvia a coisa?

Em javascript costumo usar um plugin, é 100% fiável que consiga aceder ao código mesmo que tenha sido cifrado 1000vezes, agora java java desconhecia.

<

Link to comment
Share on other sites

Cifrado? Desde quando é que consegues cifrar JavaScript que depois o browser execute?

O browser teria de ter acesso à chave de cifra para poder reverter o processo e aceder aos dados antes de executar o código, o que não está implementado em browser nenhum que eu conheça. Javascript nunca vem cifrado.

Não é uma questão do Java, é igual em qualquer linguagem, se o computador tem acesso, então o utilizador tem acesso.

A forma de acederes ao código de uma aplicação Java, seja uma applet ou não, é simplesmente usares um software que reverta o processo de compilação. E software desse existe aos pontapés. A única coisa que os software de ofuscação podem fazer é tornar mais difícil conhecer o nome das variáveis e dos métodos, mas o código está lá.

Se procurares pelo fórum vais ver como este assunto já foi falado várias vezes, nas mais variadas linguagens, passando por Java, Javascript, HTML, PHP, etc. Volta e meia surge algum utilizador com esta dúvida, mas o resultado é sempre o mesmo: se o computador consegue executar, o utilizador que quiser tem sempre acesso.

Link to comment
Share on other sites

ha maneiras de cifrar o código javascript, variadas técnicas podem ser usadas, so depende da criatividade de cada um.

O eval no javascript ajuda bastante para voltar compilar todo o nosso processo de reversão, imaginemos um pequeno exemplo:

Ciframos sobre XOR e base64 (localmente), copiamos essa string que obtemos metemos isso entre " ", deixamos uma função de reversão acessível. A função de reversão vai voltar a por o código como estava e depois usamos o comando Eval sobre ela para "compilar" tudo de novo.

Isto é apenas um exemplo basico, podemos cifrar varias vezes com intervalos de caracteres, buscar chaves para usar no XOR de enumeras formas lados, incluir varios evals dentro de outros eval com cifras etc... etc... mas isto não vale de nada, só dá uma dor de cabeça para utilizadores não experientes...

---

Ou seja o que tas a dizer é que a unica forma de reverter java é usando aplicativos que leem o bytecode e o revertem certo?

<

Link to comment
Share on other sites

Ou seja o que tas a dizer é que a unica forma de reverter java é usando aplicativos que leem o bytecode e o revertem certo?

No caso de aplicações Java sim. Não tens acesso ao código com um simples editor de texto.

Quanto à questão da cifra... isso não são algoritmos de cifra, base64 não cifra seja o que for, XOR muito menos. Isso não passa de uma transformação do texto de forma a que seja mais difícil para o utilizador ler, mas o próprio script JS vai ter o código necessário para reverter o processo. Não há aí uma cifra.

Link to comment
Share on other sites

Uma das principais maneiras de salvaguardar javascript é partir em muitos bocados e tornar o código difícil de ler. Ou seja:

Desformata o código (corta linhas aonde n deves, deixa linhas grandes, queria tabulações que n fazem sentido)

Parte-se o código em vários ficheiros e deixa-se uma linguagem de servidor controlar quais os ficheiros que devem ser lidos para cda situação (isso ajuda muito a dificultar a ler o código).

Traduzir todos os caracteres para Unicode

Se fizeres estas três coisas o teu código fica muito mais difícil de obter e de ler. Serás capaz de fazer desistir +- 90% dos interessados no código. Já que tentar copiar pelos resultados do código até pode ser mais fácil que tentar ficar com o código.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Uma das principais maneiras de salvaguardar javascript é partir em muitos bocados e tornar o código difícil de ler. Ou seja:

Desformata o código (corta linhas aonde n deves, deixa linhas grandes, queria tabulações que n fazem sentido)

Parte-se o código em vários ficheiros e deixa-se uma linguagem de servidor controlar quais os ficheiros que devem ser lidos para cda situação (isso ajuda muito a dificultar a ler o código).

Traduzir todos os caracteres para Unicode

Se fizeres estas três coisas o teu código fica muito mais difícil de obter e de ler. Serás capaz de fazer desistir +- 90% dos interessados no código. Já que tentar copiar pelos resultados do código até pode ser mais fácil que tentar ficar com o código.

Se usares o Javascrip Debugger (plugin para o FireFox) tens o código de novo organizado por parágrafos e tabs (no sitio certo) e o codigo todo revertido, é um bom plugin, principalmente porque te organiza as funções todas numa lista e faz a organização automática de código.

Portanto JS é neste momento a forma mais fácil de reverter : )

Perder algum tempo a "cifrar" JS apenas vai dar jeito para utilizadores não experientes não andarem a inventar.  😞

<

Link to comment
Share on other sites

ha maneiras de cifrar o código javascript, variadas técnicas podem ser usadas, so depende da criatividade de cada um.

O eval no javascript ajuda bastante para voltar compilar todo o nosso processo de reversão, imaginemos um pequeno exemplo:

Ciframos sobre XOR e base64 (localmente), copiamos essa string que obtemos metemos isso entre " ", deixamos uma função de reversão acessível. A função de reversão vai voltar a por o código como estava e depois usamos o comando Eval sobre ela para "compilar" tudo de novo.

Isto é apenas um exemplo basico, podemos cifrar varias vezes com intervalos de caracteres, buscar chaves para usar no XOR de enumeras formas lados, incluir varios evals dentro de outros eval com cifras etc... etc... mas isto não vale de nada, só dá uma dor de cabeça para utilizadores não experientes...

---

Ou seja o que tas a dizer é que a unica forma de reverter java é usando aplicativos que leem o bytecode e o revertem certo?

Há uns anos atrás vi uma técnica idêntica num componente de um CMS (não me recordo do nome) escrito em PHP.

Demorei uns bons 30 segundos a descodificar o código e a ter acesso ao código fonte, com comentários e tudo...

Se querem mais "segurança" a esse nível têm de misturar mais técnicas, como alterar o carregamento das classes com um user-defined class loader. Isto vai ajudar a "baralhar as contas" a quem tenta ver o código fonte.

Mas como disse o Knitter, se é passível de execução...

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

No caso de aplicações Java sim. Não tens acesso ao código com um simples editor de texto.

Quanto à questão da cifra... isso não são algoritmos de cifra, base64 não cifra seja o que for, XOR muito menos. Isso não passa de uma transformação do texto de forma a que seja mais difícil para o utilizador ler, mas o próprio script JS vai ter o código necessário para reverter o processo. Não há aí uma cifra.

Fazer XOR é "O" algoritmo de cifra 😉 desde que tenhas uma chave do tamanho do que queres cifrar 😛

Mas sim, triplexim32, o que referes são simples técnicas de obfuscagem, nada mais. E perceber o conteúdo duma aplicação Java não é assim tão complicado, até porque o bytecode (as instruções Java) é bastante simples e intuitivo.

Estou é curioso com o porque da paranóia de quereres "esconder" o código...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.