Deprecated: Creation of dynamic property Timber\Site::$pingback is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Site.php on line 180

Deprecated: Creation of dynamic property Timber\User::$name is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/User.php on line 118

Deprecated: Creation of dynamic property Timber\Post::$os_meta is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$has_disclaimer is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_edit_lock is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_edit_last is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_thumbnail_id is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$tipologia is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_tipologia is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$attributi is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_attributi is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$in_evidenza_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_in_evidenza_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$inviato_in_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_inviato_in_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$fonte is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_fonte is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$fonte_url is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_fonte_url is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_category is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_blz_affiliation_attributes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_content_type is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_attributes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_speciali is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_focuskw is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_metadesc is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_linkdex is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_content_score is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_focuskeywords is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_keywordsynonyms is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_estimated-reading-time-minutes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$os_previous_publish_date is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$os_notification_id is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_indexnow_last_ping is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_date_gmt is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$comment_status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$ping_status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_password is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_name is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$to_ping is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$pinged is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_modified is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_modified_gmt is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_content_filtered is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$guid is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$menu_order is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_mime_type is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$comment_count is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$filter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71
Il dongle che bloccava il software: come una protezione hardware è crollata dopo 40 anni

Il dongle che bloccava il software: come una protezione hardware è crollata dopo 40 anni

Per decenni un dongle hardware su porta parallela (LPT) ha limitato l’uso di un software contabile legacy. Il reverse engineering mostra come quella protezione, percepita come invalicabile, fosse in realtà basata su un controllo minimale e statico.

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

Ti consigliamo anche

Link copiato negli appunti