Qual a diferença entre essas duas imagens?

 3.17 KB

 76.9 KB

Aparentemente só o tamanho, mas ao abrir a segunda imagem com o WinRAR ou 7-Zip, você irá encontrar algo além do italiano bigodudo.

Como isso é possível? Coisa mais simples do mundo:

Que jogar um monte de bytes (arquivo) no final de outro monte de bytes (outro arquivo) é possível, tudo bem, todo mundo já sabia. O que eu não sabia era que o WinRAR conseguia achar o trecho compactado sem saber exatamente onde ele começa. Com certeza deve existir alguma flag que indica onde fica esse trecho. Okay, deixo a parte nerd do post para outra hora.

Tá, legal… e dái?

Veja bem, isso não serve pra p**** nenhuma, certo? Errado!
A internet é uma terra sem lei, mas algumas pessoas insistem em tentar controlar o que vc faz ou deixa de fazer. Então, alguma mente desocupada teve a, diga-se de passagem, ótima idéia de camuflar conteúdo ilegal em imagens inocentes e hospedar em um desses serviços de armazenagem grátis (como o imageshack.us).

Pode não parecer muita coisa, pois vc baixa seus filmes educativos por torrent, mas com os grandes trackers indo pro saco uma hora a festa acaba (ou fica mais difícil de arrumar convite).

Okay, vc tá dizendo que eu posso baixar Doom 4 camuflado num JPG? É impossível ter um JPG de 10+ GB hospedado, qualquer imbecil vai perceber que não se trata de uma imagem.

Correto, mas e se esses GB’s fossem divididos em pequenas partes de, vamos supor, 2 MB cada… e cada uma dessas partes fosse hospedada como uma imagem diferente? No final, só será necessário “juntar” os pedaços para assistir o novo episódio de House.

É claro que um software gerenciando tudo isso deixaria as coisas mais fáceis, mas não conheço nenhum =/
Por isso comecei um projeto simples (iShare, em C#) que faz o básico:

  • Divide o arquivo-alvo em quantas partes de tamanho Y (especificado pelo usuário) forem necessárias;
  • Adiciona uma imagem random no começo de cada parte;
  • Armazena as imagens em algum serviço online, ou disco virtual;
  • Cria uma lista de links para as imagens que compõem o arquivo-alvo;
  • Baixa as imagens;
  • Remove as imagens, deixando só as partes; e
  • Junta” as partes.

Pena que parei com o projeto antes de terminar os itens listados em vermelho. Se houver interesse, posto o source pra quem quiser terminar.

Para quem for utilizar essa técnica, uma dica é utilizar o WordPress, fiz um teste a um ano e a imagem de 7.5 MB está lá até hoje. Quem quiser testar, baixe essa imagem (clique com o botão direito e em Salvar link…), depois tente abrir com o WinRAR.

Enfim, como faço a gambiarra?

O modo mais simples é:

  • Copie a imagem que vc deseja usar para camuflar o seu RAR para seu C:\
  • Copie seu RAR que será camuflado para seu C:\
  • Escolha um nome para a imagem que será criada contando o RAR (gambiarra.jpg ou gambi.jpg, para os íntimos)
  • Abra o menu Iniciar e clique em Executar e digite “cmd”, sem aspas
  • Clique em Ok e um prompt de comando aparecerá
  • Digite: copy /b c:\<sua_imagem.jpg> + c:\<seu_rar.rar> c:\gambiarra.jpg

No case, se sua imagem original tem o nome A.JPG e seu RAR tem o nome B.RAR, ficaria: copy /b C:\A.JPG + C:\B.RAR C:\GAMBIARRA.JPG

Para quem programa em C:

#include <stdio.h>

int main(int ac, char ** av)
{
    FILE *jpg, *rar, *out;
    char c;
    
    jpg = fopen("./arquivo.jpg", "rb");
    rar = fopen("./arquivo.rar", "rb");
    out = fopen("./imagem.jpg",  "wb");
    
    while(!feof(jpg))
    fputc(fgetc(jpg), out);
    
    while(!feof(rar))
    fputc(fgetc(rar), out);
    
    fclose(jpg);
    fclose(rar);
    fclose(out);
}

Ou para quem programa em VB (5 ou 6):

sub main()
 
Dim f1() As Byte
Dim f2() As Byte
 
Open ".\arquivo.jpg" For Binary As #1
ReDim f1(LOF(1))
Get #1, , f1
Close #1
 
Open ".\arquivo.rar" For Binary As #1
ReDim f2(LOF(1))
Get #1, , f2
Close #1
 
Open ".\imagem.jpg" For Binary As #1
Put #1, , f1
Put #1, , f2
Close #1

Por enquanto, para músicas e ROM’s de Super Nintendo, funciona muito bem