- Analyse et reconstitution du fonctionnement d’un dongle de port parallèle exigé par un compilateur RPG II de comptabilité dans les années 1990
- Le logiciel d’origine s’exécute dans une console DOS sous Windows 98 et ne fonctionne pas sans le dongle
- Après transfert de l’image disque dans un émulateur pour analyse, il s’est avéré que la même routine de protection contre la copie était insérée dans des exécutables comme RPGC.EXE et SEU.EXE
- L’analyse assembleur a confirmé que la routine renvoyait toujours une valeur constante (7606h), et une modification de 4 octets a permis de contourner la vérification du dongle
- Ainsi, le compilateur RPG II de Software West peut désormais s’exécuter sans dongle, un résultat significatif du point de vue de la préservation des logiciels anciens
La découverte d’un antique logiciel de comptabilité et de son dongle
- Un logiciel de comptabilité basé sur RPG utilisé depuis 40 ans fonctionnait encore sur un PC sous Windows 98
- RPG est un langage destiné aux mini-ordinateurs comme IBM System/3, System/32 et AS/400, ensuite porté sur MS-DOS
- Au lancement, ce programme exigeait un dongle matériel anticopie sur le port parallèle
- Les mentions « Stamford, CT » et le logo de « Software Security Inc. » restaient faiblement visibles sur le dongle
- Le mot « RUNTIME » y figurait également, et son sens est apparu plus tard au cours de l’analyse
Analyse de l’image disque et structure du compilateur RPG
- Extraction de l’image disque du système Windows 98 puis exécution dans un émulateur
- Découverte de deux versions du compilateur RPG II (développé par Software West Inc.) ainsi que de l’ensemble du code source RPG du logiciel de comptabilité
- L’ensemble prenait la forme d’un système de menus composé de plusieurs modules RPG et de fichiers batch DOS
- Le compilateur lui-même effectuait la vérification du dongle et insérait la même routine de protection dans les exécutables générés
Rétro-ingénierie de la routine de communication du port parallèle
- Analyse de SEU.EXE à l’aide du désassembleur Reko
- Au départ, aucune instruction
in/out n’était visible, mais elles ont été trouvées dans un autre segment (0800h)
- Cette routine lisait l’adresse du port parallèle dans la zone de données du BIOS, puis échangeait des données via le port LPT1
- La valeur de résultat était stockée dans le registre
BX, sans valeur d’entrée, et la routine renvoyait toujours le même résultat
Déduction de la valeur constante et modification
- À la fin de la routine, il a été confirmé que la valeur de
BH était fixée à 76h
- Seule la valeur de
BL restait inconnue, et l’intervalle 0 à 255 a été exploré par brute force
- La bonne combinaison s’est révélée être
BL=06h, soit BX=7606h
- Les 4 premiers octets de la routine ont été remplacés par
MOV BX,7606h et RETF afin de contourner la vérification du dongle
- Le programme s’exécutait alors immédiatement, et la même modification pouvait être appliquée à d’autres exécutables contenant la même routine
Résultat et portée
- Le même code de protection anticopie a été retrouvé dans tous les composants du compilateur RPG II, ce qui permet une modification globale
- Le dongle se contentait de renvoyer une valeur constante, ce qui le rendait neutralisable avec une simple modification de 4 octets
- Le compilateur modifié fonctionne normalement sans dongle, et il est prévu de le publier plus tard dans des archives logicielles historiques, après suppression des informations personnelles
- Comme il ne reste presque aucune information en ligne sur Software West Inc., un contact supplémentaire avec le créateur est souhaité
Aucun commentaire pour le moment.