In breve
La lezione 9.2 mostra due esempi di registrazione basata su un codice: Winformant 4 (versione 1.10) per Windows 3.1 e Snap32 (versione 2.54) per Windows 95. Introduce la tecnica che l'autore chiama vincolo dei dati: durante il controllo, il valore atteso si trova spesso vicino a quello digitato dall'utente. Poi analizza uno schema che confronta due somme calcolate dal nome e dal codice. Termina con una guida per cercare file in rete usando la posta elettronica.
Il testo contiene procedure per ricavare codici di registrazione e due codici d'esempio. Non li riporto, né riporto comandi, indirizzi o valori. Spiego le idee di progetto, le imprecisioni e le debolezze.
1. L'idea del «vincolo dei dati»
Chi scrive una protezione deve poterla collaudare. Per farlo, dice l'autore, guarda insieme tre valori: quello digitato dall'utente, quello trasformato e quello atteso. Perciò, mentre il programma lavora, i tre valori tendono a stare vicini in una piccola area di memoria, spesso nello stack. Il testo sostiene che il valore atteso, chiamato «eco», compare entro circa 144 byte da quello digitato.
Per un progettista la lezione è chiara: se il programma tiene in memoria la risposta giusta in forma leggibile, chiunque osservi quella memoria può leggerla. Per una licenza, il punto è non distribuire il segreto che permette di emetterla: una verifica di firma separa la capacità di controllare da quella di creare codici. Non basta sostituire il valore atteso con un hash per risolvere ogni problema.
L'affermazione che questo valga «quasi sempre» o «nel 90% dei casi» è una stima dell'autore, senza campione dichiarato.
2. Il primo esempio: registrazione reversibile
Il programma permette di annullare la registrazione. L'autore considera preziosa questa funzione perché consente di provare molti codici senza reinstallare. La sequenza di analisi segue un dato: dalla finestra che lo riceve alla funzione che lo legge, poi alle copie intermedie e alla trasformazione. È lo stesso metodo delle lezioni precedenti.
Il punto nuovo è l'osservazione della memoria nello stesso momento in cui il programma si prepara a lavorare sull'input. L'autore mostra che nome, numero digitato e valore atteso compaiono tutti nella stessa area, nonostante il nome interno del programma non coincida con quello commerciale. La vicinanza dei dati permette di interpretare il comportamento senza ricostruire tutta la trasformazione.
Il testo propone poi esercizi: trovare il proprio codice, studiare i due algoritmi, individuare il confronto e inventare una modifica che accetti ogni codice. Non li svolgo, perché l'ultimo è un aggiramento operativo.
3. Il secondo caso: due valori derivati
Nel secondo programma il nome e il numero non vengono confrontati come stringhe. Ogni input viene trasformato in un numero intermedio e i due risultati vengono confrontati. Il testo separa quattro momenti:
- Validazione. Il programma controlla i caratteri, usando una tabella invece di un confronto esplicito con i limiti delle cifre.
- Preparazione. Segni e separatori vengono trattati in modo diverso dalle cifre.
- Trasformazione. Una routine calcola un valore mediante tabelle e somme.
- Confronto. Il programma confronta i risultati dei due percorsi e decide se accettare.
Il testo attribuisce una parte del calcolo al modulo grafico di Windows, non al codice dell'applicazione. La presenza di un calcolo in un modulo di sistema non dimostra però che quel modulo sia stato progettato per la protezione: può essere una routine generale riutilizzata.
4. Cosa mostra il confronto
L'autore sostiene che non serva conoscere ogni passaggio del calcolo, perché i due percorsi convergono in un confronto. Il valore prodotto da uno dei due viene salvato in una variabile locale e poi confrontato con il risultato dell'altro. Il testo fornisce un valore concreto e il numero che corrisponderebbe a una registrazione: li ometto.
La questione didattica è la differenza tra trasformazione e segretezza. Dare al dato un aspetto diverso non basta se il programma contiene sia la regola sia il valore atteso. Per proteggere una licenza, una verifica a chiave pubblica separa la capacità di controllare da quella di emettere licenze. Resta comunque il problema dell'alterazione del programma locale.
5. Indirizzi, selettori e l'idea di «sempre»
Il testo dice che dati e codice si trovano «sempre» in intervalli precisi e che le occorrenze sopra una certa soglia di indirizzo sono quelle da guardare per prime. Sono osservazioni tratte dal debugger e dalla configurazione di Windows 95: non vanno generalizzate. La documentazione Microsoft ricorda che lo spazio degli indirizzi virtuali è privato per ogni processo e che il sistema lo gestisce; i dettagli variano con la versione di Windows. Spazio degli indirizzi virtuali
Trabocchetti nelle tabelle
L'autore avverte che una tabella di validazione può nascondere reazioni dannose: certi caratteri potrebbero far uscire dalla routine o, peggio, cancellare file. Il testo non indica un caso verificabile. Resta un buon avvertimento pratico: un programma sconosciuto va eseguito in un ambiente isolato.
6. Distribuzione, etica e politica
- Il testo dice che i programmi «crackati» dovrebbero essere dati a chi ne ha bisogno e non ha denaro, mentre agli altri andrebbe spiegato come fare. La necessità economica, da sola, non conferisce il permesso del titolare di distribuire copie o modifiche.
- L'autore distingue chi usa il proprio nome da chi usa quello di altri o elenchi di numeri seriali. Per lui il secondo comportamento è «furto». La distinzione è una sua regola di stile, non un criterio giuridico.
- La stima sulle percentuali di ricchezza e proprietà dei mezzi di informazione è attribuita a «ricerche americane» che l'autore stesso definisce sospette. Non è verificata.
- Il tono ostile verso chi non è d'accordo (le minacce verbali rivolte a chi riutilizza codici altrui) non aggiunge nulla alla comprensione tecnica.
7. Cercare file in rete con la posta elettronica
L'ultima parte spiega come cercare e ottenere un file senza navigare, in un'epoca in cui i collegamenti erano lenti. Si inviava una richiesta a un servizio di ricerca per file FTP e poi una seconda richiesta a un servizio che scaricava il file e lo rispediva codificato. Il primo servizio era Archie, nato nel 1990 per indicizzare i nomi dei file sui server FTP pubblici; è considerato il primo motore di ricerca di Internet. Archie, Britannica
Gli elenchi di indirizzi e server sono documentazione storica, non recapiti che questa pagina abbia verificato come funzionanti oggi. Il processo comprendeva una ricevuta, una coda di richieste e infine il file codificato in testo (uuencode).
L'invito finale
L'autore consiglia di scegliere un nome d'arte con il segno «+» come riconoscimento fra allievi, promette supporto «do ut des» e annuncia una «università» del 1997. Il testo si interrompe subito dopo «Not all lessons of my tutorial are on the Web», con puntini finali. Non posso dire se il documento originale continui.
8. Limiti della spiegazione e glossario
La vicinanza dei valori nello stack è un indizio osservato nel caso descritto, non una legge: dipende dalle variabili, dal compilatore e dal momento dell'esecuzione. Che l'autore la attribuisca alla comodità delle finestre di osservazione è una sua interpretazione, non una causa dimostrata.
- Eco
- Nome usato nel tutorial per un valore atteso o una copia intermedia presente in memoria.
- Stack
- Area impiegata per dati temporanei, parametri e indirizzi di ritorno.
- Tabella di consultazione
- Struttura che associa a un indice un valore già predisposto.
- Codifica del file via posta
- Trasformazione di dati binari in testo adatto al trasporto nei sistemi di posta dell'epoca.
Fonti e verifiche
Fonte primaria: testo incollato dall'utente, identificato come 9.2 dopo la correzione della numerazione. La seconda copia comprende la frase finale che nella prima era interrotta. Fonti di contesto: le pagine Microsoft e Britannica collegate sopra. Non sono stati eseguiti i programmi, ricavati codici, provate registrazioni o verificate le percentuali dell'autore.
Il collegamento al DOC originale presuppone il nome ORC_9_2.DOC: va adeguato se il documento conservato ha un nome diverso.