Eu sempre disse que não adianta você querer esconder um código HTML (o código-fonte de uma página web), pois como o código precisa ser processado para ser exibido na tela ele também pode ser facilmente configurado para ser imprimido em sua forma original, ou seja, o código-fonte. Isso significa que não adianta você tentar proteger o código.

Pois bem. Eu estava testando o programa MaxProtector e enviei o link do programa para o Rafael, que usa um Mac, e ele me disse que o site não aparecia no Safari e que tinha somente um javascript na tela.

Verifiquei o código-fonte do site e vi que era um Javascript codificado. A codificação até que não era tão ruim: diferente de muitos scripts que utilizam um extenso processo de decodificação e depois utilizam um simples “document.write” no fim, esse utiliza vários eval e funções definidas para esconder o código.

(Quando um script utiliza document.write, basta você colocar no começo e no fim do document.write uma tag HTML PRE ou TEXTAREA para que o código-fonte do site seja impresso ao invés de processado).

Eu sempre digo que a “pessoa certa” pode facilmente decodificar o código, mas eu não sou a “pessoa certa” para fazer essas coisas. Meu conhecimento de javascript é mínimo (observe quanto javascript realmente útil existe na Linha Defensiva (nada) e você verá o que eu digo). A primeira idéia que eu tive foi realmente simples:

Usando o navegador SeaMonkey (ou o Mozilla Suite, tanto faz), você precisa carregar o site e usar o “Selecionar Tudo” (Select All), clicar com o botão direito e ir em “View Selection Source” para obter o código fonte de toda a página. O problema é que o site do MaxProtector me redirecionava para about:blank quando eu clicava em Select All. O que eu fiz foi carregar o site, desabilitar o Javascript e tentar selecionar depois… e deu certo.

Mas isso não foi satisfatório, pois o código-fonte exibido pelo SeaMonkey usando esse método é diferente do código-fonte original. Além disso, algumas partes do código já estavam processadas e algum javascript original se perdeu. Não era bom. Eu precisa outra solução.

O que eu fiz, então, foi salvar a página do MaxProtector no disco rígido e adicionar alguns códigos:

  1. Um DIV com ID “decode” no fim do script e no começo, de modo que ele estaria encobrindo todo o javascript
  2. Um javascript no fim que pegava todo o HTML dentro do DIV “decode” (portanto ele pegaria todo o HTML já processado) e criava uma textarea para imprimir o código na tela.

O Javascript:

d = document.getElementById(”decode”); // Referência ao DIV
html = d.innerHTML; // Pega o HTML
document.write(”<textarea rows=’20′ cols=’80′>”);
document.write(html); // Imprime o HTML em uma textarea
document.write(”</textarea>”);
d.innerHTML = “”; // Zera o HTML original, para não termos a página e a textarea na tela.

Carreguei isso no SeaMonkey, mas o HTML extraído tinha alguns bugs. Carreguei no Opera, mas por algum motivo o Opera não extraía os Javascripts do código. Me virei para o Internet Explorer, mas o código extraído não podia ser selecionado, pois a página do MaxProtector tem um código que lhe proibe de selecionar texto. Oh noes!!11!

Será que eu seria vencido pelas proteções que eu sempre disse que não funcionavam?

Fiquei algum tempo buscando javascripts na internet (porque eu não sei quase nada) para cancelar o script que proibe a seleção de texto, mas não encontrei nada que funcionasse. Foi então que eu tive a idéia: usar frames. Você os conhece. Eles são chatos pra caramba.

O código que proibe a seleção de texto só funciona no documento atual (no frame atual) mas não funciona em outros frames da mesma janela. Isso significa que se eu passar o HTML que eu peguei para uma textarea em outro frame (que não está protegido), vou ter o código e vou poder selecioná-lo!

Para fazer isso, eu criei uma página simples que carrega o meu código para pegar o HTML e também a textarea para receber o conteúdo:

<iframe src=”maxprotector-code.html” height=”1″ width=”1″></iframe>
<textarea id=”decme” name=”decme” rows=’20′ cols=’80′></textarea>

E mudei o código na minha página anterior, incluindo duas novas linhas de script e retirando a textarea, ficando assim;

d = document.getElementById(”decode”); // Referência ao DIV
html = d.innerHTML; // Pega o HTML
d.innerHTML = “”; // Zera o HTML original
t = parent.document.getElementById(”decme”); // Referencia a textarea no frame
t.value = html; // Coloca o HTML capturado na textarea

Pois é… 5 linhas de Javascript e 4 linhas HTML para acabar com a proteção javascript do MaxProtector.

E eu nem tenho certeza se essa é a forma mais fácil de fazer isso. Como eu disse anteriormente, não sou uma das “pessoas certas”…

Posted Wednesday, January 11th, 2006 at 2:13
Filed Under Category: Geek, Internet
Both comments and pings are currently closed.

0

Comentários estão fechados.