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.
Abri a calculadora do Windows – modo Programador – para ver 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. 😂
Troquei E0 por E9; salvei o arquivo como App_2025.exe e testei. Tudo funcionando!
Mais curiosidades no Linkedin – https://www.linkedin.com/feed/update/urn:li:activity:6872362816112869377/