1 pontos por GN⁺ 2026-02-02 | 1 comentários | Compartilhar no WhatsApp
  • Um caso de análise e restauração do funcionamento de um dongle de porta paralela exigido por um compilador RPG II para contabilidade nos anos 1990
  • O software original roda em um console DOS no ambiente Windows 98 e não funciona sem o dongle
  • Após transferir a imagem de disco para um emulador e analisá-la, foi constatado que a mesma rotina de proteção contra cópia estava inserida dentro de executáveis como RPGC.EXE e SEU.EXE
  • Por meio de análise em assembly, confirmou-se que a rotina sempre retorna um valor constante específico (7606h), e a verificação do dongle foi contornada com um patch de 4 bytes
  • Com isso, o compilador RPG II da Software West passou a poder ser executado sem o dongle, um resultado significativo do ponto de vista da preservação de software clássico

A descoberta de um software contábil ancestral e do dongle

  • Um software contábil baseado em RPG usado por 40 anos ainda estava em operação em um PC com Windows 98
    • RPG é uma linguagem para computadores de médio porte como IBM System/3, System/32 e AS/400, que depois foi portada para MS-DOS
  • Ao iniciar, o programa exigia um dongle de proteção contra cópia em hardware na porta paralela
    • No dongle ainda restavam, de forma apagada, as inscrições “Stamford, CT” e o logotipo “Software Security Inc.”
    • A palavra “RUNTIME” estava marcada nele, e seu significado foi esclarecido mais tarde durante a análise

Análise da imagem de disco e estrutura do compilador RPG

  • A imagem de disco do sistema Windows 98 foi extraída e executada em um emulador
    • Foram encontradas duas versões do compilador RPG II (produzido pela Software West Inc.) e o código-fonte RPG completo do software contábil
    • O sistema tinha a forma de um menu composto por vários módulos RPG e arquivos de lote do DOS
  • O próprio compilador fazia a verificação do dongle e também inseria a mesma rotina de proteção nos executáveis gerados

Engenharia reversa da rotina de comunicação com a porta paralela

  • O disassemblador Reko foi usado para analisar o SEU.EXE
    • Inicialmente, as instruções in/out não apareciam, mas foram encontradas em outro segmento (0800h)
    • Essa rotina lê o endereço da porta paralela na área de dados da BIOS e transmite/recebe dados pela porta LPT1
    • O valor de resultado é armazenado no registrador BX, não há valor de entrada e o retorno é sempre o mesmo

Inferência do valor constante e patch

  • Foi confirmado que, no final da rotina, o valor de BH fica fixo em 76h
    • Apenas o valor de BL permanecia desconhecido, então o intervalo de 0 a 255 foi explorado por força bruta
    • A combinação correta foi confirmada como BL=06h, isto é, BX=7606h
  • Os primeiros 4 bytes da rotina foram substituídos por MOV BX,7606h e RETF, contornando a verificação do dongle
    • Depois disso, o programa passou a executar imediatamente, e a mesma modificação pôde ser aplicada a outros executáveis com a mesma rotina

Resultado e significado

  • O mesmo código de proteção contra cópia foi encontrado em todos os componentes do compilador RPG II, permitindo uma correção em lote
  • Como o dongle apenas retornava um valor constante, ele pôde ser neutralizado com apenas um patch de 4 bytes
  • O compilador modificado funciona normalmente sem o dongle e, após a remoção de informações pessoais, deverá ser publicado como arquivo histórico de software
  • Quase não há material online sobre a Software West Inc., então há a esperança de estabelecer contato adicional com os criadores

1 comentários

 
GN⁺ 2026-02-02
Comentários no Hacker News
  • A proteção de software no começo era realmente muito simples
    Eu tinha um disco de upgrade do Windows 3.11, e o instalador falhava se não encontrasse uma versão anterior instalada
    A solução era simplesmente criar um arquivo de texto vazio e salvá-lo com o nome win.com. Isso acontecia porque o instalador varria o disco inteiro e só procurava esse arquivo
    Na prática, o disco de upgrade já incluía a instalação completa. Naquela época, era tudo muito simples

    • Quando eu era criança, meu pai comprou a versão de upgrade do Windows 3.1, que dizia “atualizável a partir da versão 3.0 ou anterior”, mas na prática só reconhecia 3.x
      No fim, pegamos uma versão 3.x com um amigo e instalamos, e senti que era moralmente aceitável, já que o anúncio dizia outra coisa
      Dá para ver fotos do produto neste link do eBay
  • Eu desenvolvo software para engenharia civil (mes100.com)
    Ainda hoje há usuários que preferem dongles de hardware. Eles dizem que só se sentem seguros quando têm um dispositivo físico em mãos
    Como vendo licenças perpétuas, quando um dongle quebra é complicado, porque não há peça de reposição. Licenciamento em nuvem é algo de que eles não gostam, embora permita receita por assinatura
    Mas, por mais esforço que eu faça, versões crackeadas continuam circulando online. Não tenho estrutura para reagir legalmente, então proteção é essencial

    • Um dos motivos para preferirem esses dongles é o ambiente air-gapped. Em lugares que lidam com dados sensíveis de projeto, como instalações militares ou nucleares, não é possível ter conexão com redes externas
      Além disso, alguns simplesmente gostam da autonomia de não depender de um servidor de terceiros
    • Foi dito que é um setor em que a regulação muda lentamente, então há pouco incentivo para upgrade; nesse caso, fica a dúvida de por que o usuário teria motivo para continuar pagando
    • Meu pai usava um programa de engenharia civil chamado ‘Cosmos’, e ele usava um desses dongles. Às vezes ele não era reconhecido, e eu me lembro de como isso era irritante
    • Do ponto de vista do usuário, a atitude de “se não quebrou, não mexe” é racional
      Por isso, o modelo SaaS parece um desastre para o usuário. Não gosto de pirataria, mas também não gosto de SaaS
  • Antigamente, cracks eram muito mais simples
    Dava para contornar a proteção simplesmente trocando JE ou JNE por JMP
    O essencial era descobrir onde o código de proteção estava e como ele funcionava

    • Existem vários motivos para esse tipo de proteção simples existir
      Primeiro, como os desenvolvedores lidam com o código por muito mais tempo do que nós, uma proteção complexa demais dificulta a correção de bugs
      Segundo, cada hacker só precisa conhecer alguns truques, mas o desenvolvedor precisa bloquear todos eles
      Terceiro, funcionalidades de proteção são um trabalho pouco interessante e sem reconhecimento, então há grande falta de motivação
    • Certa vez abri um software demo num debugger, e a string do código de ativação estava ali, intacta, no dump de memória
      Digitei aquilo e ele foi ativado na hora. Depois acabei comprando a licença de verdade
    • Já quebrei a “laser protection” ProLok do dBASE III
      Era um método de assinar o disquete com laser, mas até um adolescente que soubesse ler assembly conseguia quebrar facilmente
      Na verdade, era possível copiar até só arranhando o disquete com um alfinete. No fim, foi um caso em que o marketing ficou à frente da tecnologia
  • Escrevi código RPG II nos anos 80 e, nos anos 90, ajudei na migração para um ambiente de emulação S/36
    Usávamos um produto da California Software Products, e ele funcionava bem o bastante para a empresa continuar existindo até o fundador se aposentar

  • Sobre o comentário “esse método de proteção contra cópia não é simples demais?”, eu diria que, naquela época, era um nível adequado de engenharia
    Com emuladores e decompiladores, dava para resolver em poucos dias, mas na época essas ferramentas nem existiam

    • O público-alvo importa. Se o objetivo era barrar empresas comuns de setores não técnicos, não era necessário deter um especialista em engenharia reversa
    • Os decompiladores não conseguiam analisar o código de proteção
      90% do software daquela época era realmente tão simples assim. Não é que faltasse perceber algo complexo
    • Por volta de 2000, fiz um trabalho parecido de hackeamento numa pequena empresa de telecomunicações em Buenos Aires. Na maior parte, o nível de dificuldade era o mesmo que o OP descreveu
    • Nossa empresa de TI também protege arquivos suspeitos deslocando bits para fornecer um magic number. Não precisa ser complexo
  • Quando eu era criança, já crackeei um jogo Ultima
    Foi porque eu achava um saco ter que colocar o disquete toda vez. O código se descriptografava sozinho e lia o endereço inicial de um setor específico do disco
    Esse setor não podia ser copiado com ferramentas normais, mas resolvi o problema alterando o cabeçalho do executável

  • No começo dos anos 90, fiz manutenção de um sistema de renovação de licença desenvolvido internamente pela matriz de uma franquia
    Era preciso renovar todo mês por disquete, e a matriz às vezes bloqueava arbitrariamente lojas de que não gostava
    No fim, várias unidades se juntaram e abriram processo, e eu criei um gerador de licenças baseado em DOS para que cada loja pudesse renovar por telefone recebendo um código
    Depois que o processo terminou, distribuí um patch que removia completamente a checagem de licença. Um dia ainda quero rodar isso de novo no DOSBox

  • Achei interessante ver um texto dizendo que o Windows 95 ainda é usado em produção
    Ao contrário das tendências chamativas de IA, nas áreas mais sem graça da indústria as mudanças tecnológicas são lentas

    • Vi empresas virtualizando Windows 95 até 2014. Era um software médico antigo, mas surpreendentemente estável
    • Pelas capturas de tela, o programa parece ser para DOS. Provavelmente o Windows era usado apenas para compartilhamento de arquivos
    • O Win95 tem “só” 30 anos, e ainda roda em parte do hardware moderno
      Existem até hoje sistemas rodando em emulador de PDP-11
  • É impressionante que esse software e esse hardware ainda estejam em uso em algumas empresas
    Por isso, publicar uma versão crackeada pode trazer risco jurídico
    Como empresas pagam muito dinheiro para manter sistemas antigos funcionando, esse tipo de lock-in de fornecedor continua existindo
    Se a patente ou a propriedade intelectual ainda estiverem em vigor, é preciso verificar isso antes de publicar qualquer coisa

  • Um dongle de hardware que simplesmente retorna um número fixo — realmente é um método de proteção muito simples
    Mas, na época, isso já era suficiente. Até hoje softwares corporativos usam algo parecido, como apenas uma chave de licença
    No fim, era a versão dos anos 80 da ideia de “se houver algum sinal de que existe uma cobrança, as pessoas pagam”