1 puntos por GN⁺ 2026-02-02 | 1 comentarios | Compartir por WhatsApp
  • Un caso de análisis y restauración del funcionamiento de un dongle de puerto paralelo requerido por un compilador RPG II para contabilidad en la década de 1990
  • El software original se ejecuta en una consola DOS dentro de un entorno Windows 98 y no funciona sin el dongle
  • Tras trasladar la imagen de disco a un emulador para analizarla, se descubrió que dentro de ejecutables como RPGC.EXE y SEU.EXE estaba insertada la misma rutina de protección anticopia
  • Mediante análisis en ensamblador se confirmó que la rutina siempre devuelve un valor constante (7606h), y se evitó la verificación del dongle con un parche de 4 bytes
  • Gracias a esto, el compilador RPG II de Software West pudo ejecutarse sin dongle, un resultado valioso desde la perspectiva de la preservación de software clásico

El hallazgo de un antiguo software contable y su dongle

  • Un software contable basado en RPG que se había usado durante 40 años seguía operando en una PC con Windows 98
    • RPG es un lenguaje para computadoras de gama media como IBM System/3, System/32 y AS/400, que más tarde fue adaptado a MS-DOS
  • Al ejecutarse, este programa requería un dongle de protección por hardware conectado al puerto paralelo
    • En el dongle aún se distinguían débilmente la inscripción “Stamford, CT” y el logotipo de “Software Security Inc.”
    • También aparecía la palabra “RUNTIME”, cuyo significado se aclaró más adelante en el análisis

Análisis de la imagen de disco y estructura del compilador RPG

  • Se extrajo la imagen de disco del sistema Windows 98 y se ejecutó en un emulador
    • Se encontraron dos versiones del compilador RPG II (creado por Software West Inc.) y el código fuente RPG completo del software contable
    • Tenía la forma de un sistema de menús compuesto por varios módulos RPG y archivos por lotes de DOS
  • El propio compilador realiza la verificación del dongle e inserta la misma rutina de protección en los ejecutables generados

Ingeniería inversa de la rutina de comunicación por puerto paralelo

  • Se analizó SEU.EXE usando el desensamblador Reko
    • Al principio no aparecían instrucciones in/out, pero se hallaron en otro segmento (0800h)
    • Esa rutina lee la dirección del puerto paralelo desde el área de datos del BIOS y envía y recibe datos a través del puerto LPT1
    • Guarda el resultado en el registro BX, no recibe valores de entrada y siempre devuelve el mismo resultado

Deducción del valor constante y parche

  • Se confirmó que al final de la rutina el valor de BH estaba fijado en 76h
    • Solo BL seguía siendo desconocido, así que se exploró el rango 0~255 por fuerza bruta
    • La combinación correcta resultó ser BL=06h, es decir, BX=7606h
  • Los primeros 4 bytes de la rutina se reemplazaron por MOV BX,7606h y RETF para omitir la verificación del dongle
    • Después de eso, el programa se ejecutó de inmediato, y la misma modificación pudo aplicarse a otros ejecutables con la misma rutina

Resultado e importancia

  • Se encontró el mismo código de protección anticopia en todos los componentes del compilador RPG II, lo que permitió modificar todo en bloque
  • Como el dongle simplemente devolvía un valor constante, pudo desactivarse con solo un parche de 4 bytes
  • El compilador modificado funciona correctamente sin dongle y, tras eliminar información personal, se planea publicarlo en un archivo histórico de software
  • Casi no quedan materiales en línea sobre Software West Inc., por lo que se espera poder contactar más adelante a sus creadores

1 comentarios

 
GN⁺ 2026-02-02
Comentarios en Hacker News
  • La protección de software en sus inicios era realmente simple
    Antes tenía un disco de actualización de Windows 3.11, y el instalador fallaba si no detectaba una versión anterior instalada
    La solución era simplemente crear un archivo de texto vacío y guardarlo con el nombre win.com. El instalador escaneaba todo el disco y solo buscaba ese archivo
    En realidad, el disco de actualización ya incluía la instalación completa. Eran tiempos muy simples

    • Cuando era niño, mi padre compró la versión de actualización de Windows 3.1, que decía “actualizable desde la versión 3.0 o anterior”, pero en realidad solo reconocía 3.x
      Al final conseguimos una versión 3.x de un amigo para instalarla, y como no coincidía con lo que anunciaban, sentí que era moralmente aceptable
      Se pueden ver fotos del producto en este enlace de eBay
  • Desarrollo software para ingeniería civil (mes100.com)
    Incluso hoy hay usuarios que prefieren los dongles de hardware. Dicen que les da tranquilidad tener un dispositivo físico en la mano
    Como vendemos licencias perpetuas, cuando un dongle se rompe es un problema porque ya no hay repuestos. No les gustan las licencias en la nube, pero sí permiten ingresos por suscripción
    Pero por más que lo intentemos, siempre circulan versiones crackeadas en línea. No tenemos capacidad para responder legalmente, así que la protección es indispensable

    • Una de las razones para preferir estos dongles es el entorno air-gapped. En lugares que manejan datos de diseño sensibles, como el sector militar o nuclear, no es posible conectarse a redes externas
      Y a algunos simplemente les gusta la autonomía de no depender de un servidor de terceros
    • Dijiste que es una industria donde la regulación cambia lentamente y por eso hay pocos incentivos para actualizar, pero entonces surge la duda de por qué el usuario tendría que seguir pagando
    • Mi padre usaba un programa de ingeniería civil llamado ‘Cosmos’ y utilizaba uno de estos dongles. A veces no lo reconocía, y recuerdo lo frustrante que era
    • Desde la perspectiva del usuario, la actitud de “si no está roto, no lo cambies” es racional
      Por eso el modelo SaaS se siente como un desastre para el usuario. No me gusta la piratería, pero SaaS tampoco
  • Antes los cracks eran mucho más simples
    Bastaba con cambiar JE o JNE por JMP para saltarse la protección
    La clave era identificar dónde estaba el código de protección y cómo funcionaba

    • Hay varias razones por las que surgen protecciones tan simples
      Primero, como los desarrolladores trabajan con el código durante mucho más tiempo que nosotros, una protección demasiado compleja dificulta la corrección de errores
      Segundo, a los hackers les basta con conocer unos cuantos trucos, pero los desarrolladores tienen que bloquearlos todos
      Tercero, las funciones de protección son aburridas y no reciben reconocimiento, así que hay una gran falta de motivación
    • Hace tiempo abrí software demo con un depurador, y en el volcado de memoria estaba la cadena del código de activación tal cual
      La introduje y se activó de inmediato. Después lo compré de forma legítima
    • Una vez rompí la “laser protection” de ProLok en dBASE III
      Firmaban el disquete con láser, pero hasta un adolescente que supiera leer ensamblador podía romperla fácilmente
      De hecho, hasta se podía copiar raspando el disquete con un alfiler. Al final fue un caso en que el marketing iba por delante de la tecnología
  • Escribí código RPG II en los 80, y en los 90 ayudé a migrarlo a un entorno de emulación S/36
    Usábamos un producto de una empresa llamada California Software Products, y funcionaba bastante bien, tanto que la compañía siguió existiendo hasta que su fundador se jubiló

  • Sobre el comentario de “¿no era demasiado simple este método de protección contra copias?”, creo que en esa época era un nivel de ingeniería adecuado
    Con emuladores y descompiladores se podía resolver en pocos días, pero en ese entonces ni siquiera existían esas herramientas

    • El cliente objetivo importa. Si era para impedir el uso no autorizado en empresas comunes de sectores no técnicos, no hacía falta frenar a un ingeniero en reversa profesional
    • Los descompiladores no podían analizar el código de protección
      El 90% del software de esa época era realmente así de simple. No es que se nos estuviera escapando algo más complejo
    • Hacia el año 2000 hice un trabajo de hackeo parecido en una pequeña telefónica de Buenos Aires. Casi todo tenía el nivel de dificultad que describe el OP
    • Nuestra empresa de IT también protege archivos sensibles desplazando bits para producir un número mágico. No hace falta que sea complicado
  • Cuando era niño llegué a crackear un juego de Ultima
    Fue porque me daba pereza meter el floppy cada vez. El código se descifraba a sí mismo y leía la dirección de inicio desde un sector específico del disco
    Ese sector no se podía copiar con herramientas normales, pero resolví el problema modificando el encabezado del ejecutable

  • A principios de los 90, di mantenimiento a un sistema de renovación de licencias desarrollado internamente por la casa matriz de una franquicia
    Había que renovarlo cada mes con un floppy, y la casa matriz a veces bloqueaba arbitrariamente a sucursales que no le caían bien
    Al final varias sucursales se unieron para demandarlos, y yo hice un generador de licencias basado en DOS para que cada sucursal pudiera renovar recibiendo un código por teléfono
    Cuando terminó la demanda, distribuimos un parche que eliminaba por completo la verificación de licencia. Algún día me gustaría volver a ejecutarlo con DOSBox

  • Me pareció interesante ver una publicación que decía que Windows 95 todavía se usa en producción
    A diferencia de las vistosas tendencias de IA, en las áreas aburridas de la industria el cambio tecnológico es lento

    • Hasta 2014 vi una empresa que seguía virtualizando Windows 95 para usarlo. Era un software médico antiguo, pero sorprendentemente estable
    • Por la captura de pantalla, el programa parece ser para DOS. Probablemente Windows solo se usaba para compartir archivos
    • Win95 solo tiene 30 años, y todavía puede funcionar en parte del hardware moderno
      Incluso aún existen sistemas corriendo sobre un emulador de PDP-11
  • Impresiona que este software y este hardware sigan en uso en algunas empresas
    Por eso publicar una versión crackeada podría implicar riesgo legal
    Como las empresas pagan mucho dinero con tal de mantener sistemas antiguos, esta clase de dependencia del proveedor continúa
    Si la patente o la propiedad intelectual siguen vigentes, hay que verificarlo antes de publicar nada

  • Un dongle de hardware que simplemente devuelve un número fijo: realmente es una protección muy simple
    Pero en ese momento era suficiente. Incluso hoy mucho software empresarial usa poco más que una clave de licencia
    En el fondo, era la versión ochentera de la idea de “si me das una señal de que existe una factura, yo pago”