- 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
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 archivoEn realidad, el disco de actualización ya incluía la instalación completa. Eran tiempos muy simples
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
Y a algunos simplemente les gusta la autonomía de no depender de un servidor de terceros
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
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
La introduje y se activó de inmediato. Después lo compré de forma legítima
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 90% del software de esa época era realmente así de simple. No es que se nos estuviera escapando algo más complejo
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
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”