Dopo un primo tentativo di sfruttare l’interprete BASIC fornito con le prime unità PAL delle console PlayStation 2, il developer Cturt ora ci porta alla scoperta di un secondo exploit che permette di sfruttare la funzionalità del lettore DVD della console.
L’exploit che sfruttava l’interprete BASIC è stato ampiamente criticato sul web, certo dopo tanti anni non sarebbe stato facile reperire il disco Yabasic, e anche la compatibilità che si limitava alle sole console del mercato PAL non rendevano appetibile l’entrypoint, da qui la scelta di cancellare l’exploit che è stato definito dallo stesso sviluppatore poco pratico.
FreeDVDBoot: an exploit for the PlayStation 2 DVD player which allows burning your own homebrew games and running them on an unmodified console as though they were official discs: https://t.co/MaPC6urUJQ
Demo: https://t.co/eAdFesyvV3
— CTurt (@CTurtE) June 27, 2020
FreeDVDBoot è un nuovo exploit che sfrutta il lettore DVD Player della console PlayStation 2 per riprodurre applicazioni homebrew masterizzati su supporti ottici come video dimostrativi. Con uLaunchELF come programma iniziale, gli utenti saranno in grado di includere molti più programmi homebrew sullo stesso disco.
Step 1: Identificare la versione del lettore DVD
- Avviare la console PlayStation 2 senza alcun disco inserito e premere per identificare la versione del lettore DVD.
- Per la versione iniziale è supportato solo DVD Player versione 3.10E (poiché questa è la console che ho). In futuro potrei guardare altre versioni del firmware, e spero che nel tempo anche altri sviluppatori della scena contribuiranno con il supporto per ulteriori versioni del lettore DVD.
- File ISO predefiniti per lettori DVD supportati contenenti solo uLaunchELF sono forniti in questa repository per facilità d’uso (che può essere utilizzato per avviare l’homebrew tramite dispositivo USB), come
3.10E.iso
. Se hai intenzione di creare la tua immagine contenente un caricatore iniziale homebrew/modificato aggiuntivo, continua a leggere.
Step 2: Copiare l’applicazione homebrew
- Dopo aver identificato la versione del lettore DVD della console, copiare tutti gli homebrew che si desidera includere sul disco in quella directory (ad esempio
3.10E/
).
Step 3: Creare un’immagine
- Dopo aver inserito tutti gli homebrew nella directory, generare un’immagine UDF della directory. Il modo più semplice è probabilmente di installare
genisoimage
ed eseguire quanto segue (doveexploit.iso
è l’output e3.10E
è la directory contenenteVIDEO_TS
e qualsiasi homebrew):
genisoimage -udf -o exploit.iso 3.10E
Step 4: Test e masterizzazione
- Ti consiglierei di provare prima su PCSX2, ma poiché PCSX2 non supporta il caricamento del lettore DVD, devi decodificarlo e reimballarlo da solo, cosa che va oltre lo scopo di questa guida. Detto questo, se non tocchi nulla in
VIDEO_TS
, non dovrebbe esserci alcun motivo per il fallimento dell’exploit.
OPZIONALE: Sostituire il programma iniziale
Ho incluso uLaunchELF ricompilato con il supporto DVD come programma iniziale predefinito. Presenta un menu che consente di selezionare uno qualsiasi dei programmi homebrew che si è scelto di includere sul disco (e consente anche l’avvio da USB).
In alternativa, se preferisci semplicemente avviare una singola applicazione homebrew, il programma iniziale che l’exploit tenta di avviare si trova in VIDEO_TS/VTS_02_0.IFO
, sostituiscilo con il tuo file ELF desiderato, con l’avvertenza di seguito che la compatibilità potrebbe essere inferiore rispetto a quando si è avviato un programma tramite uLaunchELF:
Per la versione iniziale, non mi sono preoccupato di reimplementare un paio di funzioni utilizzate dal loader, quindi richiede che l’ELF che carichi non sovrascriva quelle funzioni che utilizzo (quelle sono circa 0x84000 - 0x85fff
e 0x250000 - 0x29ffff
). Probabilmente rimuoverò questa limitazione in futuro, ma tutti gli ELF che ho potuto trovare andavano bene con questa limitazione.
È possibile eseguire readelf -l
per verificare che il file eseguibile soddisfi questo requisito. Ad esempio, questo homebrew Tetris utilizza solo 0x00100000 - 0x0017a940
:
$ readelf -l VTS_02_0.IFO
Elf file type is EXEC (Executable file)
Entry point 0x104490
There is 1 program header, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x001000 0x00100000 0x00100000 0x72ef4 0x7a940 RWE 0x1000
Section to Segment mapping:
Segment Sections...
00 .text .ctors .dtors .rodata .data .jcr .sdata .sbss .bss
SVILUPPO: Sostituzione del payload del loader
- Il payload predefinito avvierà
VIDEO_TS/VTS_02_0.IFO
come file ELF, ma si potrebbero desiderare modifiche per migliorare la compatibilità, o forse cambiare il comportamento per avviareBOOT.ELF
, ad esempio. - Se si desidera aggiornare il payload del loader, eseguire
build.sh
nella directoryPAYLOAD
e copiare l’outputfullpayload.bin
inVIDEO_TS/VIDEO_TS.IFO
all’offset0x2bb4
(per 3.10E).
Video dimostrativo
Video dimostrativo del nuovo exploit per console PlayStation 2 attraverso il lettore DVD, che consente di masterizzare giochi homebrew e di eseguirli su di una console non modificata come faresti con i dischi ufficiali.
Questa demo mostra il risultato della patch PS2SDK che aggiunge il supporto per la lettura di dischi video DVD (uLaunchELF ora può caricare homebrew da disco e gli emulatori ora possono caricare ROM da disco).