Precisei fazer crack do meu próprio programa

Esta semana recebi uma ligação bem curiosa: era um antigo cliente pra quem fiz um programa em 1999.

Ele me disse que um dos campos parou de funcionar. O campo ano só aceitava valores até 2016; não podia digitar 2017.

No mesmo dia tinha um compromisso ao lado do escritório dele, aproveitei para visitá-lo. Ele me explicou que desde o ano 2000 mantém um computador com Windows 98 exclusivamente para rodar o programinha. Disse que já precisou trocar o HD várias vezes, mas que sempre mantém uma cópia de segurança.

Copiei os programas e os arquivos de dados.

– “Não esquece o BDE“, ele me lembrou. Realmente bem útil.

De volta ao escritório, criei uma máquina virtual com Windows XP. Copiei tudo pra lá. Rodou legal – aliás, tenho que me lembrar de sugerir essa ideia do VirtualBox pra ele.

Como você já deve suspeitar, já não tenho mais os fontes em Delphi.

Só viemos a conhecer os softwares de controle de versão (CVS, SVN) lá em 2004. Até então a gente fazia backups em HDs e CDs, mas não os encontrei mais.

Em 1999 a internet era discada e lenta: mandar uma versão nova para o cliente era demorado. Mas se você usasse o AsPack (compactador / obfuscador), seus arquivos .EXE ficariam bem menores.

Aqui iniciou o passo mais difícil: descompactar o meu próprio .EXE.

Baixei inúmeras ferramentas que prometiam descompactar o AsPack – rodei todas no ambiente virtualizado para proteger o PC principal de possíveis malwares. Mas AQUELA versão do AsPack que utilizei nunca era compatível.

Nas minhas buscas pela internet, surgiu a opção do OllyDbg, para fazer um dump de um processo em execução. Com a ajuda do seguinte vídeo consegui reproduzir os passos, e finalmente extraí o que seria o .EXE original.

Testei o .EXE extraído e funcionou perfeitamente. Agora eu podia voltar ao problema original: corrigir algum if do campo ano para permitir que fosse digitado um valor maior que 2016.

Baixei a versão portable do editor hexadecimal HxD – https://mh-nexus.de/en/hxd/.

Ao abrir o executável descompactado, procurei por “2016” e não achei nada; claro: não deve ser uma String, e sim um número.

“Puxei” na calculadora do Windows – modo Programador – como é 2016 em hexadecimal: 07 E0, mas também não encontrei nada.

Então notei que o editor HxD permite procurar não apenas Strings, mas Inteiros também!

Voilá!

Ele localizou três ocorrências de E0 07  (que é quase igual ao 07 E0, só que invertido, por causa da ordem dos bits mais significativos. (DOOUH!!!)

Troquei E0 por E9; salvei o arquivo como App_2025.exe e testei. Tudo funcionando!

Já estamos em tratativas para modernizar o software, utilizando uma abordagem mais moderna: hospedado na nuvem, mas sem pressa: tem bastante tempo até 2025!