Modifica
Il colore nero del disco non ha niente a che fare con la protezione! Capiamo prima di tutto come funziona il sistema di sicurezza della console (a quei tempi, una volta bucata il gioco era fatto, niente aggiornamenti, niente di niente, solo una nuova revisione hardware della console a rimpiazzare quelle fallate poteva risolvere il problema ma solo per i nuovi acquirenti). Il principio di funzionamento del sistema anti-pirateria in pillole:
- La Sony inseriva una stringa (SCEA, SCEI, SCEE, SCEW, in base al paese) all'interno del CD ufficiale del gioco, in posizioni che non potevano essere replicate dai normali lettori CD.
- Il controller del CD Drive della Playstation 1 andava a cercare la presenza di questa stringa per identificare il disco come originale. Una volta che il controller decideva se il disco era ufficiale oppure no, la CPU leggeva la decisione del controller del CD Drive e agiva di conseguenza.
- Se la stringa non veniva trovata, oppure non era valida, la Playstation capiva che il disco non era autentico. Tuttavia, la Playstation 1 teneva conto anche di eventuali errori di lettura del disco, e di conseguenza c'era un ampio margine di errore per passare il controllo di autenticita'.
- Oltre al codice di autenticita' SCE (che permetteva di bloccare i CD pirata), seguiva una lettera in base al paese di produzione. Grazie a questa lettera, la Sony ottenne anche il Region Lock, che impediva a CD provenienti da paesi di versi, di essere letti dalla console.
Region Lock (PS1 Fat/PsOne)
Il Region Lock veniva eseguito su tutte le versioni della Playstation 1. Questo significa che un gioco originale acquistato fuori dall'unione europea (per esempio) non poteva essere eseguito su una Playstation 1 europea. La console per verificare la provenienza del disco andava a leggere i primi settori di quest'ultimo (la cosiddetta wobble area dal settore 0 al settore 4, locata nell'area centrale del disco che i normali CD-ROM non hanno, tutti i settori dal 12 al 15 erano riempiti di zeri e venivano automaticamente corretti dai masterizzatori che c'erano all'epoca facendo risultare la copia del disco non identica e di conseguenza illegibile perche' la console se ne accorgeva. I masterizzatori correggevano gli zeri poiche' non potevano esserci in quei settori per lo standard del formato del CD) dove veniva scritto il codice SCEx (dove X sta per la lettera incognita del paese d'origine) composto da 4 byte sotto forma di 1 e 0 strutturato come un normale segnale seriale (1 bit di start, 8 bit di dati, 2 bit di stop), il tutto inviato a 250bps:
Dopo aver letto la Wobble area andava a comparare il valore SCEx letto dal disco con quello salvato nel BIOS (Boot-ROM in realta'), quindi la CPU aspettava di ricevere il codice SCEx a 250bps, se il codice SCEx era diverso la console si rifiutava di avviarlo (non facendo distinzione tra un disco originale di un'altra nazione e uno masterizzato pirata, il valore differisce e questo basta a non farla avviare). Un modo per ovviare a questo problema era inserire un microcontrollore il cui compito era iniettare, nel momento giusto e al pin giusto, l'ultima lettera del codice SCEx (di tutti i paesi, fino a quando la console rileva quello giusto) ingannando la console facendogli pensare che il disco fosse originale. Quindi la sequenza di boot era:
e per patchare il processo la sequenza del microcontrollore era:
- SCE= Sony Computer Entertainment
- SCEA (America) per Stati Uniti 1 00110101 00, 1 00111101 00, 1 01011101 00, 1 01111101 00
- SCEI (Inc) per Giappone 1 00110101 00, 1 00111101 00, 1 01011101 00, 1 01101101 00
- SCEE (Europe) per Europa 1 00110101 00, 1 00111101 00, 1 01011101 00, 1 01011101 00
- SCEW per la Net Yaroze
Dopo aver letto la Wobble area andava a comparare il valore SCEx letto dal disco con quello salvato nel BIOS (Boot-ROM in realta'), quindi la CPU aspettava di ricevere il codice SCEx a 250bps, se il codice SCEx era diverso la console si rifiutava di avviarlo (non facendo distinzione tra un disco originale di un'altra nazione e uno masterizzato pirata, il valore differisce e questo basta a non farla avviare). Un modo per ovviare a questo problema era inserire un microcontrollore il cui compito era iniettare, nel momento giusto e al pin giusto, l'ultima lettera del codice SCEx (di tutti i paesi, fino a quando la console rileva quello giusto) ingannando la console facendogli pensare che il disco fosse originale. Quindi la sequenza di boot era:
- La CPU aspetta di ricevere il codice SCEx di 4 byte a 250bps.
- Una volta che il codice SCEx viene individuato (oppure no) la console avvia il gioco se il codice SCEx corrisponde oppure si rifiuta di avviarsi se e' diverso da quello salvato nel BIOS oppure se il disco e' una copia (i normali masterizzatori non erano in grado di scrivere i settori dove era contenuto il codice SCEx).
- Lettura TOC (Table of Contents)
- Esecuzione del contenuto
e per patchare il processo la sequenza del microcontrollore era:
- Inviare uno stato logico basso sul pin Gate ("Output Enable") della porta logica, in questo modo sull'output della porta logica troviamo uno stato di alta impedenza (che corrisponde ad un filo scollegato) e di conseguenza viene disabilitato.
- Inviare la stringa di 4 byte contenente il codice SCEx alla CPU al posto della porta logica (che e' disabilitata) sul pin Data del Mechacon (Mechanism Controller).
Custom Text (PsOne)
Sulla PSOne, oltre al region lock, la Sony implemento' una seconda verifica per contrastare la pirateria. La console eseguiva un secondo check al file eseguibile contenuto nel disco dopo il boot, al momento della visualizzazione del logo iniziale (schermata nera). Praticamente la stringa "Licensed by Sony Computer Entertainment America SCEx TM" non era contenuta nella console ma proprio nel file eseguibile all'interno del disco, quindi veniva letta e sovrapposta sulla schermata di boot al di sotto del logo Playstation. Quindi la console comparava tale stringa presente nel disco con quella nel BIOS (perche' nel BIOS nella PsOne era stata aggiunta), in questo modo veniva ingannata al primo controllo ma non al secondo. Per bypassare anche questa seconda verifica basto' cambiare il comportamento del microcontrollore per patchare i dati (la stringa) del secondo check. Quindi la sequenza divenne:
- Verifica codice regionale (patchato con modchip)
- Lettura TOC (Table of Contents)
- Seconda verifica della stringa (patchato nuovamente dal chip)
- Esecuzione del contenuto
Anti-ModChip (PsOne)
Un ulteriore modifica fu aggiunta sulla PSOne, in modo da far capire alla console se era stato installato un modchip. La Sony chiese agli sviluppatori di videogiochi di inserire una porzione di codice all'interno, che veniva eseguita proprio durante il gioco e che chiedeva il codice regionale SCEx nuovamente, permettendo alla console di rilevare se era stata modificata in questa maniera:
Ed anche in questa occasione, e' bastato cambiare il comportamento del microcontrollore per effettuare la patch ai primi check per poi disattivarsi.
Quindi per bypassare la protezione si poteva utilizzare:
I microcontrollori piu' utilizzati per fare i modchip erano:
I modchip potevano essere venduti con il codice sorgente gia' precaricato oppure vuoti, in questo caso bisognava munirsi di programmatore e scrivere il codice sorgente nel microcontrollore.
Quindi riassumendo:
PS1:
- Region Lock (codice SCEx).
- Protezione contro action replay (con la rimozione della porta parallela).
PSone:
- Region Lock (codice SCEx).
- Protezione con testo di avvio personalizzato.
- Protezione contro modchip.
- La lente si posiziona sulla wobble area e legge il codice SCEx, se il disco e' piratato il modchip provvede ad inviare tutti i codici regionali ed inganna la console
- La lente si posiziona in un'altra area del disco (dove il codice SCEx non dovrebbe esserci) e legge nuovamente il codice SCEx, a questo punto il modchip intercetta le nuove richieste del codice SCEx e invia nuovamente tutti i codici regionali e la console si accorge che e' piratata perche' non avrebbe dovuto ricevere il codice SCEx con la lente in quel punto del disco
Ed anche in questa occasione, e' bastato cambiare il comportamento del microcontrollore per effettuare la patch ai primi check per poi disattivarsi.
Quindi per bypassare la protezione si poteva utilizzare:
- Modchip, per patchare i dati in tempo reale durante i check, e' il metodo migliore anche perche' e' permanente e di facile utilizzo (fa tutto da solo). Per le PS1 Fat il migliore e' il MultiMode V3 (MM3) mentre per le PSOne il migliore e' il OneChip.
- ActionReplay, era una cartuccia che andava inserita nella porta parallela della console (Negli ultimi modelli Sony rimosse tale porta impedendo l'utilizzo della cartuccia). Non faceva altro che bypassare il codice SCEx un po' come i modchip.
- Disc Swap, (solo Fat) questo metodo faceva leva sul fatto che la console se non riusciva a leggere il disco, continuava a provare per un notevole lasso di tempo (per far si che i dischi rovinati e graffiati venissero letti) permettendo l'operazione di swap del disco. Consisteva nel bloccare lo switch del vano disco per operare a sportello aperto per poi inserire un disco originale, farlo leggere alla console (in questo modo i dati SCEx rimanevano in memoria) ed inserire il disco masterizzato pirata. Tuttavia cosi' facendo i dischi si graffiavano e si rischiava di danneggiare la console, oltre al fatto che era un po' impegnativo come metodo.
I microcontrollori piu' utilizzati per fare i modchip erano:
- Microchip PIC16x54
- Microchip PIC16x84
- Microchip PIC12C508 (C= Memory EPROM OTP (Once Time Programmable)) F= Riscrivibile
- Microchip PIC12C509 (Infatti e' possibile scrivere questo microcontrollore una sola volta)
I modchip potevano essere venduti con il codice sorgente gia' precaricato oppure vuoti, in questo caso bisognava munirsi di programmatore e scrivere il codice sorgente nel microcontrollore.
Quindi riassumendo:
PS1:
- Region Lock (codice SCEx).
- Protezione contro action replay (con la rimozione della porta parallela).
PSone:
- Region Lock (codice SCEx).
- Protezione con testo di avvio personalizzato.
- Protezione contro modchip.
ModChip
Tornando al modchip, esso consiste in un microcontrollore che ha lo scopo di iniettare il codice SCEx. In base al metodo di funzionamento un microcontrollore puo' impiegare dai 4 agli 8 fili. I pin utilizzati dal microcontrollore possono essere:
Quindi ogni CD contiene 4 byte nella Wobble Area che compongono il codice SCEx, la CPU della PS1 aspetta di vedere questi 4 byte durante l'avvio, se non riceve i 4 byte la console va in modalita' lettore cd musicale.
L'installazione e la programmazione del modchip e' di una semplicita' disarmante, basta munirsi di un microcontrollore PIC12F508/PIC12C508 (ce ne sono anche altri), programmare uno dei codici sorgente inclusi nell'area download e installare il chip seguendo gli schemi elettrici.
- VCC: Alimentazione Positiva
- GND: Massa
- Gate: Pin di enable che permette di portare allo stato logico alto l'output della porta logica.
- Data: Output della porta logica.
- Reset: Per rilevare il momento in cui iniettare la stringa SCEx.
- Clock: Per fornire il segnale di clock che serve a far oscillare il microcontrollore (opzionale se il microcontrollore possiede un oscillatore interno).
Quindi ogni CD contiene 4 byte nella Wobble Area che compongono il codice SCEx, la CPU della PS1 aspetta di vedere questi 4 byte durante l'avvio, se non riceve i 4 byte la console va in modalita' lettore cd musicale.
L'installazione e la programmazione del modchip e' di una semplicita' disarmante, basta munirsi di un microcontrollore PIC12F508/PIC12C508 (ce ne sono anche altri), programmare uno dei codici sorgente inclusi nell'area download e installare il chip seguendo gli schemi elettrici.
Struttura CD
Ecco come sono strutturati i prim 16 settori di un CD standard Playstation 1:
- Settore 0-3: Riempito di zeri (Mode2/Form1, 4x800h bytes, plus ECC/EDC)
- Settore 4: Stringa Licenza
- Settore 5-11: Logo Playstation (3278h bytes) (bytes rimanenti riempiti con FFh)
- Settore 12-15: Riempito di zeri (Mode2/Form2, 4x914h bytes, plus EDC)
Download
Per ulteriori informazioni sul reverse engineering si possono consultare questi documenti:
psx-spx.txt | |
File Size: | 1247 kb |
File Type: | txt |
psx-reverse-eng.pdf | |
File Size: | 632 kb |
File Type: |
Ecco i service manual + schemi elettrici delle serie SCPH100 (PsOne), SCPH9000 (Fat), SCPH7500 (Fat), SCPH5500 (Fat):
|
|
Schema elettrico alimentatore Ps1 Fat SCPH-1002:
sony_playstation_one_scph-1002__schematic_.pdf | |
File Size: | 227 kb |
File Type: |
Gli schemi elettrici delle altre non si trovano.
Ecco la reference dell'instruction set per il MIPS3000:
Collezione BIOS:
|
Schemi elettrici + codici sorgente modchip:
|