Per oltre due decenni i dongle hardware o chiavi di protezione hardware hanno rappresentato una delle forme più tangibili di controllo sull’uso del software. Piccoli blocchi di plastica e resina, collegati a una porta parallela o seriale: senza di loro il programma installato non poteva funzionare. Componenti come quello in figura restano scolpiti nella memoria di molti.
Il lavoro di reverse engineering su un dongle di circa 40 fa, come racconta Dmitry Brant, offre uno spaccato interessante su quanto spesso la distanza tra l’intenzione progettuale e l’implementazione reale fosse enorme negli anni ’80 e ’90. Non tanto per ingenuità, quanto per un diverso equilibrio tra costi, tempo e percezione della minaccia.
La chiave hardware o dongle come “autorità esterna”
Negli anni ’80 e ’90, il dongle era visto come un’autorità fisica esterna al computer. A differenza di una protezione puramente software, non era duplicabile come un semplice floppy disk. Questo bastava, nella mente di molti produttori, a scoraggiare la copia su larga scala.
Dal punto di vista tecnico, però, molti dongle non facevano quasi nulla. Alcuni esponevano solo una manciata di bit leggibili dalla porta parallela (LPT). Altri restituivano una sequenza fissa, o poco più. In teoria avrebbero potuto implementare meccanismi di challenge-response complessi, cifratura, stati interni. In pratica, svolgevano il ruolo di un semplice interruttore.
Il caso di un sistema Windows 98 con chiave hardware usato ancora nel 2026
Brant racconta una “storia dell’orrore”. Nel 2026, addirittura ancora dopo 40 anni, lo studio contabile di un amico utilizzava ancora un software estremamente obsoleto, che limitava la possibilità di utilizzo su più computer proprio per via della presenza del dongle hardware.
Il software in questione fu sviluppato utilizzando un linguaggio di programmazione chiamato RPG (“Report Program Generator“), addirittura più vecchio del COBOL, e utilizzato sui computer IBM di fascia media come System/3, System/32 e fino all’AS/400. Successivamente il software fu portato su MS-DOS, in modo che gli stessi strumenti software sviluppati con RPG potessero essere eseguiti sui personal computer.
Insomma, ancora oggi, lo studio contabile aveva in rete un computer Windows 98 ed eseguiva il software RPG all’interno di una del terminale DOS.
Quando il reverse engineering diventa un bisturi
L’analisi statica degli eseguibili, effettuata con il disassemblatore e decompilatore Reko, rivela una separazione interessante del codice in segmenti distinti. In un altro articolo ricordiamo le differenze tra dissambler e decompiler.
La routine di protezione è confinata in un segmento minuscolo, meno di 150 byte, contenente istruzioni IN e OUT verso la porta parallela. Nessuna offuscazione sofisticata, nessuna crittografia: solo una sequenza di scritture e letture che culmina in un valore finale memorizzato nel registro BX.
Ed è qui che emerge l’elemento più sorprendente: la routine non riceve input esterni. Nessun parametro, nessuna dipendenza dallo stato del programma chiamante. Il valore restituito è, per definizione, costante. In altre parole, il dongle non “risponde” in modo dinamico. Conferma semplicemente un numero.
Una volta compreso che il valore atteso in BX è fisso, l’intero castello crolla. È sufficiente sostituire l’inizio della routine con poche istruzioni: impostare BX sul valore atteso e terminare immediatamente con un RETF.
Nel caso specifico, Brant ha verificato che un byte – detto byte alto o BH – è sempre 0x76. L’altro byte, necessario per l’autorizzazione all’esecuzione del programma, è un registro a 8 bit (byte basso o BL). Poiché un registro a 8 bit può avere solo 256 valori possibili, il ricercatore non ha fatto altro che sviluppare un semplice script per mettere a terra un altrettanto banale brute force.
Nello specifico, lo script inserisce un valore in quel particolare byte (da 0 a 255) e avvia programmaticamente l’eseguibile. Automatizzando il tutto tramite DosBox, Brant ha potuto individuare il valore corrette in una manciata di secondi.
Da quel momento, ogni eseguibile del programma — incluso il compilatore stesso — è risultato libero dal vincolo hardware. Ancora più interessante: il compilatore patchato genera automaticamente binari già “liberati”.
Preservare, non piratare
L’obiettivo finale non è l’elusione della protezione per uso improprio, ma la conservazione del patrimonio informatico. Senza questo intervento, decenni di dati contabili sarebbero rimasti prigionieri di una porta parallela e di un pezzo di plastica ormai irreperibile.
Una volta ripulito da informazioni sensibili, il compilatore RPG II rinvenuto da Brant rappresenta un reperto storico di valore, testimonianza concreta di come il software enterprise veniva concepito, distribuito e difeso prima dell’era dell’attivazione online.
Una protezione figlia del suo tempo
È legittimo chiedersi se un meccanismo come quello descritto puntualmente da Brant fosse davvero considerato adeguato, persino degno di brevetto. Ma il contesto storico conta, e molto.
All’inizio degli anni ’90, il reverse engineering su PC non era diffuso, gli strumenti erano rudimentali e il solo accesso fisico alla macchina costituiva già una barriera significativa.
Il vero errore, semmai, è stato concettuale: utilizzare un dongle come semplice “chiave numerica”, senza challenge-response, senza variabilità, senza legame reale con l’hardware ospite.
Credit immagine in apertura: Fox89 (Wikipedia), licenza CC BY-SA 4.0