Hacker: La Sfida lanciata da Systems Editoriale

Flavioweb 24-02-2024.
Categoria: Programmazione

Come vincere la sfida Hacker lanciata da Systems Editoriale su Commodore 64 Club.

Sul numero 5 della rivista Commodore 64 Club pubblicata nel 1988, Systems Editoriale includeva il programma HACKER introducendolo con queste parole:

Per gli smanettoni appassionati di informatica, il gioco preferito è molto spesso lo sproteggere il maggior numero di programmi possibile.  L'intenzione che anima gli "Hackers", ovvero gli sprotettori, è quella della sfida...

Ed eccoci qui, a 36 anni di distanza a raccogliere il guanto lanciato da De Simone & C.!

La sfida consiste nel trovare tre parole chiave, sostituire la musica presente nel programma con un'altra fornita all'interno dello stesso dischetto ed infine modificare la scritta "Systems" che appare a fine esecuzione con il proprio "nome di battaglia". Inviando il programma così realizzato alla redazione si avrebbe avuto diritto ad un premio...

A seguire illustreremo come abbiamo vinto la sfida e quali sono stati i passaggi che abbiamo effettuato. Non proseguite la lettura se non volete ricevere SPOILER.


Strumenti utilizzati

Facciamo finta di essere nel 1991 e proviamo a vincere la sfida usando solo hardware e software disponibili all'epoca. Useremo i seguenti tool:

Cominciamo!

Prima parte: La prima password

L'autore (ignoto) si è messo di impegno per complicare le cose.
Da una prima analisi della memoria apprendiamo che il programma è stato freezato con Trilogic Expert 2.7 così da non mostrare subito il suo reale indirizzo di partenza.

Per poter iniziarne un'analisi, perciò, occorre prima eseguirlo ed una volta che ci viene chiesta la prima password possiamo freezarlo con la Action Replay VI ed iniziare ad analizzare la memoria.

Si può subito constatare la presenza di codice nell'area BASIC, però non si tratta di un programma BASIC liscio. Chi ha l'occhio un po' allenato, noterà subito che le caratteristiche del codice sono quelle proprie di un programma BASIC compilato.

Precisamente è un codice BASIC compilato con AustroSpeed 1E 88/Blitz. Da notare come l'autore abbia effettuato anche un'opera di offuscamento del codice eliminando il messaggio standard "Austro" dalla Sysline, cambiandolo in "DARK!" in modo che non fosse immediato capire di che tipo di codice si trattasse.

A questo punto salviamo su disco la RAM che va da $0801 a $23FF.

Carichiamo il decompilatore per Blitz Basic e diamogli in pasto il file appena salvato.
Otterremo su disco la versione BASIC "pura" e quindi più facilmente analizzabile del programma da hackerare.
La prima cosa che si nota sono dei richiami ad una routine Linguaggio Macchina posta all'indirizzo 49152; presumibilmente questo codice serve solo per la stampa dei messaggi a video ma dobbiamo ricordarci di analizzare e salvare su disco anche questa porzione di RAM altrimenti il programma non potrà funzionare.
Cerchiamo di capire quali siano le parole chiave da inserire.

Ogni parola è composta da 5 caratteri ed il codice li memorizza in un array da 0 a 4. Il codice che verifica la validità della prima parola chiave inserita è il seguente:

8256 ifx1<>357goto8178
8264 ifasc(a$(2))<>69goto8178

Le due condizioni IF, controllano che la somma totale dei 5 valori PETSCII, (PET Standard Code of Information Interchange) sia 357 e che la terza lettera corrisponda al valore PETSCII 69, cioè alla lettera "E".

Ne deduciamo che qualsiasi sequenza di caratteri soddisfi queste caratteristiche vada bene. Possiamo ricavare una stringa valida (fra le tante) con l'operazione:

(357-69)/4 per ottenere il valore PETSCII dei 4 caratteri "sconosciuti" e poi ultimare la password mettendo in posizione 2 (cioè al terzo carattere) il valore 69.

357-69 = 288/4 = 72 = lettera "H"

Quindi "HHEHH" è considerata valida, ma saranno accettati anche tutti gli altri caratteri che, sommati, diano come risultato finale il totale 357. Esempio:

"ABEZC", "CJEPC", "DIEPC", etc...

Tra le parole di senso compiuto che vengono riconosciute dal programma ne abbiamo trovate tre: "BREAK", "CHEAT" e... "EBETE"!

Quale tra queste parole era quella effettivamente pensata dai cervelloni della redazione?

Un brute force didattico

A puro titolo di approfondimento e curiosità abbiamo deciso di calcolare tutte le combinazioni possibili di sequenze funzionanti, anche se ai fini della sfida sarebbe bastato trovarne una. A questo scopo abbiamo realizzato un breve programma in BASIC che esegue una procedura di brute forcing.

  10 rem  *****************
  20 rem *   system hack   *
  30 rem *   passwords 1   *
  40 rem *   brute force   *
  50 rem *  by flavioweb!  *
  60 rem *     2 0 2 4     *
  70 rem  *****************
  100 l=4096:f=69
  110 for a5=64to255
  120 for a4=64to255
  130 for a2=64to255
  140 for a1=64to255
  150 r=a1+a2+f+a4+a5
  160 ifr<>357then250
  170 pokel,a1
  180 pokel+1,a2
  190 pokel+2,f
  200 pokel+3,a4
  210 pokel+4,a5
  220 pokel+5,32
  230 l=l+6:if l>=53248 then end
  240 printchr$(a1);chr$(a2);chr$(69);chr$(a4);chr$(a5);" ";
  250 nexta1:nexta2:nexta4:nexta5

Quanto tempo sarebbe servito per trovare tutte le password utilizzando un Commodore 64? Ebbene il programma è stato in esecuzione per tre giorni sul VICE in modalità warp al 1200%. 
Ovvero 30 giorni su macchina reale!

Seconda Parte: Le ultime due Password

Superato il primo scoglio ci troveremo di fronte alla seguente schermata:

A questo punto dovendo trovare la seconda e la terza password le cose si complicano leggermente.
Cominciamo comunque sempre dallo stesso concetto: controllare la somma dei 5 valori PETSCII.
La difficoltà maggiore introdotta sta nel fatto che il carattere fisso in posizione 2 dell'Array (terza lettera) corrisponde al valore 141, cioè alla pressione contemporanea dei tasti SHIFT + RETURN.

Inoltre il valore rimanente per gli altri 4 tasti una volta sottratto quello fisso, è un numero dispari e non divisibile esattamente per 4! Quindi, tabella di codici PETSCII alla mano, dobbiamo trovare 4 valori che sommati diano
377 che poi sommato a sua volta a 141 dia 518.

8615 ify<>518goto8512
8623 ifasc(a$(2))<>141goto8512

Sicuramente anche per risolvere questa parte esistono più soluzioni possibili, ma quella più conveniente che abbiamo trovato è questa:

FRECCIA SU, FRECCIA SU, SHIFT+RETURN, FRECCIA SU, FRECCIA SINISTRA

NB: Le frecce sono i caratteri non i tasti cursore !!!

Stesso discorso vale per la terza password, solo che il "tasto fisso" corrisponde al valore PETSCII 131 cioè... la pressione di SHIFT+RUN/STOP!

8691 ifz<>524goto8512
8699 ifasc(a$(2))<>131goto8512

Anche qui, una soluzione comoda può essere questa:

SHIFT+I, @, SHIFT+RUN/STOP, @, @

Passate le tre password, il programma ci informa che "siamo fortissimi" ma restano ancora alcuni passaggi da effettuare:

  • integrare il codice assembly a 49152
  • sostituire la musica
  • mettere la nostra firma

Per la routine a $C000 (49152) il compito è semplice.
Sempre dal menu freeze dell' AR6 salviamo su disco la RAM da $C000 a $C38F.

La musica è già presente sul disco fornito da Systems, basterà quindi caricarla in RAM al momento giusto.
In teoria ci sono due controlli sulla RAM occupata dalla musica:

8274 ifpeek(30120)<>169goto8178
8284 ifpeek(30200)<>232goto8178

ma nella pratica non controllano in maniera specifica la presenza della musica necessaria a vincere la sfida perché le locazioni sono identiche nei 2 files "musica". La logica del controllo è quella di accettare sia la musica originale che quella proposta per la sostituzione e rifiutare l'assenza di entrambe. Evidentemente non si è ritenuto necessario distinguerle a livello di programmazione perché in redazione avrebbero effettuato una valutazione a orecchio.

Rimane la "nostra firma". Mettiamola qui al posto di SYSTEMS:

9066 f$="Systems"

Finalizzazione

Dopo aver modificato il listato BASIC, salviamolo su disco.
Per fare un lavoro allo stato dell'arte prendiamo un compilatore Blitz. Per questa risoluzione è stato usato Blitz Compiler ma qualunque altro dell'epoca va bene, dopodiché compiliamo il programma.

Resettiamo il Commodore 64 "configurando" la memoria in modo da riempire la RAM tutta con lo stesso valore (la AR6 ha una funzione apposita). Dopodiché carichiamo in RAM:

  • codice BASIC compilato
  • la musica
  • la routine a $C000

e salviamo un unico file da $0801 a $C38F.
Prendiamo un cruncher a vostra scelta (qui abbiamo utilizzato Sledge Hammer++), specificando come indirizzo di partenza quello del codice BASIC compilato (di solito 2076 - $081C) ed avremo su disco l'eseguibile hackerato.

Complimenti!

Abbiamo appena vinto la sfida lanciata dalla Systems.
Mandiamo il programma in redazione e aspettiamo il nostro premio!

I primi cento che invieranno un dischetto, con il programma sprotetto e un allegato contenente le parole chiave, avranno una simpatica sorpresa ma soprattutto avranno l'opportunità di veder pubblicato il suo nome nelle prime pagine della rivista Commodore Computer Club.

Dopo la sfida...

Abbiamo effettuato una serie di ricerche e interpellato qualcuno molto in alto nella redazione Systems nel tentativo di appurare se i premi siano stati effettivamente consegnati e se ci sia stato un seguito alla sfida sulle pagine di CCC. Ma è passato troppo tempo, è difficile ricordare e a complicare le cose si aggiunge l'ineluttabile; all'epoca il responsabile della rivista Commodore 64 Club era Michele Maggi, scomparso nel 2006 e che cogliamo l'occasione per ricordare in questa pagina.

Da un controllo effettuato sui numeri di Commodore Computer Club del periodo non siamo riusciti a trovare alcun accenno alla sfida; né i nomi dei vincitori, né la soluzione dell'enigma. 
Con questo articolo, a quasi quarant'anni di distanza, speriamo dunque di aver chiuso il cerchio.


Risorse e Riferimenti

Commenti
Commenta gioco C'è 1 commento per questo articolo. Registrati se vuoi lasciarne uno.
Non ricordavo questa sfida, compravo la rivista ma probabilmente non ci avevo nemmeno fatto caso perché non è il mio pane. Preferivo giocare e giocare. Ciò detto, l'articolo risulta interessante e facile da seguire anche per chi non ha competenze nel programmare. Davvero bravo l'autore e complimenti a tutti quelli che lavorano nel sito, in gradi di spaziare a 360 gradi su tutto ciò che riguarda il commodore 64.
# - postato da teribbile - 28 February 2024 [21:46]
Commodore 64
Pannello Utente
291 Visitatori, 2 Utenti
Re Tucano, Roberto
Ciao, ospite!
(Login | Registrati)
Merchandising
Ultimo Commento
Clicca per leggere tutti i commenti
Hired Sword
Se vi interessa il gioco è inutile cercarlo sul sito Double Sided Games, non è presente! Mentre di Hired Sword II c’è l’edizione fisica, digitale e tantissima pubblicità, del primo capitolo potete trovare solo un’unica traccia, ovvero che ...
leggi »
Phobos
Articolo
Intervista a Luciano Merighi (Merifon)
Ottimo articolo… solo una nota all’Autore dell’articolo… tra i programmatori bolognesi “pionieri” c’ero anche io: Andrea Paselli! Con Luca Zarri e Marco Corazza ho realizzato Chuck Rock, Over The Net, Mystere, Halley Adventure… ...
Andrea Paselli
Superlink